概要と目標
メールフォームを、
作れるようになろう。
独自関数と、PHPを使ったメールの送信方法を学習し、
メールフォームに必要なページを作成しよう。
独自関数と、PHPを使ったメールの送信方法を学習し、
メールフォームに必要なページを作成しよう。
関数は、自分で作ることも出来る。何度も使う処理は関数として登録しておくことで、
いつでも呼び出しができるようになる。
function 関数名(引数) {
// ここに関数として登録する処理を記述
return 戻り値;
省略可
}
*.引数を複数必要とする場合は、「,(半角カンマ)」で区切って指定する。
引数はPHPマニュアルを参照
関数名(引数)
<?php
// 関数の登録
function area_of_triangle($base, $height) {
// 関数として登録する処理
$result = $base * $height / 2;
echo $result;
}
?>
h1要素の下で、三角形の面積を出力する独自関数を呼び出す<p>底辺が 6cm 、高さが 4cm の三角形の面積は、<?php area_of_triangle(6, 4); ?>cm<sup>2</sup>です。</p>
関数を登録するブロック内で、echo をすると必ず画面に出力してします。
時には、変数に代入したり、if文の条件式に使いたいときもある。
そういった時は、戻り値を設定する。
functionのブロックの中にある、echoをコメントにし、戻り値を設定する
<php
// 関数の登録
function area_of_triangle($base, $height) {
// 関数として登録する処理
$result = $base * $height / 2;
// echo $result;
return $result;
}
?>
p要素のarea_of_triangle()をechoで出力したり、
if文の条件式にarea_of_triangle()を利用してみる<p>底辺が 6cm 、高さが 4cm の三角形の面積は、<?php echo area_of_triangle(6, 4); ?>cm<sup>2</sup>です。</p>
<?php if ( area_of_triangle(6, 4) >= 10 ) : ?>
<p>面積が、10cm<sup>2</sup>以上の三角形です。</p>
<?php else : ?>
<p>面積が、10cm<sup>2</sup>より小さいの三角形です。</p>
<?php endif; ?>
PHPを使ってメールを送信するには、mb_send_mail関数を用いる。
ただし、事前に言語や文字コードの設定を行わなければ、文字化けする可能性がある。
また、XAMPPやMAMPなどでメールを送信する場合は、メールサーバが別途必要となる。
mb_send_mail関数 ・・・ 日本語のメールを送信する関数mb_send_mail(送信先, 件名, 本文, 送り主などのヘッダ情報)
送り主などのヘッダ情報 … 送り主は、"From: 送り主名<メールアドレス>" の形式で指定
戻り値… ture(送信成功) / false(送信失敗)
詳細はPHPマニュアルを参照
上記の mb_send_mail関数を用いればメールは送信できる。
ただし、これだけでは、日本語が、文字化けする可能性がある。
その為、mb_language関数を使って言語を設定したり、mb_internal_encoding関数を使って、文字コードを設定したりする必要がある。
さらには、送り主名は、メールヘッダの形式に合わせる必要があるため、mb_encode_mimeheader関数で、変換する必要がある。
h1要素の下に、入力フォームを作成
<form action="receive.php" method="post">
<dl>
<dt><label for="email">送信先</label></dt>
<dd>
<input type="text" name="email" id="email">
</dd>
</dl>
<p><input type="submit" value="送信"></p>
</form>
mb_language関数 ・・・ 現在の言語の設定あるいは取得する関数mb_language(言語)
省略可
mb_send_mail関数はこの設定を利用してエンコードする。
詳細はPHPマニュアルを参照
mb_internal_encoding関数 ・・・ 文字コードの設定あるいは取得する関数mb_internal_encoding(文字コード)
省略可
詳細はPHPマニュアルを参照
<?php
// 日本語の設定
mb_language('ja');
mb_internal_encoding('UTF-8');
?>
?>の手前に、メールアドレスの入力チェックを追加<?php
// 日本語の設定
mb_language('ja');
mb_internal_encoding('UTF-8');
// メールアドレスが空なら、入力フォームにリダイレクト
if ( $_POST['email'] == '' ) {
header('Location: ./');
exit();
}
?>
?>の手前に、mb_send_mail()関数に必要な情報を変数に代入する処理を追加mb_encode_mimeheader()でエンコードするmb_encode_mimeheader関数 ・・・ MIMEヘッダの文字列をエンコードする関数mb_encode_mimeheader(エンコードする文字列, 文字コード)
省略可
詳細はPHPマニュアルを参照
<?php
// 日本語の設定
mb_language('ja');
mb_internal_encoding('UTF-8');
// メールアドレスが空なら、入力フォームにリダイレクト
if ( $_POST['email'] == '' ) {
header('Location: ./');
exit();
}
// 値を変数に格納
$to = $_POST['email'];
$subject = 'PHPからメール送信テスト';
$message = 'これはPHPから自動送信されたメールです。';
$from = mb_encode_mimeheader('ダミー'). '<noreply@dummy.com>';
?>
?>の手前に、mb_send_mail()関数でメールを送信する処理を追加<?php
// 日本語の設定
mb_language('ja');
mb_internal_encoding('UTF-8');
// メールアドレスが空なら、入力フォームにリダイレクト
if ( $_POST['email'] == '' ) {
header('Location: ./');
exit();
}
// 値を変数に格納
$to = $_POST['email'];
$subject = 'PHPからメール送信テスト';
$message = 'これはPHPから自動送信されたメールです。';
$from = mb_encode_mimeheader('ダミー'). '<noreply@dummy.com>';
// メールの送信
$resulut = mb_send_mail($to, $subject, $message, 'From: '. $from);
?>
?>の手前に、メール送信に成功した時とっ失敗した時で処理を分けるコードを追加<?php
// 日本語の設定
mb_language('ja');
mb_internal_encoding('UTF-8');
// メールアドレスが空なら、入力フォームにリダイレクト
if ( $_POST['email'] == '' ) {
header('Location: ./');
exit();
}
// 値を変数に格納
$to = $_POST['email'];
$subject = 'PHPからメール送信テスト';
$message = 'これはPHPから自動送信されたメールです。';
$from = mb_encode_mimeheader('ダミー'). '<noreply@dummy.com>';
// メールの送信
$resulut = mb_send_mail($to, $subject, $message, 'From: '. $from);
if ($resulut) {
// 送信成功
$msg = '送信成功';
} else {
// 送信失敗
$msg = '送信失敗';
}
?>
h1要素の下にメッセージを出力するPHPを追記<p><?php echo htmlspecialchars($msg, ENT_QUOTES, 'UTF-8'); ?></p>
お問い合わせフォームはシンプルだが様々な仕様がある。
今回は、セッションを使って、処理ごとにページを分けた仕様で開発する。
ユーザーから取得したい項目のフォームを用意しよう。
h1要素の下に、入力フォームを作成
<form action="set.php" method="post">
<dl>
<dt><label for="name">お名前</label></dt>
<dd>
<input type="text" name="name" id="name">
</dd>
<dt><label for="email">メールアドレス</label></dt>
<dd>
<input type="text" name="email" id="email">
</dd>
<dt><label for="message">お問い合わせ内容</label></dt>
<dd>
<textarea name="message" id="message" rows="8" cols="50"></textarea>
</dd>
</dl>
<p><input type="submit" value="入力確認へ"></p>
</form>
入力確認画面のHTML部分を作成する。
h1要素の下に、入力内容を表示する為のHTMLを部分を記述
<dl>
<dt>お名前</dt>
<dd>
</dd>
<dt>メールアドレス</dt>
<dd>
</dd>
<dt>お問い合わせ内容</dt>
<dd>
</dd>
</dl>
<ul>
<li><a href="./">入力フォームへ</a></li>
<li><a href="send.php">送信</a></li>
</ul>
送信に成功した後に表示するページを作成する。
h1要素の下に、送信完了ページのHTMLを記述
<p>送信完了しました。</p>
<p><a href="./">入力フォームに戻る</a></p>
送信に失敗した後に表示するページを作成する。
h1要素の下に、送信エラーページのHTMLを記述
<p>送信に失敗しました。</p>
<p><a href="./">入力フォームに戻る</a></p>
ユーザーから受け取ったデータをチェックし、セッションに格納する、
エラーがなければ入力確認画面にリダイレクトし、エラーがあれば入力フォームにリダイレクトする。
<?php
// セッションの開始
session_start();
$_POSTが空じゃないかを確認する<?php
// セッションの開始
session_start();
// ユーザーの送信内容が空だったらリダイレクト
if ( empty($_POST) ) {
header('Location: ./');
exit();
}
$_SESSIONにエラーメッセージを格納するための配列を作成し、<?php
// セッションの開始
session_start();
// ユーザーの送信内容が空だったらリダイレクト
if ( empty($_POST) ) {
header('Location: ./');
exit();
}
// エラーメッセージ格納用の配列を初期化
$_SESSION['error'] = array();
// お名前の入力チェック
if ( $_POST['name'] == '' ) {
$_SESSION['error']['name'] = 'お名前を入力して下さい。';
}
// メールアドレスの入力チェック
if ( !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
$_SESSION['error']['email'] = 'メールアドレスの形式が正しくありません。';
}
if ( $_POST['email'] == '' ) {
$_SESSION['error']['email'] = 'メールアドレスを入力して下さい。';
}
// お問い合わせ内容の入力チェック
if ( $_POST['message'] == '' ) {
$_SESSION['error']['message'] = 'お問い合わせ内容を入力して下さい。';
}
$_SESSION['post']に格納
<?php
// セッションの開始
session_start();
// ユーザーの送信内容が空だったらリダイレクト
if ( empty($_POST) ) {
header('Location: ./');
exit();
}
// エラーメッセージ格納用の配列を初期化
$_SESSION['error'] = array();
// お名前の入力チェック
if ( $_POST['name'] == '' ) {
$_SESSION['error']['name'] = 'お名前を入力して下さい。';
}
// メールアドレスの入力チェック
if ( !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
$_SESSION['error']['email'] = 'メールアドレスの形式が正しくありません。';
}
if ( $_POST['email'] == '' ) {
$_SESSION['error']['email'] = 'メールアドレスを入力して下さい。';
}
// お問い合わせ内容の入力チェック
if ( $_POST['message'] == '' ) {
$_SESSION['error']['message'] = 'お問い合わせ内容を入力して下さい。';
}
// セッションにユーザーの送信内容を格納
$_SESSION['post'] = $_POST;
$_SESSION['error']にエラーメッセージがあるかを確認し、<?php
// セッションの開始
session_start();
// ユーザーの送信内容が空だったらリダイレクト
if ( empty($_POST) ) {
header('Location: ./');
exit();
}
// エラーメッセージ格納用の配列を初期化
$_SESSION['error'] = array();
// お名前の入力チェック
if ( $_POST['name'] == '' ) {
$_SESSION['error']['name'] = 'お名前を入力して下さい。';
}
// メールアドレスの入力チェック
if ( !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ) {
$_SESSION['error']['email'] = 'メールアドレスの形式が正しくありません。';
}
if ( $_POST['email'] == '' ) {
$_SESSION['error']['email'] = 'メールアドレスを入力して下さい。';
}
// お問い合わせ内容の入力チェック
if ( $_POST['message'] == '' ) {
$_SESSION['error']['message'] = 'お問い合わせ内容を入力して下さい。';
}
// セッションにユーザーの送信内容を格納
$_SESSION['post'] = $_POST;
// エラーメッセージ格納用の配列が空かチェック
if ( empty($_SESSION['error']) ) {
// エラーなし
header('Location: conf.php');
} else {
// エラーあり
header('Location: ./');
}
exit();
メールフォームにはサーバーサイドプログラミングの基本が詰まってる。