WEB制作の備忘録|朧なる足痕

メールフォーム実習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>

ポイント

空文字をエラー変数に代入して初期化
  • index.phpにデータを入れずに確認ボタンをクリックした場合は、空文字が認識されているためcheck.phpに移動してしまいます
$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>";}?>