前提・実現したいこと
PHPにて社員情報の登録画面を作っています。
入力チェックでリダイレクト後に、セッションで入力した値を保持したいです。
大まかな動きとしましては
form.phpで値を入力
↓
check.phpで入力チェック
↓
エラーの場合はform.phpにリダイレクト
okの場合は確認画面が表示
↓
リダイレクトをした際に入力した値が保持される
このようにしたいです
###発生している問題・エラーメッセージ
生年月日はプルダウン型で選択できるようになっているのですが、
リダイレクトした際にプルダウンの値が選択した値が複数並ぶようになってしまいます。
PHP
1 生年月日: 2 <?php 3 echo '<select name="year">'. "\n"; 4 $start = date('Y'); 5 $end = date('Y') - 100; 6 for($i = $start; $i >= $end; $i--) 7 { 8 echo '<option value="' .$i . '">' . $_SESSION['year'] .'</option>'. "\n"; 9 } 10 echo '</select>年' . "\n"; 11 echo '<select name="month">' . "\n"; 12 for ($i = 1; $i <= 12; $i++) 13 { 14 echo '<option value="' .$i . '">' . $_SESSION['month'] .'</option>'. "\n"; 15 } 16 echo '</select>月' . "\n"; 17 echo '<select name="day">' . "\n"; 18 for ($i = 1; $i <= 31; $i++) 19 { 20 echo '<option value="' .$i . '">' . $_SESSION['day'] .'</option>'. "\n"; 21 } 22 echo '</select>日' . "\n"; 23 ?>
↓現在の実装状況です
form.php
PHP
1<? 2session_start(); 3$page_flag = 0; 4?> 5 6<!DOCTYPE html> 7<html lang = "ja"> 8<head> 9<meta charset="UTF-8"> 10<title>新規登録画面</title> 11<link rel="stylesheet" href="../css/bootstrap.css"> 12</head> 13<body> 14<h2>新規登録</h2> 15<? 16if(isset($_SESSION['error'])) 17{ 18 $page_flag = 1; 19} 20 21// 初期画面 22if(empty($_POST['send']) && $page_flag === 0) 23{ 24?> 25 <form method="POST" action ="check.php"> 26 <p> 27 社員番号: 28 <input type="number" min="1" max="9999" name="employee_num"> 29 </p> 30 <p> 31 氏名: 32 <input type="text" name="employee_name"> 33 </p> 34 <p> 35 性別 36 <select name = "sexual"> 37 <option value="" hidden>-</option> 38 <option value="1">男</option> 39 <option value="2">女</option> 40 </select> 41 </p> 42 <p> 43 所属部署: 44 <select name="department"> 45 <option value="" hidden>選択してください</option> 46 <option value="1">システム部</option> 47 <option value="2">営業部</option> 48 <option value="3">総務部</option> 49 </select> 50 </p> 51 <p> 52 生年月日: 53 <?php 54 echo '<select name="year">'. "\n"; 55 $start = date('Y'); 56 $end = date('Y') - 100; 57 for($i = $start; $i >= $end; $i--) 58 { 59 echo '<option value="' .$i . '">' . $i .'</option>'. "\n"; 60 } 61 echo '</select>年' . "\n"; 62 echo '<select name="month">' . "\n"; 63 for ($i = 1; $i <= 12; $i++) 64 { 65 echo '<option value="' .$i . '">' . $i .'</option>'. "\n"; 66 } 67 echo '</select>月' . "\n"; 68 echo '<select name="day">' . "\n"; 69 for ($i = 1; $i <= 31; $i++) 70 { 71 echo '<option value="' .$i . '">' . $i .'</option>'. "\n"; 72 } 73 echo '</select>日' . "\n"; 74 ?> 75 </p> 76 <p> 77 電話番号: 78 <input type="text" name="phone_num" onKeyup="this.value=this.value.replace(/[^0-9]+/,'')"> 79 </p> 80 <p> 81 住所: 82 <input type = "text" name="street"> 83 </p> 84 <input type="submit" name="send" value="登録"> 85 </form> 86<? 87} 88elseif($page_flag === 1) 89{ 90 foreach($_SESSION['error'] as $value) 91 { 92 93 ?> 94 <div class="text-danger"> 95 <? 96 echo $value."<br>"; 97 ?> 98 </div> 99 <? 100 } 101?> 102 <form method="POST" action ="error.php"> 103 <p> 104 社員番号: 105 <input type="number" min="1" max="9999" name="employee_num" value=<?php echo htmlspecialchars($_SESSION['employee_num'], ENT_QUOTES, 'UTF-8'); ?>> 106 </p> 107 <p> 108 氏名: 109 <input type="text" name="employee_name" value="<?php echo htmlspecialchars($_SESSION['employee_name'], ENT_QUOTES, 'UTF-8'); ?>"> 110 </p> 111 <p> 112 性別: 113 <select name="sexual"> 114 <option value="" hidden>-</option> 115 <option value="1" <?php if ($_SESSION['sexual'] === 1) echo "selected" ?>>男</option> 116 <option value="2" <?php if ($_SESSION['sexual'] === 2) echo "selected" ?>>女</option> 117 </select> 118 </p> 119 <p> 120 所属部署: 121 <select name="department"> 122 <option value="" hidden>選択してください</option> 123 <option value="1" <?php if ($_SESSION['department'] === 1) echo "selected" ?>>システム部</option> 124 <option value="2" <?php if ($_SESSION['department'] === 2) echo "selected" ?>>営業部</option> 125 <option value="3" <?php if ($_SESSION['department'] === 3) echo "selected" ?>>総務部</option> 126 </select> 127 </p> 128 <p> 129 生年月日: 130 <?php 131 echo '<select name="year">'. "\n"; 132 $start = date('Y'); 133 $end = date('Y') - 100; 134 for($i = $start; $i >= $end; $i--) 135 { 136 echo '<option value="' .$i . '">' . $_SESSION['year'] .'</option>'. "\n"; 137 } 138 echo '</select>年' . "\n"; 139 echo '<select name="month">' . "\n"; 140 for ($i = 1; $i <= 12; $i++) 141 { 142 echo '<option value="' .$i . '">' . $_SESSION['month'] .'</option>'. "\n"; 143 } 144 echo '</select>月' . "\n"; 145 echo '<select name="day">' . "\n"; 146 for ($i = 1; $i <= 31; $i++) 147 { 148 echo '<option value="' .$i . '">' . $_SESSION['day'] .'</option>'. "\n"; 149 } 150 echo '</select>日' . "\n"; 151 ?> 152 </p> 153 <p> 154 電話番号: 155 <input type="text" name="phone_num" value="<?php echo htmlspecialchars($_SESSION['phone_num'], ENT_QUOTES, 'UTF-8'); ?>"> 156 </p> 157 <p> 158 住所: 159 <input type="text" name="street" value="<?php echo htmlspecialchars($_SESSION['street'], ENT_QUOTES, 'UTF-8'); ?>"> 160 </p> 161 <input type="submit" name="send" value="登録"> 162 </form> 163<? 164session_destroy(); 165} 166?> 167</body> 168</html>
check.php
PHP
1<?php 2 3session_start(); 4 5$_SESSION['employee_num'] = (int)$_POST['employee_num']; 6$_SESSION['employee_name'] = $_POST['employee_name']; 7$_SESSION['sexual'] = (int)$_POST['sexual']; 8$_SESSION['department'] = (int)$_POST['department']; 9$_SESSION['year'] = $_POST['year']; 10$_SESSION['month'] = $_POST['month']; 11$_SESSION['day'] = $_POST['day']; 12$_SESSION['phone_num'] = $_POST['phone_num']; 13$_SESSION['street'] = $_POST['street']; 14$_SESSION['error'] = array(); 15 16 17// エラーメッセージ 18if($_POST['employee_num'] === "") 19{ 20 $_SESSION['error'][] = "・社員番号は必ず入力してください。"; 21} 22if($_POST['employee_name'] === "") 23{ 24 $_SESSION['error'][] = "・氏名は必ず入力してください。"; 25} 26if($_POST['sexual'] === "") 27{ 28 $_SESSION['error'][] = "・性別が選択されていません。"; 29} 30 31if($_POST['department'] === "") 32{ 33 $_SESSION['error'][] = "・所属部署が選択されていません。"; 34} 35 36if($_POST['phone_num'] === "") 37{ 38 $_SESSION['error'][] = "・電話番号は必ず入力してください。"; 39} 40if($_POST['street'] === "") 41{ 42 $_SESSION['error'][] = "・住所は必ず入力してください。"; 43} 44 45 46if(isset($_SESSION['error']) && !empty($_SESSION['error'])) 47{ 48 // リダイレクト 49 header("location: http://localhost/employeephp/form.php"); // フォーム画面 50 exit(); 51} 52 53 unset($_SESSION['error']); 54 55 $year = $_SESSION['year']; 56 $month = $_SESSION['month']; 57 $day = $_SESSION['day']; 58 $select_month = sprintf('%02d', $month); 59 $select_day = sprintf('%02d', $day); 60 $total = $year.$select_month.$select_day; 61 $birthday = date("Y-m-d",strtotime($total)); 62 63 64 $form_birthday = date('Y年m月d日', strtotime($birthday)); 65 66 if ($_SESSION['sexual'] === 1) 67 { 68 $_SESSION['sexual'] = "男"; 69 } 70 elseif ($_SESSION['sexual'] === 2) 71 { 72 $_SESSION['sexual'] = "女"; 73 } 74 75 if ($_SESSION['department'] === 1) 76 { 77 $_SESSION['department'] = "システム部"; 78 } 79 elseif ($_SESSION['department'] === 2) 80 { 81 $_SESSION['department'] = "営業部"; 82 } 83 elseif ($_SESSION['department'] === 3) 84 { 85 $_SESSION['department'] = "総務部"; 86 } 87 88 ?> 89 <!DOCTYPE html> 90 <html lang = "ja"> 91 <head> 92 <meta charset="UTF-8"> 93 <title>確認</title> 94 </head> 95 <body> 96 <form action = "add.php" method="post"> 97 <? 98 99 // 確認画面 100 echo "社員番号:" . htmlspecialchars($_SESSION['employee_num'],ENT_QUOTES,'UTF-8') . "<br>\n"; 101 echo "氏名:" . htmlspecialchars($_SESSION['employee_name'],ENT_QUOTES,'UTF-8') . "<br>\n"; 102 echo "性別:" . htmlspecialchars($_SESSION['sexual'],ENT_QUOTES,'UTF-8') . "<br>\n"; 103 echo "所属部署:" . htmlspecialchars($_SESSION['department'],ENT_QUOTES,'UTF-8') . "<br>\n"; 104 echo "生年月日:" . htmlspecialchars($form_birthday,ENT_QUOTES,'UTF-8') . "<br>\n"; 105 echo "電話番号:" . htmlspecialchars($_SESSION['phone_num'],ENT_QUOTES,'UTF-8') . "<br>\n"; 106 echo "住所:" . htmlspecialchars($_SESSION['street'],ENT_QUOTES,'UTF-8') . "<br>\n"; 107 ?> 108 109<input type="submit" value="確認した上で送信"> 110</form> 111</body> 112</html>
試したこと
ページのフラグを立てて、セッションでほとんどは値の保持は出来たのですがどうしても生年月日の部分だけ値の保持の実装の仕方がわからない状況です。
どうか、ご教示お願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。