php 自作メールフォーム 改良3
コード記述の改良
今回はコードの簡略化を進めていく。
共通部分を外部ファイルに
自作関数(htmlspecialchars)やセッション開始処理は全ページ(入力、確認、完了)で記述している。この部位を別ファイルに記述し、呼び出すコードを1行書くだけにする。この手法はコードの簡略化だけでなく、メンテナンス性向上にも役立つ。現状の簡易な構成では意義性は低いが、複雑な構成になると大きな貢献を果たす。
コード記述(既存ファイル)
require_once dirname(__FILE__).'/init.php';
このコードを各ページに記述後、それぞれの自作関数部とセッション開始処理部を削除する。require_onceは「1度だけ処理させる」を意味し、dirname~で呼び出すファイル名を指定している。ファイル名は任意(ここではinit.php)。ファイルの中身をよく考え、どこに記述するか考える必要がある。
コード記述(init.php)
<?php function h($str){ $str=htmlspecialchars($str,ENT_QUOTES,"utf-8"); return$str;} session_start(); session_regenerate_id(true); header('X-Frame-OPTIONS:DENY');
phpの終了タグが不要な点に注意。
最後の行に追記したheader('X-Frame-OPTIONS:DENY');は、他ページでのフレーム内表示をきんしさせる命令。クリックジャッキング(ユーザを視覚的に欺き意図しない商品購入や会員登録・退会などの操作をさせる)の予防策として使用される。
foreachで代入
セッションデータを代入させる記述をforeach文で簡略化させる。$_SESSION['mail_to']以下の配列キーと代入される側の変数名を合致させておく必要がある。この手法を使うと後で項目を追加した場合に代入の記述を一切書くことなく処理できるため、使い勝手が良い。
コード記述
$name=$_SESSION['mail_data']['name']; $email=$_SESSION['mail_data']['email']; $message=$_SESSION['mail_data']['message'];
上記を下記に書き換える。
foreach($_SESSION['mail_data'] as $k => $v){
$$k = $v;
}
$$kは可変変数と呼ばれ、key名をそのまま変数名としている。
$連想配列1件目のキー名=連想配列1件目の値
といった風だ。一見分かりにくいが変数にキーで定義された文字列をそのまま書き込んでいるだけである。
foreachで初期化
上記と同じ要領で、各変数の初期化をさせられる。初期化したい変数を、事前に任意の変数の連想配列キーとして定義しておく。
コード記述
$input_data=array('name','email','message','err_name','err_email','err_message'); foreach($input_data as $v){ $$v=''; }