PHPだけで入力制限をしようと思います。
前の画面でにゅうりょくしたNO、氏名、所属、生年月日を入力してこの画面で入力内容を確認します。
確認画面では入力された内容がエラーではないかを表示するんですが、下のコードではなぜか生年月日に存在する日付を入力してもtrueの値しか返ってきません。
正しい日付だとelseの処理が動いてほしいです。
特にエラーもでてませんし、URLで値も取れてきていることが確認できています。
条件とかがまちがっているのでしょうか?
regi_re.phpは登録するためのファイル、register.phpは入力するためのファイルです。
register.php→rei_ch.php→regi_re.phpの順番で処理が動きます。
php
1<!DOCTYPE html> 2<html lang="ja"> 3 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 6 <title>register_check</title> 7 </head> 8 9 <body> 10 <h2>登録情報確認</h2> 11 12 <?php 13 try{ 14 $n_number=$_GET['n_number']; 15 $n_name=htmlspecialchars($_GET['n_name'], ENT_QUOTES,'UTF-8'); 16 $n_class=htmlspecialchars($_GET['n_class'], ENT_QUOTES,'UTF-8'); 17 //$n_birth=$_GET['n_birth']; 18 $year=$_GET['year']; 19 $month=$_GET['month']; 20 $day=$_GET['day']; 21 22 //PDO生成 23 $dbh=new PDO('mysql:dbname=staff_manager;host=localhost;charset=utf8', 'uesr', 'passward'); 24 $stmt=$dbh->prepare("select count(*) from staff_master where ID = :s_number"); 25 $stmt->bindValue(':s_number', $n_number, PDO::PARAM_INT); 26 $stmt->execute(); 27 $count=$stmt->fetchColumn(); 28 29 //入力チェック 30 if (empty($n_number) || empty($n_name) || empty($n_class) || empty($year) || empty($month) || empty($day)) { 31 echo "<p>未入力項目があります。</p>"; 32 }elseif ((trim($n_number) == false) || (trim($n_name) == false) || (trim($n_class) == false)) { 33 echo "<p>空白が入力されています。</p>"; 34 }elseif ($count!=0) { 35 echo "<p>社員NOが重複しています。</p>"; 36 }elseif(checkdate($month,$day,$year)){ 37 echo "<p>指定した日付は無効です。</p>"; 38 }else { 39 //登録情報確認 40 echo '<form method="get" action="regi_re.php">'; 41 echo '<table>'; 42 echo '<tr><td>社員NO</td><td>:'.$n_number.'</td></tr>'; 43 echo '<tr><td>氏名</td><td>:'.$n_name.'</td></tr>'; 44 echo '<tr><td>所属</td><td>:'.$n_class.'</td></tr>'; 45 echo '<tr><td>生年月日</td><td>:'.$year.'年'.$month.'月'.$day.'日</td></tr>'; 46 echo '</table>'; 47 echo '<input type="submit" value="登録" />'; 48 49 echo "<input type='hidden' name='s_number' value='$n_number' />"; 50 echo "<input type='hidden' name='s_name' value='$n_name' />"; 51 echo "<input type='hidden' name='s_class' value='$n_class' />"; 52 echo "<input type='hidden' name='s_year' value='$year' />"; 53 echo "<input type='hidden' name='s_month' value='$month' />"; 54 echo "<input type='hidden' name='s_day' value='$day' />"; 55 echo '</form>'; 56 } 57 }catch(PDOException $e){ 58 echo "登録に失敗しました。"; 59 echo "エラー", $e->getMessage(); 60 } 61 62 $dbh = null; 63 ?> 64 65 <input type="submit" onClick="location.href='register.php'" value="キャンセル" /> 66 </body> 67 68</html> 69
register.php
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>register</title> </head> <body> <h2>新規登録</h2> <form action="regi_ch.php" method="get" style="display: inline"> <table> <tr><td>社員NO</td><td><input type="number" name="n_number" value="" /></td></tr> <tr><td>氏名</td><td><input type="text" name="n_name" value="" /></td></tr> <tr><td>所属</td><td><input type="text" name="n_class" value="" /></td></tr> <tr><td>生年月日</td><td> <?php // 年のプルダウン echo "<select name='year'>"; for ($y=1900;$y<date(Y)+1;$y++) { echo "<option value=" . $y . " >" . $y . "</option>\n"; } echo "</select>年"; // 月のプルダウン $a=array("1", "2", "3", "4", "5", "6","7", "8", "9", "10", "11", "12"); echo "<select name='month'>"; foreach ($a as $key => $value) { $b=$key + 1; echo "<option value=" . $b . " >" . $b . "</option>\n"; } echo "</select>月"; //日のプルダウン echo "<select name='day'>"; for ($m=1; $m<=31 ; $m++) { echo "<option value=" . $m . " >" . $m . "</OPTION>\n"; } echo "</select>日"; ?> </td></tr> </table> <input type="submit" value="確認" /> <input type="button" onClick="location.href='master.php'" value="キャンセル" /> </form> </body> </html>
regi_re.php
<!DOCTYPE html> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>register_resulte</title> </head> <body> <h2>登録結果表示</h2> <?php try{ $pdo=new PDO('mysql:dbname=staff_manager;host=localhost;charset=utf8', 'uesr', 'passward'); $n_number=$_GET["s_number"]; $n_name=$_GET["s_name"]; $n_class=$_GET["s_class"]; $n_birth=$_GET["s_year"].sprintf( '%02d', $_GET["s_month"]).sprintf( '%02d', $_GET["s_day"]); echo $n_birth; if($pdo==null){ echo "データベースの接続に失敗しました。"; }else{ $stmt=$pdo->prepare("insert into staff_master (ID,name,class,birth,delete_flag) value (:s_number,:s_name,:s_class,:s_birth,0)"); $stmt->bindValue(':s_number', $n_number, PDO::PARAM_INT); $stmt->bindParam(':s_class', $n_class, PDO::PARAM_STR); $stmt->bindParam(':s_name', $n_name, PDO::PARAM_STR); $stmt->bindParam(':s_birth', $n_birth, PDO::PARAM_STR); $stmt->execute(); echo ("登録が完了しました。"); } }catch(PDOException $e){ echo "登録に失敗しました。"; echo $e->getMessage(); } $pdo=null; ?> <a href="master.php">戻る</a> </body> </html>
回答2件
あなたの回答
tips
プレビュー