デジットさんの生活便利サイトトップへ デジットさんの汎用メールフォーム(PHP)

トップページ > ホームページ作成 > 汎用メールフォーム

SmartyでQuickFormその2」で紹介したメールフォームを、更に使い勝手が良いように汎用的に使えるようにしました。URLエンコードしたクエリー文字列を利用し、QuickFormとSmartyを使っています。

汎用フォームにする方法

フォームの種類などを変数にし、その値をURLの引数で渡すことで汎用フォームになります。今回は、SmartyでQuickFormその2メール送信で紹介したリストに少し手を加えるだけで、汎用フォームを作りました。汎用にした部分はメールフォームにお問い合わせフォームを呼んだデータを表示し、お問い合わせフォームから送られるメールのタイトルにも送り元のデータを付け加えました。 方法は、次の通りです。

  1. 汎用フォームを呼ぶHTMLから、引数「id=digit-01」「name=デジットさん」をつけて実行ファイルを呼ぶ
  2. テンプレートファイルで「name=デジットさん」を表示する
  3. 「id=digit-01」と「name=デジットさん」のデータは、「hidden」で受け渡しする
  4. メール送信時にタイトルに【$id】を追加する

汎用フォームを呼ぶHTML

Javaスクリプトのdsp_browse()関数に、引数として「id=digit-01」と「name=デジットさん」を加えます。引数は、クエリー文字列といい「 ?引数1=値&引数2=値 」という形で引き渡します。引数は、URLエンコードする必要があります。「-」「_」「.」を除くすべての非英数文字が 「%」 記号 (%)に続く二桁の数字で置き換えられ、 空白は 「+」 記号(+)にエンコードされます。日本語の全角文字については、デフォルトでは、文字コード体系としてUTF-8が使用されます。「デジットさん」はUTF-8で指定する必要があり、「デジットさん」をURLエンコードすると「%e3%83%87%e3%82%b8%e3%83%83%e3%83%88%e3%81%95%e3%82%93」となります。Googleなどで検索し、検索結果のURLアドレスをチェックすれば取得することが出来ます。
ここでは、PHPのURLエンコード関数urlencode()を使用し、自分でURLエンコードしました。

・・
//ツールバーの無いブラウザ表示
function dsp_browse(){ //ブラウザ表示
urladd = "../test/smpl_mail_index.php?id=digit-01&name=";
urladd += "<?php echo urlencode("デジットさん"); ?>";
newWin = window.open( urladd,"","width=640,height=400,resizable=yes ");
}
・・
</head>
<body>
・・
<a href = "javascript:dsp_browse()">メールフォーム</a>
・・

クラスファイルの例

引数をSmartyのフォームのデフォルト値に設定するため、「setDefaults()」を利用した「DefSet()」関数を新たに定義しました。また、フォームが「送信」釦で推移する時のデータ受け渡しのため 「addElement("hidden","**","")」で「id」と「name」を表示せず隠して受け渡たせる様にします。

<?php
・・
//デフォルト値設定
function DefSet($id,$name){
$this -> _form -> setDefaults(array('id' => $id));
$this -> _form -> setDefaults(array('name' => $name));
}
・・
//フォーム要素・入力チェックの定義
function checForm(){
・・
$this -> _form -> addElement("hidden","id","");
$this -> _form -> addElement("hidden","name","");
}
・・
?>

Smartyのテンプレートファイルの例

「hidden」で指定した、「id」と「name」は、「<form> </form>」の中に{$form.id.html}{$form.name.html}と置くことで、データを引き継ぐことが出来ます。ただし、「hidden」のデータを引き継ぐためには、<form {$form.attributes}>のように、{$form.hidden}も記載する必要があります。
「<form> </form>」にデータを表示したい場合は、「{$name}」の様に指定しますが、次に説明する実行ファイルで「$smarty -> assign("name",$name);」と別にデータを受け渡す必要があります。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>お問い合わせフォームサンプル({$name})</title>
</head>
<body>

<p> {$name}のお問い合わせフォーム </p>
<!-- QuickFormで設定したform属性を変数にセットしてassign -->
<form {$form.attributes}>
{$form.hidden}<!-- hiddenのデータも引き渡す -->
<div>
・・
</table>
</div>
{$form.id.html}{$form.name.html} <!-- Formデータ受け渡しに必要 -->
</form>
<!-- 送信確認コメント -->
<p>
{$value}
</p>
</body>
</html>

Smartyのデザインを使ったQuickFormの実行ファイルの例

「isset($_GET['id'])」と「isset($_GET['name'])」で引数の「id=digit-01」と「name=デジットさん」を受け取り、フォームの初期値として「DefSet($id,$name)」でセットします。
送信メールに【digit-01】と表示するように、「mail_submit()」の引数に「$sbjct」を追加しました。

<?php
//QuickFormで定義したclassファイルの読み込み
require_once "./Qfrm_mail.php";

require_once "/usr/local/lib/php/Smarty/Smarty.class.php";
require_once "HTML/QuickForm.php";
require_once "HTML/QuickForm/Renderer/ArraySmarty.php";

//submit釦のaction先(自分のファイル)指定
$qfrmindex = new QfrmSmpl("smpl_mail_index.php");

//設定
define("MAIL_TO","*********@**.**.**"); //送信先メールアドレス

//このphpが最初に呼ばれた時$idと$nameに受け取ったURL引数をセット
if(isset($_GET['id']) and isset($_GET['name'])) {
$id = $_GET['id'];
$name = $_GET['name'];
$qfrmindex -> DefSet($id,$name); //引数セット
}

//フォームの定義・チェック
$qfrmindex -> setForm(); //要素とチェックの定義
$qfrmindex -> checForm(); //入力チェック
・・
・・
//最終画面の場合 釦表示なし
}elseif(isset($_POST["BTNG"]["SBMT_CNF"])){
$qfrmindex -> freezeFrm(); //要素をフリーズ
// 入力結果を$valsに格納
$vals = $qfrmindex -> getVals();
$com = mail_submit($vals,$id); //メール送信
・・
・・
// renderer for Smarty templates の取得
$renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
$qfrmindex->_form->accept($renderer);
$smarty->assign('form', $renderer->toArray());
$smarty -> assign("name",$name);
$smarty -> assign("value",$com);

// 表示
$tmp_name = "smpl_mail.tpl";
$smarty->display($tmp_name);

//メール送信 関数
function mail_submit($t_name,$sbjct){
mb_language('ja');//e-mailメッセージを"ja"にエンコー ディング
mb_internal_encoding("UTF-8");//内部文字エンコーディングは"UTF-8"
$m_name = $t_name["txtName"]; //差出人
$m_to = MAIL_TO; //あて先
$m_subject ="【" .$sbjct. "】".$t_name["txtTitle"] ;//タイトル
$m_from = $t_name["txtEmail"]; //送信者
$m_comm = $t_name["txtrComment"]; //コメント
//内容の前に名前やメールアドレスを追加
$mail_temp = "名前      :";
$mail_temp .= $m_name;
$mail_temp .= "\nメールアドレス:";
$mail_temp .= $m_from;
$mail_temp .= "\nタイトル   :";
$mail_temp .= $m_subject;
$mail_temp .= "\n内容     :";
$mail_temp .= $m_comm;
$mail_temp = wordwrap($mail_temp, 70); //1行70文字以上対策
$rc = mb_send_mail($m_to,$m_subject,$mail_temp,"From:$m_from");
if ($rc){
$com = "入力ありがとうございました。<br/><br/><input type=\"button\" value=\"閉じる\" onclick=\"self.close()\"> "; //ウィンドウを「閉じる釦」も追加
}else{
$com = "メールが送信できませんでした。";
}
return $com;
}
?>

汎用送信画面

汎用メールフォーム

今回のメールフォームです。「name=デジットさん」で指定したデータが表示されています。ウインドウのタイトル部も「デジットさん」の表示が出来ました。これで、複数のホームページから使うことができる汎用のメールフォームになりました。

メール受信画面

汎用メール受診画面

汎用のメール受信フォームです。「id=digit-01」で指定したデータが、タイトルに【】付で加えられています。
レンタルサーバーの「ロリポップ」では、動作確認しております。

ホームページを公開するレンタルサーバーは、 ロリポップ! がお薦め、 PHP5を使うならPHP5から選ぼう。

関連ページ

ホームページ作成

PHP5を使う

アフィリエイトをする

PHPの使い方

デジットさんのホームページ入門に移行中

スポンサード リンク

Amazon.co.jpアソシエイト:
PHP&プログラミング

売れている順 新刊順

:%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20php :php2_  :10

とことん!ホームページホームページ入門役立つサイトデジットさんのリストラ日記仮福真琴の精神科医はうそだらけ

2005-2010 Copyright © Digit-01 All Rights Reserved.