WEB制作の備忘録|朧なる足痕

メールフォーム実習4:SESSION:確認ページ/送信ページ

sessionデータをつくる

  1. check.phpにsend.phpの「送信」リンクをつくる
  2. postデータを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データの保存場所

  1. MAMPのApachとMySQLサーバーをスタート
  2. index.phpをブラウザで開き、テストする値を入力して確認ボタンをクリック
  3. check.phpが開いたら、送信リンクをクリック
  4. send.phpが開き、画面が白いのを確認して最小化
  5. Mac】/Applications/MAMP/tmp/phpを開く
  6. 一番日付の新しいファイルをテキストエディタで開く
  7. 以下のように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);/* 送信先メールアドレス */

メールのテストをする

  1. テストサーバーに3つファイルをアップロードします
  2. ブラウザのアドレスバーにサーバーのアドレス/index.phpを入力して開きます
  3. テストする値を入力して確認ボタンをクリック
  4. check.phpが開いたら、送信リンクをクリック
  5. send.phpが開き、画面が白いのを確認して最小化
  6. mb_send_mailで指定したメールアドレスで受信します
  7. 表題、本文が入っていたらOKです
日本語の文字化け対策
  • テストメールを送信して、日本語が文字化けしてしまう場合は、以下2行を追加します
mb_language('Japanese');
mb_internal_encoding("UTF-8");
mb_send_mail('XXX@XXX.XXX','お問い合わせメール',$name.$email.$message);/* 送信先メールアドレス */