【PHP】お問い合わせフォーム
kurumin
プログラミングのーと
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Webフォーム</title>
</head>
<body>
<h1>Webフォーム</h1>
<form action="receive.php" method="post">
名前:<input type="text" name="myname" required><br>
年齢:<input type="number" name="age"><br>
<input type="submit" value="送信">
</form>
</body>
</html>
<?php
$myname = $_POST['myname'];
$age = $_POST['age'];
// セッションにデータを格納
session_start();
$_SESSION['myname'] = $myname;
$_SESSION['age'] = $age;
// Tokenを作成
// 疑似乱数を生成
$bytes = openssl_random_pseudo_bytes(16);
// 16進数に変換
$token = bin2hex($bytes);
echo $token;
// セッションにセット
$_SESSION['token'] = $token;
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>データ確認</title>
</head>
<body>
<h1>データ確認</h1>
名前:<?php echo htmlspecialchars($myname, ENT_QUOTES, 'UTF-8'); ?><br>
年齢:<?php echo htmlspecialchars($age, ENT_QUOTES, 'UTF-8'); ?>
<form action="tnk.php" method="post">
<input type="hidden" name="token" value="<?php echo $token; ?>">
<input type="submit" value="送信">
</form>
</body>
</html><!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ありがとうございました</title>
</head>
<body>
<?php
session_start();
if($_POST['token'] != $_SESSION['token']) {
print '<h1>ページ遷移が正しくありません</h1>';
} else {
print '<h1>ありがとうございました</h1>';
print '名前:'.$_SESSION['myname'].'<br>';
print '年齢:'.$_SESSION['age'];
}
// 明示。記述しなくても大丈夫だけど念のため。
session_destroy();
?>
</body>
</html>htmlspecialchars(エスケープ処理したいもの, ENT_QUOTES, ‘UTF-8’)
エスケープ処理をする。セキュリティ強化のために必ず行う。
$_SESSIONでセキュリティ強化
一次的にデータを保持する。
トークンでさらにセキュリティ強化
乱数を生成し、ページ遷移後にフォームで受け渡した値とセッションの値が合っているか確認する。
データの取得に使用(パラメータをURLで渡す)
データの送信、登録に使用(パラメータをHTTPリクエストのbody部で渡す)