phpの教科書で、コンタクトフォームをつくってます。
入力ページから、確認ページ、完了ページで構成され、入力ページで、
氏名、メールアドレス、件名、問い合わせ内容、画像認証を入力し確認ボタンで、本来は確認ページに進むのですが、
入力ページのまま、件名と画像認証のエラーが出ます。
エラーは、subjectの'件名は必須項目です。'と画像認証の'確認キーワードは8文字で入力して下さい。';です。
どなたか、アドバイスをいただけないでしょうか?。
###これは、入力form2.phpのコードです。
phpsession_start();
1 2//必要な関数を読み込む 3require dirname(__FILE__).'../../libs/functions.php'; 4 5//画像認証 6include "zizai_captcha/check.php"; 7//POSTされたデータをチェック 8$_POST = checkInput($_POST); 9 10//固定トークンを確認 11if (isset($_POST['ticket'], $_SESSION['ticket'])) { 12 $ticket = $_POST['ticket']; 13 if ($ticket !== $_SESSION['ticket']) { 14 die('不正アクセスの疑いがあります。'); 15 } 16} else { 17 die('不正アクセスの疑いがあります。'); 18} 19 20//変数に POSTされたデータを代入 21$name = isset($_POST['name']) ? $_POST['name'] : NULL; 22$email = isset($_POST['email']) ? $_POST['email'] : NULL; 23$subject = isset($_POST['subject']) ? $_POST['subject'] : NULL; 24$body = isset($_POST['body']) ? $_POST['body'] : NULL; 25$code = isset($_POST['code']) ? $_POST['code'] : NULL; 26 27//POSTされたデータを整形 28$name = trim($name); 29$email = trim($email); 30$subject = trim($subject); 31$body = trim($body); 32$code = trim($code); 33 34//エラーメッセージを保存する配列の初期化 35$error = array(); 36 37//お名前欄をチェック 38if ($name == '') { 39 $error[] = 'お名前は必須項目です。'; 40} else if (mb_strlen($name) > 100) { 41 $error[] = 'お名前は100文字以内でお願いします。'; 42} 43//email欄をチェック 44if ($email == '') { 45 $error[] = 'メールアドレスは必須項目です。'; 46} else { 47 $pattern = 48 '/^([a-z0-9+_\-]+)(.[a-z0-9+_\-]+)*@([a-z0-9\-]+.)+[a-z]{2,6}$/iD'; 49 if (!preg_match($pattern, $email)) { 50 $error[] = 'メールアドレスの形式が正しくありません。'; 51 } 52} 53 54//件数名をチェック 55if ($subject == '') { 56 $error[] = '件名は必須項目です。'; 57} else if (mb_strlen($subject) > 100) { 58 $error[] = 'けんめいは100文字以内でお願いします。'; 59} 60 61//内容欄をチェック 62if ($body == '') { 63 $error[] = '内容は必須項目です。'; 64} else if (mb_strlen($body) > 500) { 65 $error[] = '内容は500文字以内でお願いします。'; 66} 67 68//画像認証をチェック 69if (mb_strlen($code) <> 8) { 70 $error[] = '確認キーワードは8文字で入力して下さい。'; 71} else if (!chk_crypt($code)) { 72 $error[] = '確認キーワードが誤っています。'; 73} 74 75//エラー数を確認 76if (count($error) > 0) { 77 //エラーがある場合は、入力フォームを表示 78 $data = array(); 79 $data['error'] = $error; 80 $data['name'] = $name; 81 $data['email'] = $email; 82 $data['subject'] = $subject; 83 $data['body'] = $body; 84 $data['ticket'] = $ticket; 85 display('form1_view.php', $data); 86} else { //エラーが0の場合 87 //POSTされたデータをセッションに保存 88 $_SESSION['name'] = $name; 89 $_SESSION['email'] = $email; 90 $_SESSION['subject'] = $subject; 91 $_SESSION['body'] = $body; 92 93//確認画面を表示 94 $data = array(); 95 $data['name'] = $name; 96 $data['email'] = $email; 97 $data['subject'] = $subject; 98 $data['body'] = $body; 99 $data['ticket'] = $ticket; 100 display('form2_view.php', $data); 101} 102 103```###form1_view.php 104このプログラムにjavascriptを組み込んでます。49行目付近 105```form1_view.php 106<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3 .org/TR/xhtml1-transitional.dtd"> 107 2 <html xmlns="http://www.w3.org/1999/xhtml"> 108 3 <head> 109 4 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 110 5 <meta http-equiv="Content-Style-Type" content="text/css" /> 111 6 <meta http-equiv="Content-Script-Type" content="text/javascript" /> 112 7 <title>メールフォーム</title> 113 8 <link rel="stylesheet" type="text/css" href="css/style.css" media="screen,tv " /> 114 9 </head> 115 10 <body> 116 11 <div id="box"> 117 12 <div id="header"> 118 13 <h1>PHP for Web Designer</h1> 119 14 </div> 120 15 <ul id="menu" class="clearfix"> 121 16 <li><a href="question1.php">アンケート</a></li> 122 17 <li class="active"><a href="form1.php">メールフォーム</a></li> 123 18 <li><a href="webapi/">グルメMAP</a></li> 124 19 </ul> 125 20 <div id="main"> 126 21 <h2 class="mail-bar">メールフォーム</h2> 127 22 128 23 <?php if (isset($error)): ?> 129 24 <?php foreach ($error as $val): ?> 130 25 <font color="red"><?php echo $val; ?></font><br /> 131 26 <?php endforeach; ?> 132 27 <?php endif; ?> 133 28 134 29 <form action="form2.php" method="post"> 135 30 136 31 <dl class="clearfix mailform"> 137 32 <dt>お名前</dt> 138 33 <dd><label> 139 34 <input type="text" name="name" value="<?php echo $name; ?>" size="50" /> 140 35 </label></dd> 141 36 <dt>e-mail</dt> 142 37 <dd><label> 143 38 <input type="text" name="email" value="<?php echo $email; ?>" size="50" /> 144 39 </label></dd> 145 40 <dt>件名</dt> 146 41 <dd><label> 147 42 <input type="text" nane="subject" value="<?php echo $subject; ?>" size="50 " /> 148 43 </label></dd> 149 44 <dt>内容</dt> 150 45 <dd><label> 151 46 <textarea name="body" cols="50" rows="10"><?php echo $body; ?></textarea> 152 47 </label></dd> 153 48 154 49 <script src="zizai_captcha/captcha.php" type="text/javascript"></script> 155 50 <script>zizai_captcha_show();</script><br> 156 51 157 52 <input type="submit" valeu="確認画面へ" /> 158 53 </p> 159 54 160 55 <input type="hidden" name="ticket" value="<?php echo $ticket; ?>" /> 161 56 162 57 </form> 163 58 </div> 164 59 <p class="copy"> 165 60 © 2010 PHP for Web Designer. All rights reserved. 166 61 </p> 167 62 </div> 168 63 </body> 169 64 </html> 170 171
###zizai_captcha/check.phpです。
check.php
1function zizai_captcha_check($input_str = NULL,$key_time = NULL){ 2 if($input_str === NULL){ 3 if(isset($_POST["zizai_captcha_check"])){ 4 $input_str = $_POST["zizai_captcha_check"]; 5 }else{ 6 return FALSE; 7 } 8 } 9 10 if($key_time === NULL){ 11 if(isset($_POST["zizai_captcha_time"])){ 12 $key_time = $_POST["zizai_captcha_time"]; 13 }else{ 14 return FALSE; 15 } 16 } 17 18 mb_language("uni"); 19 mb_internal_encoding("utf-8"); 20 mb_http_input("auto"); 21 mb_http_output("utf-8"); 22 23 $input_str = mb_convert_kana($input_str,"r"); 24 25 $time = time(); 26 $post_t = intval($key_time); 27 28 $config = parse_ini_file(dirname(__FILE__)."/config.ini"); 29 $seed = parse_ini_file(dirname(__FILE__)."/seed.ini"); 30 31 if($post_t > $time || $post_t < $time - $config["expire"]){ 32 return FALSE; 33 } 34 35 $symbol = array("+","/"); 36 $alphabet = array("A","B"); 37 38 if($seed["last_updated"] <= $post_t){ 39 $seed_str = $seed["new_seed"]; 40 }else{ 41 $seed_str = $seed["old_seed"]; 42 } 43 44 $str = str_replace($symbol,$alphabet,strtoupper(substr(base64_encode(md5($post_t.$seed_str,TRUE)),0,$config["characters_count"]))); 45 46 if(strtoupper($input_str) !== $str){ 47 return FALSE; 48 } 49 50 return TRUE; 51} 52?>
###MAMPで、localhost/form1.phpにアクセスします。
表示されたフォームに、名前、E-メール、件名、内容、画像認証のボックスがありますので、入力して、送信ボタンを押します。
画面は、変わらないままですが、件名と、画像認証だけ入力文字が消えて、
赤文字で、
内容は必須項目です。
確認キーワードは8文字で入力して下さい。
が表示されてます。
###冒頭のform1.phpの中に、サーバー変数を書いたところ、エラー表示が出ましたが、どうすれば良いかわからなくなってます。何が、不備なのか、アドバイスいただけたら、有り難いです。
form1.php
1if($_SERVER["REQUEST_METHOD"]==="POST"){ 2 POSTの時の処理 3}else{ 4 echo "不正なアクセス!!!"; 5} 6
##この部分を
form2.php
1//変数に POSTされたデータを代入 2$name = isset($_POST['name']) ? $_POST['name'] : NULL; 3$email = isset($_POST['email']) ? $_POST['email'] : NULL; 4$subject = isset($_POST['subject']) ? $_POST['subject'] : NULL; 5$body = isset($_POST['body']) ? $_POST['body'] : NULL; 6$code = isset($_POST['code']) ? $_POST['code'] : NULL; 7
###このように、書き換えたのですが、
form2.php
1 2$args = array( 3 'name' => FILTER_DEFAULT, 4 'email' => FILTER_VALIDATE_EMAIL, 5 'subject' => FILTER_DEFAULT, 6 'body' => FILTER_DEFAULT, 7 'code' => FILTER_DEFAULT, 8); 9$post_data = filter_input_array(INPUT_POST, $args); 10
Notice: Undefined variable: name in /Applications/MAMP/htdocs/form2.php on line 33
と出てしまい、全ての入力が、未入力の状態になって、赤文字のエラーメッセージが出ます。
回答2件
あなたの回答
tips
プレビュー