お問い合わせ入力フォーム(3)
お問い合わせ入力フォーム(3)
- サンクスページにデータを受け取っていることを明示する
《thanks.php》
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>確認画面</title> <link href="style.css" rel="stylesheet" media="screen, print"> </head> <body> <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; print $name.'様<br>'."\n"; print 'お問い合わせ、ありがとうございました。<br>'."\n"; print 'お問い合わせ内容『'.$message.'』を<br>'."\n"; print $email.'にメールで送りましたのでご確認ください。'."\n"; ?> </body> </html>
- この時点でthanks.phpには、データが表示されません
- 「$_POST」からデータを受け取ろうとしていますが、check.phpからはデータを送り出していません
- index.phpで書かれたデータは、変数「$name」「$email」「$message」には入っています
- そのデータを画面に表示することなく、thanks.phpに渡します
type="hidden"
- $_POSTでformに入力されたデータが格納されています
- 「check.php」には、入力欄がありません
- 変数「name」「email」「message」には、入力されたデータが入っています
- それを画面に表示することなく「thnaks.php」に渡します
print '<input type="hidden" name="name" value=" '.$name.' ">'; print '<input type="hidden" name="email" value=" '.$email.' ">'; print '<input type="hidden" name="message" value=" '.$message.' ">';
《check.php》
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>確認画面</title> <link href="style.css" rel="stylesheet" media="screen, print"> </head> <body> <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; print '<ul>'."\n"; print '<li>'; if($name=='') { print 'お名前が、入力されていません。'; } else { print 'ようこそ、'.$name.'様'; } print '</li>'."\n"; print '<li>'; if($email=='') { print 'メールアドレスが、入力されていません。'; } else { print 'メールアドレス:'.$email; } print '</li>'."\n"; print '<li>'; if($message=='') { print 'お問い合わせの内容が、入力されていません。'; } else { print 'お問い合わせの内容:'.$message; } print '</li>'."\n"; print '</ul>'."\n"; if($name=='' || $email=='' || $message=='') { print '<form>'."\n"; print '<input type="button" onClick="history.back()" value="戻る">'."\n";; print '</form>'."\n"; } else { print '<form action="thanks.php" method="post">'."\n"; print '<input type="hidden" name="name" value=" '.$name.' ">'; print '<input type="hidden" name="email" value=" '.$email.' ">'; print '<input type="hidden" name="message" value=" '.$message.' ">'; print '<input type="button" onClick="history.back()" value="戻る">'."\n"; print '<input type="submit" value="送信">'."\n"; print '</form>'."\n"; } ?> </body> </html>
hiddenフィールドの問題点
- hiddenフィールドは見た目を隠しているだけ(ブラウザには表示しないけれど、ソースコードでは見える)
- メールフォームでは問題ありませんが、詳しい個人情報(ID・パスワード)や購入情報などには適しません
htmlspecialcharsでいたずらから守る(サニタイジング)
- クロスサイトスクリプティング(XSS)から守る
こんなことにならないために・・・
《check.php》
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>確認画面</title> <link href="style.css" rel="stylesheet" media="screen, print"> </head> <body> <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $name = htmlspecialchars($name); $email = htmlspecialchars($email); $message = htmlspecialchars($message); print '<ul>'."\n"; print '<li>'; if($name=='') { print 'お名前が、入力されていません。'; } else { print 'ようこそ、'.$name.'様'; } print '</li>'."\n"; print '<li>'; if($email=='') { print 'メールアドレスが、入力されていません。'; } else { print 'メールアドレス:'.$email; } print '</li>'."\n"; print '<li>'; if($message=='') { print 'お問い合わせの内容が、入力されていません。'; } else { print 'お問い合わせの内容:'.$message; } print '</li>'."\n"; print '</ul>'."\n"; if($name=='' || $email=='' || $message=='') { print '<form>'."\n"; print '<input type="button" onClick="history.back()" value="戻る">'."\n";; print '</form>'."\n"; } else { print '<form action="thanks.php" method="post">'."\n"; print '<input type="hidden" name="name" value="'.$name.'">'; print '<input type="hidden" name="email" value="'.$email.'">'; print '<input type="hidden" name="message" value="'.$message.'">'; print '<input type="button" onClick="history.back()" value="戻る">'."\n"; print '<input type="submit" value="送信">'."\n"; print '</form>'."\n"; } ?> </body> </html>
以上のように、文字列として表示してしまいます。
《thanks.php》
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>確認画面</title> <link href="style.css" rel="stylesheet" media="screen, print"> </head> <body> <?php $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $name = htmlspecialchars($name); $email = htmlspecialchars($email); $message = htmlspecialchars($message); print $name.'様<br>'."\n"; print 'お問い合わせ、ありがとうございました。<br>'."\n"; print 'お問い合わせ内容『'.$message.'』を<br>'."\n"; print $email.'にメールで送りましたのでご確認ください。'."\n"; ?> </body> </html>