- 締切済み
メール送信されたurlを取得したい
HTML_QuickFormを使ってフォームをつくる予定なのですが どこのページから送信されたのかを取得したいと思っているのですが どのような方法がありますでしょうか? 具体的には http://example.com/sample1.htmlと http://example.com/sample2.htmlと http://example.com/sample3.htmlに フォームがありどこのページから送信されたかを取得したいと いうことです。 また、postでメール送信するのですがメール送信時に取得した urlを表示させる場合どのようにすればいいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mookun2007
- ベストアンサー率59% (28/47)
え~と、例えばQuickFormを利用するphpをform.phpとした場合 フォームを表示させるアクセス先はform.phpではないのでしょうか? サイト構成がいまいち分かりませんが 例として form.php <?php require 'HTML/QuickForm.php'; require 'HTML/QuickForm/Renderer/ArraySmarty.php'; require 'Smarty/Smarty.class.php'; $form = new HTML_QuickForm('form1', 'post'); $form->addElement('hidden', 'page', '名前1'); $form->addElement('text', 'name'); $smarty = new Smarty(); $renderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty); $form->accept($renderer); $smarty->assign('form', $renderer->toArray()); print $smarty->render('sample1.html'); sample1.html <html> <head></head> <body> <form {$form.attributes}> {$form.hidden} {$form.name.html} </form> </body> </html> などとすることで、QuickFormとSmartyを連携させることができます。 詳しくは「HTML_QuickForm Smarty 連携」などでGoogle検索してください。 あと、テンプレートは何も.tplに拘る必要もありませんし、動的に読み込むテンプレートを変更することもできます。 そうすればもっとシンプルにできるかと思いますが。 質問の意図と異なってしまったかもしれませんが、お力になれれば幸いです。 また何かあれば時間のある時にお答えさせて頂きます。 でわ。
- mookun2007
- ベストアンサー率59% (28/47)
QuickFormでのhiddenの生成方法は下のようなやり方になるはずですが $form = new HTML_QuickForm('form1', 'post'); $form->addElement('hidden', 'page', '名前1'); このフォームデータをPOSTした先で print $_POST['page']; とやれば、名前1が取得できます。 > また以下のように複数のページの名前を取得したいので動的にpageのvalueを > 切り替えることができればいいのですがそのようなことは可能でしょうか? > http://example.com/sample1.html→名前1 > http://example.com/sample2.html→名前2 > http://example.com/sample3.html→名前3 それぞれのページでname="page"のhiddenをセットし、value値を変更すればよいだけです。 ちなみに上のsample1.htmlなどはapacheのWebサーバーの設定などでhtmlをphpとして読み込むようにしているのでしょうか? htmlではQuickFormは扱えませんが・・
お礼
お返事ありがとうございます。 サイト構成の詳細はsmartyを使っています。 通常tplファイルを読み込むのですがどうしてもhtml(またはphp)にしたい箇所があり おおもとのtplから部分的にhtmlファイルを読み込みしています。 読み込まれるhtmlにさらにQuickFormのphpを読み込むというちょっと複雑な感じです。 .htaccessで制御しておりメール送信までは完了しているので動作には問題ありません。 QuickFormのphpを読み込むとhtmlの出力は<form...>~</form>まで 読み込まれるのでhtmlに<input hidden...>を入れてもform要素内でないと意味がなく どうしたらいいものか悩んでおりました。 頻繁に編集するのはhtmlなのでできればhtmlに<input hidden...>を 設定できれば楽なのですが・・・ 実際にページの名前を取得したい数は30ページくらいありQuickFormのphpはできれば1つで済ませたいのですがなにかいい方法はありますでしょうか?
- mookun2007
- ベストアンサー率59% (28/47)
POSTされた先のメール送信処理を行うPHP側で取得したいということで宜しかったでしょうか? その場合は、環境変数($_SERVER['HTTP_REFERER'])で取得できます。 但し、この値は完全に信用できる値ではないので、フォームにhiddenで個別の値を仕込んでおくのがベストかと思います。
お礼
お返事ありがとうございます。 早速環境変数という方法を試してみたところ うまくurlを取得できました^^ >この値は完全に信用できる値ではないので、フォームにhiddenで個別の値を仕込んでおくのがベストかと思います。 あまりよくわからなかったのですが phpに $form->addElement('header', formheader5, '<input type="hidden" name="page" value="名前1" />'); としsmartyと連携してるのでtplに {$form.header.formheader5} とし出力しhtmlで見ると <input type="hidden" name="page" value="名前1" /> と出力されるのを確認し phpのメール本文組み立ての箇所に {$value['page']} hidden要素は出てこないのですがどこかおかしい箇所がありますでしょうか? また以下のように複数のページの名前を取得したいので動的にpageのvalueを 切り替えることができればいいのですがそのようなことは可能でしょうか? http://example.com/sample1.html→名前1 http://example.com/sample2.html→名前2 http://example.com/sample3.html→名前3
補足
キャッシュが邪魔していたようで <input type="hidden" name="page" value="名前1" /> で表示されるようになりました。 しかし動的に変更する方法がいまいちわからないので 引き続きアドバイスなど頂けますと幸いです。
お礼
度々もうしわけありません^^; まだ触り始めたばかりなもので無駄に複雑な箇所もあるかと思うのですが 以下のような感じです。 aaa.php require_once 'Smarty/Smarty.class.php'; $smarty = new Smarty; $smarty->display('pages/aaa1.tpl'); pages/aaa1.tpl←表示するページの組み立て {include file="common/body_top.tpl"} {include file="common/header.tpl"} {include file="main/sample1.html"}←htmlファイルの読込み ・・・ main/sample1.html←コンテンツ表示+QuickForm読込み <div>...</div> <div> {include_php file="contact.php"}←QuickFormファイルの読込み </div> <div>...</div> contact.php←QuickFormファイル ・・・省略 $smarty->display('contact/form.tpl'); main/sample1.html~main/sample30.htmlまであるのですが、 フォームはcontact.phpの1つで済ませたく できればhtml側に直接hidden要素をつけたいのですが どのようにすればいいでしょうか? contact.phpに以下のようにやると確かにhiddenは取得できるのですが 全てのhtmlで全て同じ値を取得してしまうので困っております。 $form->addElement('hidden', 'page', '名前1');