前提・実現したいこと
PHP、HTML、mysqlを使用し社員の情報の登録を行うページを作っています。
その際、入力チェックを行うのですが、エラーの際は画面遷移させずに上のほうに
エラーメッセージを表示させ、すべて内容がokな場合は登録完了のページに飛ぶようにしたいです。
今回の条件
・入力値が空欄、未選択の場合(空白スペースもエラー)に画面遷移させずに、上記のほうに先頭に「・」付きの赤字でエラーを出したい
・すべての項目がokの場合は「add.php」(登録完了用の画面)に値を渡して画面遷移(登録完了画面は作成済み)
・ファイルはすべて同じフォルダにある
・エラー時に入力した値は保持する
・赤字はcssを用意(これはわかるので大丈夫)
補足
・ブートストラップはまだシートを当てただけで実装はしてないです。
・赤字は別にCSSを作成します
form.php
PHP
1 2<? 3// 初期化 4$error = array(); 5 6// エラーメッセージ 7if($_POST['employee_num'] === "") 8{ 9 $error[] = "社員番号は必ず入力してください。"; 10} 11if($_POST['employee_name'] === "") 12{ 13 $error[] = "氏名は必ず入力してください。"; 14} 15if($_POST['sexual'] === "") 16{ 17 $error[] = "性別が選択されていません。"; 18} 19 20if($_POST['department'] === "") 21{ 22 $error[] = "所属部署が選択されていません。"; 23} 24 25if($_POST['phone_num'] === "") 26{ 27 $error[] = "電話番号は必ず入力してください。"; 28} 29if($_POST['street'] === "") 30{ 31 $error[] = "住所は必ず入力してください。"; 32} 33?> 34 35 36<!DOCTYPE html> 37<html lang = "ja"> 38<head> 39<meta charset="UTF-8"> 40<title>新規登録画面</title> 41<link rel="stylesheet" href="../css/bootstrap.css"> 42</head> 43<body> 44<h2>新規登録</h2> 45 46// ↓ここから 47<?php 48if(isset($_POST['send'])) 49{ 50 if(isset($error)) 51 { 52?> 53 <ul class="error_message"> 54 <?php 55 foreach($error as $value) 56 { 57 echo $value."<br>"; 58 } 59 } 60 ?> 61 </ul> 62} 63// ↑↑ここまでがエラーメッセージ表示枠 64 65// ここからフォーム画面 66 <form method="POST" action="add.php"> 67 <p> 68 社員番号: 69 <input type="number" min="1" max="9999" name="employee_num"> 70 </p> 71 <p> 72 氏名: 73 <input type="text" name="employee_name"> 74 </p> 75 <p> 76 性別 77 <select name = "sexual"> 78 <option value="">-</option> 79 <option value="1">男</option> 80 <option value="2">女</option> 81 </select> 82 </p> 83 <p> 84 所属部署: 85 <select name="department"> 86 <option value="" hidden>選択してください</option> 87 <option value="1">システム部</option> 88 <option value="2">営業部</option> 89 <option value="3">総務部</option> 90 </select> 91 </p> 92 <p> 93 生年月日: 94 <?php 95 echo '<select name="year">'. "\n"; 96 $start = date('Y'); 97 $end = date('Y') - 100; 98 for($i = $start; $i >= $end; $i--) 99 { 100 echo '<option value="' .$i . '">' . $i .'</option>'. "\n"; 101 } 102 echo '</select>年' . "\n"; 103 echo '<select name="month">' . "\n"; 104 for ($i = 1; $i <= 12; $i++) 105 { 106 echo '<option value="' .$i . '">' . $i .'</option>'. "\n"; 107 } 108 echo '</select>月' . "\n"; 109 echo '<select name="day">' . "\n"; 110 for ($i = 1; $i <= 31; $i++) 111 { 112 echo '<option value="' .$i . '">' . $i .'</option>'. "\n"; 113 } 114 echo '</select>日' . "\n"; 115 ?> 116 </p> 117 <p> 118 電話番号: 119 <input type="text" name="phone_num" onKeyup="this.value=this.value.replace(/[^0-9]+/,'')"> 120 </p> 121 <p> 122 住所: 123 <input type = "text" name="street"> 124 </p> 125 <input type="submit" name="send" value="登録"> 126 </form> 127</body> 128</html>
###add.php
PHP
1<?php 2 3$employee_num = (int)$_POST['employee_num']; 4$employee_name = $_POST['employee_name']; 5$sexual = (int)$_POST['sexual']; 6$department = (int) $_POST['department']; 7$year = $_POST['year']; 8$month = $_POST['month']; 9$day = $_POST['day']; 10$select_month = sprintf('%02d', $month); 11$select_day = sprintf('%02d', $day); 12$total = $year.$select_month.$select_day; 13$birthday = date("Y-m-d",strtotime($total)); 14$phone_num = $_POST['phone_num']; 15$street = $_POST['street']; 16 17 18require_once '\MAMP\db_config.php'; 19try 20{ 21 // DB接続 22 $dbh = new PDO('mysql:host=localhost;dbname=employee_db;charset=utf8', $user, $pass); 23 $dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 24 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 25 $sql = "INSERT INTO employee (employee_num, employee_name, sexual, department, birthday, phone_num, street) VALUES (?, ?, ?, ?, ?, ?, ?)"; 26 $stmt = $dbh->prepare($sql); 27 $stmt->bindValue(1, $employee_num, PDO::PARAM_INT); 28 $stmt->bindValue(2, $employee_name, PDO::PARAM_STR); 29 $stmt->bindValue(3, $sexual, PDO::PARAM_INT); 30 $stmt->bindValue(4, $department, PDO::PARAM_INT); 31 $stmt->bindValue(5, $birthday, PDO::PARAM_STR); 32 $stmt->bindValue(6, $phone_num, PDO::PARAM_STR); 33 $stmt->bindValue(7, $street, PDO::PARAM_STR); 34 $stmt->execute(); 35 $dbh = null; 36 37 echo "社員の登録が完了しました。<br>"; 38 echo "<a href='index.php'>トップページへ戻る</a>"; 39} 40catch(Exception $e) 41{ 42 echo "エラー発生: " . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "<br>"; 43 die(); 44}
試したこと
登録ボタンが押されたとき、$errorに格納されていればforeachで格納されているメッセージを吐き出すというところまでの理解まではできているのですが、実装の部分でつまっています。
現状の実装状況を記述しましたので、どのように実装すればよいのかコード等でご教示いただければ幸いです。。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/24 08:00
2020/06/24 10:29
2020/06/24 11:01 編集
2020/06/24 11:02
2020/06/24 12:59 編集
2020/06/24 13:21 編集
2020/06/24 13:19 編集
2020/06/25 01:26