エラーメッセージの内容としては定義されていないのが原因のようなので、
最初の条件式の中に定義されているのが原因と予想しております。
PHP
1if (!empty($_POST) && empty($_SESSION['input_data'])) {
コード全体はこちらです。
実装方法がわからないので教えていただきたいです。
PHP
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="UTF-8"> 5<style>.error {color: #FF0000;}</style> 6</head> 7<body> 8<?php 9session_start(); 10 11/*エスケープ処理*/ 12function h($input_value) { 13 return htmlspecialchars($input_value, ENT_QUOTES, 'UTF-8'); 14} 15if (!empty($_POST) && empty($_SESSION['input_data'])) { 16 /* バリデーションチェック */ 17 function valid_name($input_value) { 18 if ($_POST["first_name"] === '' || $_POST["last_name"] === '') { 19 return $err_msg['full_name'] = '*名前を入力してください'; 20 } 21 } 22 function valid_email($input_value) { 23 if ($_POST["email"] === '' || $_POST["email_confirmation"] === '') { 24 return $err_msg['email'] = '*メールアドレスを入力してください'; 25 } elseif (!filter_var($_POST["email"], $pattern['email']) || !filter_var($_POST["email_confirmation"], FILTER_VALIDATE_EMAIL)) { 26 return $err_msg['email'] = 'メールアドレスの形式が不明です'; 27 } elseif ($_POST["email"] !== $_POST["email_confirmation"]) { 28 return $err_msg['email'] = '*メールアドレスが一致していません'; 29 } 30 } 31 /* END. バリデーションチェック */ 32 /*エラーがない場合は確認画面に推移させる*/ 33 if (!isset($err_msg)) { 34 $_SESSION['input_data'] = $_POST; 35 header('Location:./confirm.php'); 36 exit(); 37 } 38} elseif (!empty($_SESSION['input_data'])) { 39 $_POST = $_SESSION['input_data']; 40} 41session_destroy(); 42?> 43<div class="wrapper"> 44 <form method="post"action="input.php"> 45 <table> 46 <tr> 47 <td><p>名前</p></td> 48 <td> 49 <input type="text" name="first_name" value="<?php echo isset($_POST['first_name']) ? h($_POST['first_name']) : '';?>" /> 50 <input type="text" name="last_name" value="<?php echo isset($_POST['last_name']) ? h($_POST['last_name']) : '';?>" /> 51 <span class="error"><?php echo valid_name($_POST); ?></span> 52 </td> 53 </tr> 54 <tr> 55 <td><p>メールアドレス</p></td> 56 <td> 57 <input type="text" name="email" value="<?php echo isset($_POST['email']) ? h($_POST['email']) : '';?>" size="50" placeholder="hogehoge@example.com" /> 58 <span class="error"><?php echo valid_email($_POST); ?></span> 59 </td> 60 </tr> 61 <tr> 62 <td><p>メールアドレス(確認用)</p></td> 63 <td> 64 <input type="text" name="email_confirmation" value="<?php echo isset($_POST['email_confirmation']) ? h($_POST['email_confirmation']) : '';?>" size="50" /> 65 <span class="error"><?php echo valid_email($_POST); ?></span> 66 </td> 67 </tr> 68 <td></td> 69 <td><input type="submit" value="送信する" /></td> 70 </table> 71 </form> 72 </div> 73</body> 74</html> 75
関数として定義する前
PHP
1if (!empty($_POST) && empty($_SESSION['input_data'])) { 2 /* バリデーションチェック */ 3 if ($_POST["first_name"] === '' || $_POST["last_name"] === '') { 4 return $err_msg['full_name'] = '*名前を入力してください'; 5 } 6 if ($_POST["email"] === '' || $_POST["email_confirmation"] === '') { 7 return $err_msg['email'] = '*メールアドレスを入力してください'; 8 } elseif (!filter_var($_POST["email"], $pattern['email']) || !filter_var($_POST["email_confirmation"], FILTER_VALIDATE_EMAIL)) { 9 return $err_msg['email'] = 'メールアドレスの形式が不明です'; 10 } elseif ($_POST["email"] !== $_POST["email_confirmation"]) { 11 return $err_msg['email'] = '*メールアドレスが一致していません'; 12 } 13 /* END. バリデーションチェック */ 14 /*エラーがない場合は確認画面に推移させる*/ 15 if (!isset($err_msg)) { 16 $_SESSION['input_data'] = $_POST; 17 header('Location:./confirm.php'); 18 exit(); 19 } 20} elseif (!empty($_SESSION['input_data'])) { 21 $_POST = $_SESSION['input_data']; 22}