メールフォーム実習8:入力ページにエラーメッセージを表示
check.phpのエラーメッセージをsessionデータにする
【check.php】
<?php function h($str){ return htmlspecialchars($str,ENT_QUOTES,'utf-8'); } if(!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])){ header('Location:index.php'); exit; } //var_dump($_POST); $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; $success = true; $name_error= ''; $email_error= ''; $message_error= ''; if(strpos($email,'@')===false){ $email_error = '@マークがありません'; $success = false; } // if(strlen($email)!=mb_strlen($email,'utf-8')){ $email_error = 'メールアドレスに全角文字が含まれています'; $success = false; } if(mb_strlen($name,'utf-8')>20){ $name_error = 'お名前が長すぎます'; $success = false; } if(mb_strlen($email,'utf-8')>25){ $email_error = 'メールアドレスが長すぎます'; $success = false; } if(mb_strlen($message,'utf-8')>150){ $message_error = 'お問い合わせ内容が長すぎます'; $success = false; } if(empty($name)){ $name_error = '名前が入力されていません'; $success = false; } if(empty($email)){ $email_error = 'メールアドレスが入力されていません'; $success = false; } if(empty($message)){ $message_error = 'お問い合わせ内容が入力されていません'; $success = false; } session_start(); $_SESSION['name']= $_POST['name']; $_SESSION['email']= $_POST['email']; $_SESSION['message']= $_POST['message']; $_SESSION['name_error'] = $name_error; $_SESSION['email_error'] = $email_error; $_SESSION['message_error'] = $message_error; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>お問い合わせ確認</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <h1>お問い合わせ確認</h1> <table> <tr> <th>お名前:</th><td><?php echo h($name); echo h($name_error); ?></td> </tr> <tr> <th>Eメール:</th><td><?php echo h($email); echo h($email_error); ?></td> </tr> <tr> <th>お問い合わせ:</th><td><?php echo nl2br(h($message)); echo h($message_error); ?></td> </tr> </table> <p><a href="index.php">戻る</a></p> <p><a href="send.php">送信</a></p> </body> </html>
ポイント
エラーメッセージのセッションデータをつくる
- index.phpに表示させるために、エラー変数をセッションデータに渡します
$_SESSION['name_error'] = $name_error; $_SESSION['email_error'] = $email_error; $_SESSION['message_error'] = $message_error;
- エラー変数をセッションデータに代入
エラーメッセージをindex.phpに表示
【index.php】
<?php function h($str){ return htmlspecialchars($str,ENT_QUOTES,'utf-8'); } session_start(); $name = ''; $email = ''; $message = ''; $name_error= ''; $email_error= ''; $message_error= ''; if(isset($_SESSION['name'])){ $name = $_SESSION['name']; } if(isset($_SESSION['email'])){ $email = $_SESSION['email']; } if(isset($_SESSION['message'])){ $message = $_SESSION['message']; } if(isset($_SESSION['name_error'])){ $name_error = $_SESSION['name_error']; } if(isset($_SESSION['email_error'])){ $email_error = $_SESSION['email_error']; } if(isset($_SESSION['message_error'])){ $message_error = $_SESSION['message_error']; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>お問い合わせフォーム</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <h1>お問い合わせフォーム</h1> <form action="check.php" method="post"> <table> <tr> <th><label for="name">お名前:</label>(20文字以内)</th><td><input type="text" name="name" id="name" value="<?php echo h($name); ?>"><?php if(!empty($email_error)){echo "<span class='red'>{$email_error}</span>";}?></td> </tr> <tr> <th><label for="email">Eメール:</label>(25文字以内)</th><td><input type="text" name="email" id="email" value="<?php echo h($email); ?>"><?php if(!empty($email_error)){echo "<span class='red'>{$email_error}</span>";}?></td> </tr> <tr> <th><label for="message">お問い合わせ:</label>(150文字以内)</th><td><textarea name="message" id="message"><?php echo h($message); ?></textarea><?php if(!empty($message_error)){echo "<span class='red'>{$message_error}</span>";}?></td> </tr> </table> <input type="submit" value="確認"> </form> </body> </html>
ポイント
空文字をエラー変数に代入して初期化
$name_error= ''; $email_error= ''; $message_error= '';
- 空文字を変数に代入します
if文でセッションデータがある場合はエラーを表示させる
if(isset($_SESSION['message'])){ $message = $_SESSION['message']; } if(isset($_SESSION['name_error'])){ $name_error = $_SESSION['name_error']; } if(isset($_SESSION['email_error'])){ $email_error = $_SESSION['email_error']; } if(isset($_SESSION['message_error'])){ $message_error = $_SESSION['message_error']; }
- もしセッションデータがあれば、’エラーメッセージ'をエラー変数に代入します
エラーメッセージを出力(表示)
- inputはtd終了タグの前に以下を記述します。(各項目で変数が変わります)
<?php if(!empty($email_error)){echo "<span class='red'>{$email_error}</span>";}?>