Jun18:一通り作ったスクリプト
一通りスクリプトを作ってみたんで表示します。
<?php $array = array("--","北海道","青森県","秋田県","岩手県","宮城県","山形県","福島県","茨城県","栃木県","群馬県",">埼玉県","千葉県","東京都","神奈川県","新潟県","富山県","石川県","福井県","山梨県","長野県","岐阜県","静岡県","愛知県","三重県","滋賀県","京都府","大阪府","奈良県","和歌山県","兵庫県","鳥取県","島根県","岡山県","広島県","山口県","徳島県","香川県","愛媛県","高知県","福島県","長崎県","福岡県","佐賀県","熊本県","大分県","鹿児島県","沖縄県",); $error = array(); $view = "top"; $check = "/^[^@]+@([-a-z0-9]+\.)+[a-z]{2,}$/"; //[^@]+@→@意外の文字の1回以上の繰り返しの次に@がある。 //([-a-z0-9]+\.)+→ハイフンと小文字英字と数字の1回以上の繰り返しの次に.がある。さらにそれが1回以上繰り返される。 //[a-z]{2,}$→最後の2文字以上の小文字英数字で終わる。 /////エラーチェック&trimフィルタ欄///////// if(isset($_POST["confirm"])){ if(isset($_POST["lastname"])){ $lastname = trim($_POST["lastname"]); if(!mb_strlen($lastname)){ $error[]="姓を入力してください。<br>"; }elseif(mb_strlen($lastname) > 50){ $error[]="姓は50文字以内で入力してください。<br>"; } } if(isset($_POST["firstname"])){ $firstname = trim($_POST["firstname"]); if(!mb_strlen($firstname)){ $error[]="名を入力してください。<br>"; }elseif(mb_strlen($firstname)>50){ $error[]="名は50文字以内で入力してください。<br>"; } } if(isset($_POST["lastnamekana"])){ $lastnamekana = trim($_POST["lastnamekana"]); if(!mb_strlen($lastnamekana)){ $error[]="フリガナ(姓)を入力してください。<br>"; }elseif(mb_strlen($lastnamekana)>50){ $error[]="フリガナ(姓)は50文字以内で入力してください。<br>"; } } if(isset($_POST["firstnamekana"])){ $firstnamekana = trim($_POST["firstnamekana"]); if(!mb_strlen($firstnamekana)){ $error[]="フリガナ(名)を入力してください。<br>"; }elseif(mb_strlen($firstnamekana)>50){ $error[]="フリガナ(名)は50文字以内で入力してください。<br>"; } } if(!isset($_POST["sex"])){ $error[]="性別を選択して下さい。<br>"; } if(!mb_strlen($_POST["zip1"]) || !mb_strlen($_POST["zip2"])){ $error[] = "郵便番号を入力してください。<br>"; }else{ $zip1 = mb_convert_kana($_POST["zip1"],"rn"); $zip2 = mb_convert_kana($_POST["zip2"],"rn"); if(!preg_match("/^[0-9]{3}$/", $zip1) || !preg_match("/^[0-9]{4}$/", $zip2)) { $error[] = "郵便番号を正しく入力してください。<br>"; } } if(isset($_POST["prefid"])){ if($_POST["prefid"] == 0){ $error[]="都道府県を選択してください。<br>"; } } if(isset($_POST["address1"])){ $address1 = trim($_POST["address1"]); if(!mb_strlen($address1)){ $error[]="市区町村を入力してください。<br>"; }elseif(mb_strlen($address1)>50){ $error[]="市区町村は50文字以内で入力してください。<br>"; } } if(isset($_POST["address2"])){ $address2 = trim($_POST["address2"]); if(!mb_strlen($address2)){ $error[]="番地を入力してください。<br>"; }elseif(mb_strlen($address2)>50){ $error[]="番地は50文字以内で入力してください。<br>"; } } if(isset($_POST["mail_address"])){ $mail_address = trim($_POST["mail_address"]); if(!mb_strlen($mail_address)){ $error[]="メールアドレスを入力してください。<br>"; }elseif(mb_strlen($mail_address)>50){ $error[]="メールアドレスは50文字以内で入力してください。<br>"; }elseif(!preg_match($check,$mail_address)){ $error[]="メールアドレスを正しく入力してください。<br>"; }else{ $mail_address = mb_convert_kana($mail_address,"a"); } } if(isset($_POST["other"])){ $other = trim($_POST["other"]); if(mb_strlen($_POST["other"])){ $_POST["h_array"][2] = 3; } }if(!isset($_POST["h_array"])){ $error[]="趣味を一つ以上選択してください。<br>"; }elseif(isset($_POST["h_array"][2])){ if(count($_POST["h_array"][2]) && !mb_strlen($_POST["other"])){ $error[]="その他詳細を入力してください。<br>"; } } ////////分岐////////////////////////////// if(count($error) >0){ $view = "top"; } else{ $view = "confirm"; } } if($view == "confirm"){ ?> <!---------------------------------確認ページ------------------------> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <title> ○×キャンペーン </title> </head> <body> <div align="center"><font color="#00BFFF">○×キャンペーン</font></div> <hr size="3"> <div align="center">入力内容確認</div> <hr size="3"> <font size="2">下記の項目に入力の上、完了画面にお進みください。(*)は必須項目です。</font> <br> <form action="plactice3.php" method="post"> 姓(*):<br> <?php echo htmlspecialchars($lastname); ?> <input type="hidden" name="lastname" value="<?php echo htmlspecialchars($lastname);?>"> <br> 名(*):<br> <?php print htmlspecialchars($firstname)."<br>"; ?> <input type="hidden" name="firstname" value="<?php echo htmlspecialchars($firstname);?>"> <br> フリガナ(姓)(*):<br> <?php print htmlspecialchars(mb_convert_kana($lastnamekana,"KVC"))."<br>"; ?> <input type="hidden" name="lastnamekana" value="<?php echo htmlspecialchars($lastnamekana);?>"> <br> フリガナ(名)(*):<br> <?php print htmlspecialchars(mb_convert_kana($firstnamekana,"KVC"))."<br>"; ?> <br> <input type="hidden" name="firstnamekana" value="<?php echo htmlspecialchars($firstnamekana);?>"> 性別(*):<br> <?php if(isset($_POST["sex"])){ $name = $_POST["sex"]; if($name == 1){ print ("男<br />"); }elseif($name == 2){ print ("女<br />"); } } ?> <input type="hidden" name="sex" value="<?php echo $_POST["sex"];?>"> <br> 郵便場号(半角数字)(*)<br> <?php print trim($zip1); print_r ("-"); print trim($zip2)."<br>"; ?> <input type="hidden" name="zip1" value="<?php echo htmlspecialchars($zip1);?>"> <input type="hidden" name="zip2" value="<?php echo htmlspecialchars($zip2);?>"> <br> 都道府県(*):<br> <?php $name = $_POST["prefid"]; $prefid = $array[$name]; print $prefid."<br>"; ?> <br> <input type="hidden" name="prefid" value="<?php echo $_POST["prefid"];?>"> 市区町村(*):<br> <?php print htmlspecialchars($address1)."<br>"; ?> <br> <input type="hidden" name="address1" value="<?php echo htmlspecialchars($address1);?>"> 番地:<br> <?php print htmlspecialchars($address2)."<br>"; ?> <br> <input type="hidden" name="address2" value="<?php echo htmlspecialchars($address2);?>"> メールアドレス(*):<br> <?php print htmlspecialchars($mail_address)."<br>"; ?> <br> <input type="hidden" name="mail_address" value="<?php echo htmlspecialchars($mail_address);?>"> 趣味(*):<br> <?php if(isset($_POST["h_array"]) && count($_POST["h_array"]) > 0){ $h_array = $_POST["h_array"]; foreach($h_array as $value){ if($value == 1){ print ("音楽<br />"); echo '<input type="hidden" name="h_array[0]" value="1">'; }elseif($value == 2){ print ("映画<br />"); echo '<input type="hidden" name="h_array[1]" value="2">'; }elseif($value == 3){ echo "その他(".htmlspecialchars($other).")"; echo '<input type="hidden" name="h_array[2]" value="3">'; } } } ?> <br> <input type="hidden" name='other' value="<?php echo htmlspecialchars($other);?>"> ご意見:<br> <?php $name = htmlspecialchars($_POST["comment"]); print trim($name); ?> <br> <input type="hidden" name="comment" value="<?php echo htmlspecialchars($_POST['comment']);?>"> <div align="center"> <table> <tr> <td><input type="submit" value="戻る" name="return"></td> <td><input type="submit" value="確認" name="complete"></td> </tr> </table> </div> </form> <hr size="3"> <div align="center">(C)2009 Training Project</div> </body> </html> <?php }elseif($view == "top"){ ?> <!--TOPページ--> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <title> ○×キャンペーン </title> </head> <body link="#ff0000"> <div align="center"><font color="#00BFFF">○×キャンペーン</font></div> <hr size="3"> <div align="center">応募フォーム</div> <hr size="3"> <p><font size="2">下記の項目に入力のうえ、確認画面にお進みください。(*)は必須項目です。</font></p> <form method="post" action="plactice3.php"> <?php if(isset($error)){ foreach($error as $key=> $value){ echo "<font color=\"#ff0000\">".$value."</font>"; } } ?> 姓(*):<br> <br> <input type="text" size="45" name="lastname" value="<?php if(isset($_POST["lastname"])){ echo htmlspecialchars($_POST["lastname"]); } ?>"><br> 名(*):<br> <br> <input type="text" size="45" name="firstname" value="<?php if(isset($_POST["firstname"])){ echo htmlspecialchars($_POST["firstname"]); } ?>"><br> フリガナ(姓)(*):<br> <br> <input type="text" size="45" name="lastnamekana" value="<?php if(isset($_POST["lastnamekana"])){ echo htmlspecialchars(mb_convert_kana($_POST["lastnamekana"],"KVC")); } ?>"><br> フリガナ(名)(*):<br> <br> <input type="text" size="45" name="firstnamekana" value="<?php if(isset($_POST["firstnamekana"])){ echo htmlspecialchars(mb_convert_kana($_POST["firstnamekana"],"KVC")); } ?>"><br> <br> 性別(*):<br> 男<input type="radio" name="sex" value="1" <?php if(isset($_POST["sex"])){ $name = $_POST["sex"]; if($name == 1){ echo "checked"; }elseif($name == 3){ echo "checked"; } } ?> > 女<input type="radio" name="sex" value="2" <?php if(isset($_POST["sex"])){ $name = $_POST["sex"]; if($name == 2){ echo "checked"; } } ?>> <br> <br> 郵便番号(半角数字)(*):<br> <input type="text" size="3" maxlength="3" name="zip1" value=" <?php if(isset($_POST["zip1"])){ echo htmlspecialchars($_POST["zip1"]); } ?>"> - <input type="text" size="4" maxlength="4" name="zip2" value=" <?php if(isset($_POST["zip2"])){ echo htmlspecialchars($_POST["zip2"]); } ?>"><br> <br> 都道府県(*):<br> <select name="prefid"> <?php foreach($array as $key => $value){ if(isset($_POST["prefid"]) && $key == $_POST["prefid"]){ echo "<option value='$key' selected>".$value."</option>"; }else{ echo "<option value='$key'>".$value."</option>"; } } ?> </select> <br> 市区町村(*):<br> <input type="text" size="45" name="address1" value=" <?php if(isset($_POST["address1"])){ echo htmlspecialchars($_POST["address1"]); } ?>"><br> <br> 番地(*):<br> <input type="text" size="45" name="address2" value=" <?php if(isset($_POST["address2"])){ echo htmlspecialchars($_POST["address2"]); }?>"><br> <br> メールアドレス(*):<br> <br> <input type="text" size="45" name="mail_address" value=" <?php if(isset($_POST["mail_address"])){ echo htmlspecialchars($_POST["mail_address"]); } ?>"><br> <br> 趣味(*):<br> <?php ?> <input type="checkbox" name="h_array[0]" value="1" <?php if(isset($_POST["h_array"][0])){ echo "checked"; } ?> >音楽<input type="checkbox" name="h_array[1]" value="2" <?php if(isset($_POST["h_array"][1])){ echo "checked"; } ?> >映画<br><input type="checkbox" name="h_array[2]" value="3" <?php if(isset($_POST["h_array"][2])){ echo "checked"; }elseif(isset($_POST["other"])){ if(mb_strlen($_POST["other"])){ echo "checked"; } } ?> >その他<br> <input type="text" size="45" name="other" value="<?php if(isset($_POST["other"])){ echo htmlspecialchars($_POST["other"]); } ?>"><br> <br>ご意見:<br> <textarea name="comment" rows="3" cols="10"> <?php if(isset($_POST["comment"])){ echo htmlspecialchars($_POST["comment"]); } ?></textarea> <br> <div align="center"><input type="submit" name="confirm" value="確認"></div> </form> <hr size="2"> <div align="center">(C)2009 Training Project</div> </body> </html> <?php }if(isset($_POST["complete"]) && count($_POST["complete"]) > 0){ ?> <!----------------完了ページ--------------------------> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <title> ○×キャンペーン </title> </head> <body link="#ff0000"> <div align="center"><font color="#00BFFF">○×キャンペーン</font></div> <hr size="3"> <font size="2">ご応募ありがとうございました。</font><br> <br> <div align="center"><a href="index.html"><font size="2">TOPへ</font></a></div><br> <br> <hr size="2"> <div align="center">(C)2009 Training Project</div> </body> </html> <?php } ?>
汚い表記でごめんなさい。もじご指摘あれば是非コメントしてください。
ちなみに、ずっとひっかかってたことだったんですが、これらのフォームを全部空で送信したら当然エラーが帰ってくるのだけども、その時の$_POSTの配列は、
テキストボックス:$_POST["name"]のキーは存在して、値が存在していない(NULL)の状態。
チェックボックス、セレクトボックス、ラジオボタン:そもそもキーも存在していない状態。
なんで、issetとか、countとかを使う時は注意する。
また、インデントとかを活用して、他の人がわかりやすい書き方を心がけよう。