考え、感じる、Web制作。

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

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文字以内で入力して下さい。";
}
strlen文

vbaのlenと同じ感覚で使用できる。mb_が付くとマルチバイト文字対応となり、引数に文字コードが必要となる。

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と同じ感覚で使える。