こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SESSIONを使用したユーザ登録を作成しています。

SESSIONを使用したユーザ登録を作成しています。
フォーム→確認ページ→登録完了という流れのページを作成しています。
ソースは下記のとおりになります。(文字数制限のため、ソースを省略しています。)

フォームページ
/* form.php */
<?php session_start(); ?>
<html>
<body>
<form action="confirm.php" method="POST">
名前:<input type="text" name="name" value="<?php echo $_SESSION["name"]; ?>" >
<input type="hidden" name="regist" value="<?php echo $regist; ?>" />
<input type="submit" name="confirm" value="確認">
</form>
</body>
</html>

確認ページ
/* confirm.php */
<?php
session_start();
$regist = $_POST["regist"];

?>
<html>
<body>
名前:<?php echo $name; ?>
<form action="complete.php" method="post">
<input type="hidden" name="regist" value="<?php echo $regist; ?>" />

<input type="submit" name="submit" value="登録" />
</form>
</body>
</html>

登録完了ページ
/* complete.php */
<?php
session_start();
$regist = $_POST["regist"];
$link = DBNAMEなどの設定
$name = htmlspecialchars($_POST["name"]);

$query = "INSERT INTO `user` (`name`) VALUES('$name')";
$result = mysql_query($query, $link);
if ($result) {
$msg = '登録しました。';
} else {
$msg = '登録に失敗しました。';
}
?>
<html>
<body>
<?php echo $msg; ?>
</body>
</html>

としています。

ご質問なのですが、フォーム画面にて名前を入力して、確認画面では名前が表示されるのですが、登録完了では空の値になってデータベースに登録されてしまいます。
たぶん確認画面から登録完了画面への受け渡しができていないのはわかるのですが、記述方法がわかりません。

PHPは初心者のため、おわかりの方がいらっしゃいましたら、ご教授いただけないでしょうか?
宜しくお願いいたします。

投稿日時 - 2010-09-18 16:15:34

QNo.6191005

すぐに回答ほしいです

質問者が選んだベストアンサー

SESSION変数に、入力してもらった名前を格納してないですね。

confirm.phpで、
$_SESSION['name'] = $_POST['name'];

として、
complete.phpで、
$name = $_SESSION['name'];

とする必要があるのではないでしょうか。



そして、以下余談。
■htmlspecialcharsのタイミング
基本的に、格納された文字を出力するときにするのが一般的です。
今回の例ですと、フォームのinputタグのvalue値に出力するときに、

<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES);?>

などとする必要があります。
また、関数名が長くて面倒だしHTML中に書くとごちゃつく、ということであれば、
function h($value){
return htmlspecalchars($value, ENT_QUOTES);
}
とか、短い関数名を作ってやって、HTML上で

<?php echo h($_POST['name'])?>

とするとか。

■mysqlのクエリに直接文字を入力してはだめ
$name = mysql_real_escape_string($name);
として、必ずエスケープを。(省略したソースの中に書いてあったんだったらすみません。)

投稿日時 - 2010-09-18 17:21:09

お礼

お忙しい中、ご回答有難う御座います。

できました。
complete.phpの方での受け渡しができていなかったでした。

また、色々と助言を有難う御座います。
また、勉強の身ですのでとても助かりました、

本当に有難う御座いました。

投稿日時 - 2010-09-18 17:41:29

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問