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
エラー状態から完了ページに飛ばせない
確認ページでエラーが出ている状態では「次へ」を表示させないようにしているが、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; }