お問い合わせ入力フォーム(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でいたずらから守る(サニタイジング




こんなことにならないために・・・


《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>