php 自作メールフォーム 改良
メールフォームを改良
今のところメール送信機能しかないメールフォームに機能を追加し、使い勝手やセキュリティ面の向上を目指す。
url直打ちのリダイレクト
入力画面(index.php)>確認画面(check.php)>完了画面(thanks.php)の順で遷移するが、この流れ以外でchek.phpやthanks.phpに入られるのは望ましくない。url直打ちではこれらのページに入れないような仕掛けを記述しておく。
index.phpへリダイレクト
if(!isset($_POST['name'])||!isset($_POST['email'])||!isset($_POST['message'])){ header('location:http://lxxx.xxx/index.php'); exit; }
header文
リダイレクトをかけたい場合に使う。記述したらすぐにexitで抜けること。
いずれかの入力値に異常がある場合は「次へ」を出さない
いずれかの入力値に異常がある場合、確認画面の「次へ」を表示させないようにする。
if($err===flase){ print"<p><a href='thanks.php'>次へ</a></p>"; }else{ print"<p>入力データの修正をお願いいたします。</p>"; }
各項目にエラーの内容を表示させる
もし名前が未入力であったなら、その旨を表示させ修正を促す。エラー内容を示すテキストを格納する変数$err_nameを定義し、初期化をかけておくこと。$err_nameはエラー判別文で代入させる。name以外にもそれぞれの入力値に対し記述する。
下記をbody内に記述。
if(!empty($err_name)){
print$err_name;
}else{
print$name;
}
入力データなし
入力データがない場合はエラーとする。
下記の例はname。それぞれの入力値に対し記述する。
if(empty($name)){
$err=true;
$err_name="未入力です。";
}
文字数制限超過チェック
入力値が許容文字数を超過した場合はエラーとする。
下記の例はname。それぞれの入力値に対し記述する。
これを使う際は入力ページに制限文字数を明記しておくこと。
if(mb_strlen($name,'utf-8')>30){
$err=true;
$err_name=$err_name."30文字以内で入力して下さい。";
}
2バイト文字のチェック
メールアドレスに2バイト文字が入っている場合はエラーとする。
手法としては、通常のバイト長とマルチバイト長を比較し、同一でないならエラーにさせる。
if(mb_strlen($eml,'utf-8')<>strlen($eml)){ $err=true; $err_email='半角文字で入力して下さい。'; };
@有無チェック
メールアドレスに@がない場合はエラーとする。
if(strpos($email,'@')===false){ $err=true; $err_email=$err_email.'@がありません。'; }
strpos文
vbaのInStrと同じ感覚で使える。