プロが教えるわが家の防犯対策術!

HTML_QuickFormを使ってフォームをつくる予定なのですが
どこのページから送信されたのかを取得したいと思っているのですが
どのような方法がありますでしょうか?

具体的には
http://example.com/sample1.html
http://example.com/sample2.html
http://example.com/sample3.html
フォームがありどこのページから送信されたかを取得したいと
いうことです。

また、postでメール送信するのですがメール送信時に取得した
urlを表示させる場合どのようにすればいいのでしょうか?

A 回答 (3件)

え~と、例えば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に拘る必要もありませんし、動的に読み込むテンプレートを変更することもできます。
そうすればもっとシンプルにできるかと思いますが。

質問の意図と異なってしまったかもしれませんが、お力になれれば幸いです。
また何かあれば時間のある時にお答えさせて頂きます。
でわ。
    • good
    • 0
この回答へのお礼

度々もうしわけありません^^;
まだ触り始めたばかりなもので無駄に複雑な箇所もあるかと思うのですが
以下のような感じです。

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');

お礼日時:2008/01/09 22:12

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は扱えませんが・・
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

サイト構成の詳細は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つで済ませたいのですがなにかいい方法はありますでしょうか?

お礼日時:2008/01/09 20:22

POSTされた先のメール送信処理を行うPHP側で取得したいということで宜しかったでしょうか?



その場合は、環境変数($_SERVER['HTTP_REFERER'])で取得できます。
但し、この値は完全に信用できる値ではないので、フォームにhiddenで個別の値を仕込んでおくのがベストかと思います。

この回答への補足

キャッシュが邪魔していたようで
<input type="hidden" name="page" value="名前1" />
で表示されるようになりました。

しかし動的に変更する方法がいまいちわからないので
引き続きアドバイスなど頂けますと幸いです。

補足日時:2008/01/09 18:23
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
早速環境変数という方法を試してみたところ
うまく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

お礼日時:2008/01/09 16:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!