メールフォームと $_SESSION
メールを送信するときのポイント
- hidden属性にはセキュリティの問題があるため、$_SESSIONを使う
- send-mail関数を使い、メールを自動返信する
- 入力チェックをして、未入力処理をする
hidden フィールドの問題点
- hidden フィールドは、見た目を隠しているだけ
- ブラウザのソースコードで入力内容を見ることができる
$_SESSION とは
- ユーザーから中身を見ることができない便利な「箱」
- この「箱」が $_SESSION とという特殊な変数です
- Webアプリケーションでは、アプリケーションを使い始めるときから使い終わった時までをひと続き(1つのセッション)だと考えます
- $_POST から受け取った入力値を $_SESSION に格納するだけで、アプリケーション全体のページ入力値を参照・変更できるようになります
$_SESSION の使い方
- 「セッション変数の使用を開始します」と宣言する必要があります
- 「session_start関数」を有効化します
- 「session_start関数」はそのページで画面に何らかの文字列を表示する前、そしてHTMLタグが始まる前に実行する必要があります
<?php session_start(); ・・・ $name = $_POST[ 'name' ]; ・・・ $_SESSION[ 'name' ] = $name;
入力内容のチェック
- PHP関数を使って $_POST の中身をチェックする
<?php // フォームデータが空の場合は処理終了 if ( empty($_POST[ 'name' ]) ) { print "お名前を入力してください。"; exit; }
- 「if ( empty($_POST[ 'name' ]) )」は「if ( empty($_POST[ 'name' ]) == true )」を省略した記述方法です
- 「名前(name)が空だった場合は」という条件で、名前が記入されているかどうかをチェックします
安全面のチェック
- 危険な値を「洗浄する」という発想
- 危険な値を安全にする作業は「サニタイズ(洗浄)」と呼ばれます
<?php $name = htmlspecialchars( $_POST[ 'name' ], ENT_QUOTES, 'UTF-8' ); $email = htmlspecialchars( $_POST[ 'email' ], ENT_QUOTES, 'UTF-8' ); $message = htmlspecialchars( $_POST[ 'message' ], ENT_QUOTES, 'UTF-8' );
PHP関数の短縮形
- 1文字の関数名でユーザー定義関数を作成する
<?php function h( $a ) { return htmlspecialchars( $a, ENT_QUOTES, 'UTF-8' ); } $b = h( $a );
mb_send_mail関数
- 「日本語」のメール送信に役立つPHP関数
- 「mb_send_mail(送信先, タイトル, 本文, 追加ヘッダー)」というパラメータで実行します
- 「追加ヘッダー」には、送信元を指定するのが典型的なパターンです
<?php $to = 'クライアントメールアドレス, $email'; $title = '【メールフォームより】'; $subject = 'お問い合せを受け付けました。'; $ext_header = 'From: $email'; $body = 'メール本文'; $rc = mb_send_mail( $to, $title, $body, $ext_header );
長いメール本文を組み立てる
- 「ヒアドキュメント(here document)」を使う
- ヒアドキュメントは、名前をつけた文字列を出力する
print <<< 開始ID
終端ID;
開始IDの注意点
- 開始IDの前後に全角空白があるとIDはその空白も含めたものになる
- 開始IDの後ろにタブと半角スペースは入れられない
- <<< とIDの間にはタブと半角スペースを入れられる
- 開始IDの後ろにはコメントもつけられない
終端IDの注意点
- 終端IDは必ず行頭に置かなくてはならない
- 終端IDの行には「;」(セミコロン)以外置いてはならない
- タブやスペースでのインデントもセミコロンの前後に空白も不可
- コメントもつけられない