メールフォーム実習4:SESSION:確認ページ/送信ページ
sessionデータをつくる
【check.php】
<?php function h($str){ return htmlspecialchars($str,ENT_QUOTES,'utf-8'); } if(!isset($_POST['name']) || !isset($_POST['email']) || !isset($_POST['message'])){ header('Location:index.php'); exit; } //var_dump($_POST); $name = $_POST['name']; $email = $_POST['email']; $message = $_POST['message']; session_start(); $_SESSION['name']= $_POST['name']; $_SESSION['email']= $_POST['email']; $_SESSION['message']= $_POST['message']; ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>お問い合わせ確認</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <h1>お問い合わせ確認</h1> <table> <tr> <th>お名前:</th><td><?php echo h($name); ?></td> </tr> <tr> <th>Eメール:</th><td><?php echo h($email); ?></td> </tr> <tr> <th>お問い合わせ:</th><td><?php echo nl2br(h($message)); ?></td> </tr> </table> <p><a href="send.php">送信</a></p> </body> </html>
ポイント
sessionデータをつくる
- postデータはcheck.phpに渡し、処理が全て終わるとデータが消えてしまうため、send.phpにデータを持ち越せません
- sessionデータは、ブラウザを閉じるまで、一定時間は一時的にデータを保管できます
- データはsend.phpに持ち越したり、index.phpに戻したりするので、再利用する必要があります
session_start(); $_SESSION['name']= $_POST['name']; $_SESSION['email']= $_POST['email']; $_SESSION['message']= $_POST['message'];
- postデータをsessionデータに代入
メール送信ページをつくる
send.phpを新規作成
【send.php】
<?php session_start(); $name = $_SESSION['name']; $email = $_SESSION['email']; $message = $_SESSION['message']; mb_send_mail('XXX@XXX.XXX','お問い合わせメール',$name.$email.$message);/* 送信先メールアドレス */ ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>無題</title> <link rel="stylesheet" href="css/style.css"> </head> <body> </body> </html>
検証:sessionデータの保存場所
- MAMPのApachとMySQLサーバーをスタート
- index.phpをブラウザで開き、テストする値を入力して確認ボタンをクリック
- check.phpが開いたら、送信リンクをクリック
- send.phpが開き、画面が白いのを確認して最小化
- 【Mac】/Applications/MAMP/tmp/phpを開く
- 一番日付の新しいファイルをテキストエディタで開く
- 以下のようにindex.phpで入力したデータが出ていればOK
ポイント
SESSIONデータを取得
session_start(); $name = $_SESSION['name']; $email = $_SESSION['email']; $message = $_SESSION['message'];
- sessionデータを変数に代入
メールを送信
mb_send_mail('メールアドレス',表題,本文)
mb_send_mail('XXX@XXX.XXX','お問い合わせメール',$name.$email.$message);/* 送信先メールアドレス */
メールのテストをする
- テストサーバーに3つファイルをアップロードします
- ブラウザのアドレスバーにサーバーのアドレス/index.phpを入力して開きます
- テストする値を入力して確認ボタンをクリック
- check.phpが開いたら、送信リンクをクリック
- send.phpが開き、画面が白いのを確認して最小化
- mb_send_mailで指定したメールアドレスで受信します
- 表題、本文が入っていたらOKです
日本語の文字化け対策
- テストメールを送信して、日本語が文字化けしてしまう場合は、以下2行を追加します
mb_language('Japanese');
mb_internal_encoding("UTF-8");
mb_send_mail('XXX@XXX.XXX','お問い合わせメール',$name.$email.$message);/* 送信先メールアドレス */