メールフォーム実習9:入力ページ:エラーメッセージを即表示、確認ページ:回収
index.phpに入力すると同時にエラーメッセージを表示
- 今までは入力ページで入力して次の確認ページでエラーを確認し、入力ページへ戻るという仕様でしたが、ユーザーに優しくありませんので回収していきます
【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['success']= $success; $_SESSION['name_error'] = $name_error; $_SESSION['email_error'] = $email_error; $_SESSION['message_error'] = $message_error; if(!$success){ header('Location:index.php'); exit; } ?> <!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); ?></td> </tr> <tr> <th>Eメール:</th><td><?php echo h($email); ?></td> </tr> <tr> <th>お問い合わせ:</th><td><?php echo nl2br(h($message)); ?></td> </tr> </table> <p><a href="index.php">戻る</a></p> <p><a href="send.php">送信</a></p> </body> </html>
検証
ポイント
check.phpにエラーメッセージ判定の記述の後にリダイレクト
if(!$success){ header('Location:index.php'); exit; }
- エラーがあったらindex.phpに遷移します
check.phpを回収
- check.phpで表示していたエラーメッセージは、index.phpで表示するように変更しました。つまり、check.phpでの表示は、エラーのない状態のみになります。そこで、check.phpで出力(表示)していたエラーは表示されなくなるので削除します
【check.php回収前】エラーメッセージ出力
<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>
【check.php回収後】エラーメッセージ削除
<table> <tr> <th>お名前:</th><td><?php echo h($name); ?></td> </tr> <tr> <th>Eメール:</th><td><?php echo h($email); ?></td> </tr> <tr> <th>お問い合わせ:</th><td><?php echo nl2br(h($message)); ?></td> </tr> </table>