読者です 読者をやめる 読者になる 読者になる

求職者支援訓練webサイト制作科授業資料

フェリカテクニカルアカデミー池袋の求職者支援訓練webサイト制作科7月クラスの授業解説ブログです。

PHPでのメールフォーム・データベースを使わないバージョン

PHP

メールフォーム(データベースに接続してないバージョン)

今回のメールフォームは非常にシンプルでデータベースには接続せず、フォームを記入してくれた人とフォームの管理者(自分)に、フォームに記入された内容がメールで届くようになっています。


必要なファイルは
input.php(フォーム入力画面)
check.php(フォーム内容確認画面)
submit.php(完了画面)


の3つです。

input.php(ここはHTMLのformなので特に問題は無し)

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メールフォーム</title>
<style>
section {
	width: 650px;
	margin: auto;
	text-align: center;
}
table {
	text-align: left;
}
td {
	padding: 3px;
	width: 200px;
}
</style>
</head>
<body>
<section>
<h1>入力画面</h1>
<p>必要事項を入力して「確認する」ボタンをクリックしてください。</p>
<form method="post" action="check.php">
<table border="0">
<tr>
<td>お名前</td>
<td><input type="text" name="name" size="40"></td>
</tr>
<tr>
<td>メールアドレス</td>
<td><input type="text" name="email" size="40"></td>
</tr>
<tr>
<td>メッセージ</td>
<td>
<textarea rows="5" cols="40" name="message"></textarea>
</td>
</tr>
</table>
<input type="submit" name="sub1" value="確認する">
</form>
</section>
</body>
</html>


次のcheck.phpではポイントは2つ


入力項目が空白の場合「onClick="history.back()」を使ってinput.phpに戻るよう設定

if($name=='' || $email=='' || $message=='') {
  echo '<form>'."\n";
  echo '<input type="button" onClick="history.back()" value="戻る">'."\n";;
  echo '</form>'."\n";	


フォームの情報を保存しておく為に「 $_SESSION」を使用
$_SESSIONとは・・・PHPで情報を保存するには「Cookie」と「SESSION」の2つの方法がある。「Cookie」は期間を決めて情報を保存しておけるのに対し、「SESSION」はブラウザーを閉じるまでという制限があるものの、その分安全に情報を保存する事が出来る。
で、今回はその「SESSION」を使い、フォームの情報を保存しておく。

※「SESSION」を使う場合、初めに session_start(); を使う必要がある。また、セキュリティ上、最後にはsession_destroy();を使ってsession関数を開放する必要がある。



check.php

<?php
// フォームデータが空の場合は処理終了
if (empty($_POST)) {
    echo "処理終了";
    exit;
}

// セッションの開始
session_start();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メールフォーム</title>
<style>
section {
	width: 500px;
	margin: auto;
	text-align: center;
}
table {
	text-align: left;
}
td {
	padding: 3px;
}
</style>
</head>
<body>
<section>
<h1>メールフォーム(2. 確認画面)</h1>
<p>内容を確認してください。</p>
<?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");

$_SESSION["name"] = $name;
$_SESSION["email"] = $email;
$_SESSION["message"] = $message;


// 入力値のチェック
 echo '<ul>'."\n";
  echo '<li>';
    if($name=='') {
        echo 'お名前が、入力されていません。';
    } else {
        echo 'ようこそ、'.$name.'';
    }
  echo '</li>'."\n";
  echo '<li>';
    if($email=='') {
        echo 'メールアドレスが、入力されていません。';
    } else {
        echo 'メールアドレス:'.$email;
    }
  echo '</li>'."\n";
  echo '<li>';		
    if($message=='') {
        echo 'お問い合わせの内容が、入力されていません。';
    } else {
			?>
 <p><?php       echo 'お問い合わせの内容:<br>'.$message;
    }
	?>	</p>
  
<?php  echo '</li>'."\n";
  echo '</ul>'."\n";



if($name=='' || $email=='' || $message=='') {
  echo '<form>'."\n";
  echo '<input type="button" onClick="history.back()" value="戻る">'."\n";;
  echo '</form>'."\n";	
}
 else {
  echo '<form action="submit.php" method="post">'."\n";
  echo '<input type="button" onClick="history.back()" value="戻る">'."\n";
  echo '<input type="submit" name="sub1" value="送信">'."\n";
  echo '</form>'."\n";
}
?>

</section>
</body>
</html>


submit.phpでのポイントはヒアドキュメントを使う事。前回はechoを使って1個づつ出力させていたが、ヒアドキュメントを使うと、改行など自由に使ってテキストを出力させる事が出来る。
今回はこのヒアドキュメントをお礼メールの内容の部分に使ったので、お礼メールの文章などを好きに、簡単に、自分なりにアレンジ出来る。


例 echoのみで出力した場合

<?php

$purpose = "Webプログラミング";

echo "PHPとは、HTMLへの埋め込み型プログラミング言語です。<br />\n";
echo "正式名称は「PHP: Hypertext Preprocessor」です。<br />\n";
echo "PHPは{$purpose}に利用されます。<br />\n";
echo "<a href=\"detail.php\">詳細を読む<a>\n";

?>


ヒアドキュメントの場合

echo <<< EOM
PHPとは、HTMLへの埋め込み型プログラミング言語です。<br />
正式名称は「PHP: Hypertext Preprocessor」です。<br />
PHPは{$purpose}に利用されます。<br />
<a href="detail.php">詳細を読む<a>
EOM;

submit.php

<?php
// フォームデータが空の場合は処理終了
if (empty($_POST)) {
    echo "処理終了";
    exit;
}

// セッションの開始
session_start();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>メールフォーム</title>
<style>
section {
	width: 500px;
	margin: auto;
	text-align: center;
}
table {
	text-align: left;
}
td {
	padding: 3px;
}
</style>
</head>
<body>
<section>
<h1>メールフォーム(3. 完了画面)</h1>
<?php
// 入力値の取得・加工
$name = htmlspecialchars($_SESSION["name"], ENT_QUOTES, "UTF-8");
$email = htmlspecialchars($_SESSION["email"], ENT_QUOTES, "UTF-8");
$message = htmlspecialchars($_SESSION["message"], ENT_QUOTES, "UTF-8");

// メール本文の組み立て
mb_language("Ja");
mb_internal_encoding("UTF-8");

$subject = "お問い合せを受け付けました。";
$to = "管理者のメールアドレス, {$email}";
$title = "【メールフォームより】";
$headers = "From: 管理者もしくは店舗名";
$body =  <<<EOM
--------------------------------------------------
【お問い合せ内容の確認】

お名前:{$name}
メールアドレス:{$email}
メッセージ:{$message}

お問い合わせ、誠にありがとうございました。
--------------------------------------------------
EOM;


// メール送信の実行
$rc = mb_send_mail($to, $title, $body, $headers);
if (!$rc) {
    exit;
} else {
    $_SESSION = NULL;
}
?>

<p>以下の内容を受けたまわりました。</p>
<table border="0">
<tr>
<td>お名前</td>
<td width="300"><?php echo $name; ?></td>
</tr>
<tr>
<td>メールアドレス</td>
<td><?php echo $email; ?></td>
</tr>
<tr>
<td>メッセージ</td>
<td><?php echo nl2br($message); ?></td>
</tr>
</table>
</section>
<?php
session_destroy();
?>
</body>
</html>