ページにフォームを設置し、フォームから実際送られてきた情報か確かめるために以下のプログラムを作ったのですが、実際にフォームから送信したデータも、エラーで弾いてしまいます。
関数部分です。
php
1function h($s){ 2 return htmlspecialchars($s, ENT_QUOTES, "UTF-8"); 3} 4 5function setToken(){ 6 if(!isset($_SESSION['token'])){ 7 $_SESSION['token'] = sha1(uniqid(mt_rand(), true)); 8 } 9} 10function checkToken(){ 11 if(empty($_POST['token']) || $_POST['token'] != $_SESSION['token']){ 12 echo "不正な処理です。"; 13 exit; 14 } 15} 16
メインコード部分
php
1if($_SERVER['REQUEST_METHOD'] != "POST"){ 2 //投稿前 3 4 //CSRF対策 5 setToken(); 6}else{ 7 //投稿後 8 checkToken(); 9 10 $name = $_POST['name']; 11 $email = $_POST['email']; 12 $memo = $_POST['memo']; 13 14 $error = array(); 15 16 //エラー処理 17 18 if(!filter_var($email, FILTER_VALIDATE_EMAIL)){ //メールの形式が正しくなかったら 19 $error['email'] = 'メールアドレスの形式が正しくありません。'; 20 } 21 if($email == ''){ //メールの形式が正しくなかったら 22 $error['email'] = 'メールアドレスを入力してください。'; 23 } 24 if($memo == ''){ //メールの形式が正しくなかったら 25 $error['memo'] = '内容を入力してください。'; 26 } 27 28 if(empty($error)){ 29 //DBに格納 30 } 31} 32?> 33<!DOCTYPE html> 34<html lang="ja"> 35 <hrad> 36 <meta charset="UTF-8"> 37 <title>お問い合わせフォーム</title> 38 </head> 39 <body> 40 <h1>お問い合わせフォーム</h1> 41 <form method="POST" action=""> 42 <p>お名前:<input type="text" name="name" value="" ></p> 43 <p> 44 メールアドレス*:<input type="text" name="email" value="" > 45 <?php if($error['email']){echo h($error['email']);} ?> 46 </p> 47 <p>内容*:</p> 48 <p><textarea name="memo" clole="40" rows="5"></textarea></p> 49 <?php if($error['memo']){echo h($error['memo']);} ?> 50 51 <p><input type="submit" value="送信"></p> 52 <input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>"> 53 </form> 54 </body> 55</html>
どこでエラーになっているかだけでも教えていただけると嬉しいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/01 13:40
2017/01/01 13:42
2017/01/01 13:49
2017/01/01 14:02
2017/01/01 14:08
2017/01/01 14:14
2017/01/02 12:06
2017/01/02 13:36
2017/01/02 13:47
2017/01/02 13:49
2017/01/02 14:00
2017/01/02 14:03
2017/01/02 14:17
2017/01/02 14:24
2017/01/02 14:28