考え、感じる、Web制作。

Web制作の学習や情報についての記事が中心です。

php 自作メールフォーム 改良2

メールフォームを改良

引き続きメールフォームを改良していく。

入力値を保持する

例えば入力ページ(index.php)で値を入力し、確認ページ(check.php)で名前の誤りに気付いた場合、また入力ページに戻る操作をする。その際、今の状態だと入力値が全て消えてしまう。名前以外の入力値は残っていてほしいので、その機能を追加する。sessionデータを使い、データのやり取りを行なう。

check.php側コード記述

POSTで得たデータを$_SESSIONの配列変数に定義する。

  $_SESSION['mail_data']['name']=$_POST['name'];
  $_SESSION['mail_data']['email']=$_POST['email'];
  $_SESSION['mail_data']['message']=$_POST['message'];

エラーメッセージも引き継げるので、こちらも宣言しておく。

  $_SESSION['mail_data']['err_name']=$err_name;
  $_SESSION['mail_data']['err_email']=$err_email;
  $_SESSION['mail_data']['err_message']=$err_message;
index.php側コード記述1

変数初期化>セッション開始>セッションデータ取得>セッション解除>後処理、という流れ。if(isset($_SESSION['mail_data']))により、確認ページから戻ってきた場合だけセッションデータの取得を処理するようにしている。

$name='';
$email='';
$mssage='';
$err_name='';
$err_email='';
$err_mssage='';

session_start();
session_regenerate_id(true);

if(isset($_SESSION['mail_data'])){
  $name=$_SESSION['mail_data']['name'];
  $email=$_SESSION['mail_data']['email'];
  $mssage=$_SESSION['mail_data']['message'];
  $err_name=$_SESSION['mail_data']['err_name'];
  $err_email=$_SESSION['mail_data']['err_email'];
  $err_mssage=$_SESSION['mail_data']['err_message'];
}

$_SESSION['mail_data']=array();
unset($_SESSION['mail_data']);
if(isset($_COOKIE[session_name()])){
  setcookie(session_name(),'',time()-42000,'/');
}
  session_destroy();
index.php側コード記述2

の中身の記述。下記の例はname。他の項目も同様に修正する。

if($name===""){
  print"<input type='text' id='name' name='name' size='30' maxlength='30' ><br>";
}else{
  print"<input type='text' id='name' name='name' size='30' maxlength='30' value={$name}>{$err_name}<br>";
}

エラー状態から完了ページに飛ばせない

確認ページでエラーが出ている状態では「次へ」を表示させないようにしているが、url直打ちでは問題なく完了ページに進んでしまう。これを回避するため、エラーフラグが立っている場合はリダイレクトをかけ入力ページに飛ばすようにする。

コード記述

$err_xxx(3種類)初期化と$_SESSION['mail_data']['err_xxx'](3種類)の取得をしておく。

if(!isset($_SESSION['mail_data']['err_name'])||!isset($_SESSION['mail_data']['err_email'])||!isset($_SESSION['mail_data']['err_message'])){
  header('location:http://xxx.xxx/index.php');
  exit;
}