My Web道

WEB制作科 受講記録 …とその後も続くWEB制作に関する活動・学習記録です。

5/29 [PHP] メールフォーム

  • [PHP] メールフォーム(サーバーへアップロード)

[PHP] メールフォーム(サーバーへアップロード)

【作業手順】

1. サイト管理(XAMPP環境)

Dreamweaver-サイトの管理: アップロード用データを新規サイトに設定しておく

2. FFFTP 設定

f:id:sntkk3:20140620204714p:plain

アップロード先のサーバー情報を「新規ホスト」として登録
f:id:sntkk3:20140620204708p:plain

以下メッセージが表示された場合、
f:id:sntkk3:20140620204711p:plain

「はい」を選択します。

3.thanks.phpファイルに以下を追記

1. メールのエンコーディング設定

《thanks.php
文字化け防止として、以下を追記

//メールのエンコーディング設定
 mb_language('japanese');
 mb_internal_encoding('UTF-8');

メモ:

  • 無料メールはshift-JIS形式が多い
  • もともとのメール自体はUTF-8ではない
  • 上記のような指定をしないと正しく言語表示されないことがある
  • 使用しているメールサーバーの環境に依存する


2. thanks.php ファイルのbodyの内容を書き換える

方法 : ヒアドキュメントで書き換える

▼ヒアドキュメントについて
入力内容のまま出力することができる
参照:
ヒアドキュメント | PHP Labo:
http://www.php-labo.net/tutorial/php/heredocument.html

PHP ヒアドキュメントの使い方:2通り - すたら日記:
http://d.hatena.ne.jp/sutara_lumpur/20080803/1217724875


▼入力内容のまま出力する方法
(1) ヒアドキュメント …開始点・終了点で指定した範囲内の入力内容はそのまま出力される
(2) { 変数 }で囲む …配列、メンバー変数が展開され、出力される

[今回の書き換え内容]

以下のように書き換えます。

$body = <<< BODY
【お問い合わせメール】
以下内容で承りました。
お名前:
{$name}
メールアドレス:
{$email}
お電話番号:
{$tel}
メッセージ:
{$message}
BODY;

この結果、<<< BODYを開始点、BODYを終了点とし、その間の入力内容は入力された通りに出力されます。


3. $thanks_message に値を設定する

$thanks_message = '上記の内容でお問い合わせメールを承りました。';

if(!$r) {
$thanks_message = 'メール送信エラー。以下お問い合わせは送信されませんでした。';
}

if(!$r) は、
書き換えると以下と同義
if($r === false)


メモ:
なぜ index.html ではなく、index.php なのか?
[理由] 拡張子がphpであることにより、後からphpを埋め込むことができるから


4.変数の初期化

//変数の初期化
$name = '';
$email = '';
$tel = '';
$message = '';


以上の修正完了後、ファイルの再アップロードを実施

[修正完了後のソース全文]

《thanks.php

<?php
require_once 'init.php';
//var_dump($_SESSION);

//セッションから値を取得
$name = $_SESSION['mail_data']['name'];
$email = $_SESSION['mail_data']['email'] ;
$tel = $_SESSION['mail_data']['tel'] ;
$message = $_SESSION['mail_data']['message']; 
//$data = $_SESSION['mail_data'];
//var_dump($data);

//セッションを取っておく必要がないのでクリア
$_SESSION['mail_data'] = array();
unset($_SESSION['mail_data']);

$to = "送信先とする任意のメールアドレス";
$subject = 'お問い合わせ';
//$from = $email;
//$body = $name . $email . $tel . $message;

$body = <<< BODY
【お問い合わせメール】
以下内容で承りました。
お名前:
{$name}
メールアドレス:
{$email}
お電話番号:
{$tel}
メッセージ:
{$message}
BODY;

//メールのエンコーディング設定
mb_language('japanese');
mb_internal_encoding('UTF-8');

$r = mb_send_mail($to, $subject, $body);
//var_dump($r);
//mb_send_mail("送信先","表題","本文","ヘッダオプション");
$thanks_message = '上記の内容でお問い合わせメールを承りました。';
if(!$r) {
 $thanks_message = 'メール送信エラー。以下お問い合わせは送信されませんでした。';
}
?>

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>送信終了</title>
<link rel="stylesheet" href="css/style1.css">
</head>
<body>
<div id="container">
<h1>送信終了</h1>
<p></p>
<table>
<tr>
<th>お名前:</th>
<td><?php echo h($name); ?></td>
</tr>
<tr>
<th>email:</th>
<td><?php echo h($email); ?></td>
</tr>
<tr>
<th>お電話番号:</th>
<td><?php echo h($tel); ?></td>
</tr>
<tr>
<th>お問い合わせ内容:</th>
<td><?php echo nl2br(h($message)); ?></td>
</tr>
</table>
<p>
<?php
if(!$r) {
  echo '<span>'	 . h($thanks_message) . '</span>';
} else {
  echo h($thanks_message);	
}
?>
<a href="index.php">戻る</a></p>
</div>
</body>
</html>
<?php ob_end_flush();