ページにフォームを設置し、フォームから実際送られてきた情報か確かめるために以下のプログラムを作ったのですが、実際にフォームから送信したデータも、エラーで弾いてしまいます。
関数部分です。
php
function h($s){ return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); } function setToken(){ if(!isset($_SESSION['token'])){ $_SESSION['token'] = sha1(uniqid(mt_rand(), true)); } } function checkToken(){ if(empty($_POST['token']) || $_POST['token'] != $_SESSION['token']){ echo "不正な処理です。"; exit; } }
メインコード部分
php
if($_SERVER['REQUEST_METHOD'] != "POST"){ //投稿前 //CSRF対策 setToken(); }else{ //投稿後 checkToken(); $name = $_POST['name']; $email = $_POST['email']; $memo = $_POST['memo']; $error = array(); //エラー処理 if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //メールの形式が正しくなかったら $error['email'] = 'メールアドレスの形式が正しくありません。'; } if($email == ''){ //メールの形式が正しくなかったら $error['email'] = 'メールアドレスを入力してください。'; } if($memo == ''){ //メールの形式が正しくなかったら $error['memo'] = '内容を入力してください。'; } if(empty($error)){ //DBに格納 } } ?> <!DOCTYPE html> <html lang="ja"> <hrad> <meta charset="UTF-8"> <title>お問い合わせフォーム</title> </head> <body> <h1>お問い合わせフォーム</h1> <form method="POST" action=""> <p>お名前:<input type="text" name="name" value="" ></p> <p> メールアドレス*:<input type="text" name="email" value="" > <?php if($error['email']){echo h($error['email']);} ?> </p> <p>内容*:</p> <p><textarea name="memo" clole="40" rows="5"></textarea></p> <?php if($error['memo']){echo h($error['memo']);} ?> <p><input type="submit" value="送信"></p> <input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>"> </form> </body> </html>
どこでエラーになっているかだけでも教えていただけると嬉しいです。
まだ回答がついていません
会員登録して回答してみよう