メールフォーム実習5:確認ページ:エラーメッセージ表示
エラーメッセージを表示する
各種エラー表示をつくる
- check.phpにindex.phpの「戻る」リンクをつくります
- 空文字をエラー変数に代入して初期化、if文でデータが空の場合はエラーを表示させる
- 文字数、@、半角全角のエラーを表示させる
- $success = true;を記述し、if文でfalseの条件を記述
【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']; ?> <!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>
ポイント
空文字をエラー変数に代入して初期化
$name_error= ''; $email_error= ''; $message_error= '';
- 空文字を変数に代入します
issetとemptyの違い
- isset()=値があるかどうか(空文字は値として判断されます)
- empty()=値が空かどうか
if文でデータが空の場合はエラーを表示させる
if(empty($name)){ $name_error = '名前が入力されていません'; $success = false; } if(empty($email)){ $email_error = 'メールアドレスが入力されていません'; $success = false; } if(empty($message)){ $message_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; }
emailの@と半角全角判定
if(strpos($email,'@')===false){ $email_error = '@マークがありません'; $success = false; }
- strpos(引数,'文字')引数の文字が何番目か
- string=文字列
- position=位置
- 位置は0から数える
- ===false:ない場合はfalseを返す
if(strlen($email)!=mb_strlen($email,'utf-8')){ $email_error = 'メールアドレスに全角文字が含まれています'; $success = false; }
- mb_strlen($email,'utf-8')=文字の数を返す
- 全角でも半角でも1文字は1と数える
- strlen($email)=文字のバイト数を返す
- 半角英数:1文字=1バイト
- 全角:1文字=3バイト
- !=合致しない
$success
- $success = true; 初期化として変数宣言の場所に入れる
- $success = false;をエラー表示のif文の最後に入れる