2012-02-01 10 views
5

Adding Values to a Query String in a URLの続きとして、現在のURLに追加の引数を追加する検索ボックスがあります。フォーム提出時に現在のURLを渡す

http://example.com/?s=original+new+arguments&fq=category 

フォームコードは次のようになります。search_result.phpは、私が提出し、新しいURLを使用してリダイレクト解析するために作成されたばかりの新しいページです

<form id="FilterSearch" method="get" action="http://example.com/search_result.php"> 

URLを操作できるように元のURLをsearch_result.phpに渡すにはどうすればよいですか?

EDIT#1:私は隠された入力を追加しました:

<?php $current_url = $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?> 
<input type="hidden" name="current_url" value="<?php $current_url; ?>" /> 
<input name="send" id="send" type="submit" value="Search" /> 

私の出力は、唯一の提出ページ(search_result.php)と意図しない問い合わせページに引数を追加しています。

<?php 
if (isset($_GET['send'])){ 
       $searchField = urlencode($_GET['SearchField']); 
       $location = $_GET['current_url']; 
       $location = preg_replace($location, '/([?&]s=)([^&]+)/', '$1$2+'.$searchField); 
       header('Location: '.$location); 
       } 
?> 

私はそれらを間違って渡しているか、間違っているか、あるいはその両方になっています。

EDIT#2:出力URLのようです:

http://example.com/wp-content/themes/child_theme/search_result.php?SearchField=newTerm&current_url=www.example.com%2F%3Fs%3DoldTerm%26searchsubmit%3D&send=Search 

EDIT#3 私は出力URLをエコーし​​、それが正しいのです。 preg_matchを取り除いて、フォームを処理したときに同じURLを取得できるかどうかを確認しました。興味深いことに、私はページが見つかりません。 //ヘッダとそれが働いた:私はのhttpを追加することにしました

header('Location: http://'.$location); 

したがって、私は間違ってここでの唯一の事はにpreg_replaceであると信じています。

+0

value = "<?php echo $ current_url;?>"とする必要があるようです。この方法の代わりにdfsqが提案するような$ _SERVER ['HTTP_REFERER']を使うこともできますが、必ずしも信頼できるとは限りません。 –

+0

どちらも機能しませんでした:/ – AlxVallejo

+0

$ location変数に値がありますか? –

答えて

8

あなたは隠された入力を探していると思います。このような

何か:

<input type="hidden" name="current_url" value="(Current URL here)" /> 

それからちょうどあなたが他の$ _GETや$ _POSTパラメータだろうと同じようにアクセスします。編集に対応するための


EDIT:

はあなたのこの行の後にecho $location; die;できます

$location = $_GET['current_url']; 

と私は出力が何であるかを知っていますか?これは、間違って渡されたのか誤って処理されたのかを教えてくれます。

+0

出力URLを参照 – AlxVallejo

+0

トラブルシューティングのために私の答えを編集しました。 –

+0

EDIT#3を参照してください(私はすべての編集をお詫び申し上げます!) – AlxVallejo

1

search_result.php$_SERVER['HTTP_REFERER']をちょうど使用してください。もう一つの選択肢は隠れた入力を使うことですが、最初のものと一緒に行きます。

+0

私は、一部の環境ではrefererが安定していない可能性があります。隠された入力を使用するのが些細な場合は、代わりにその方法を使用してください。 –

0

現在のURlを取得するには、非表示の入力を作成し、現在のURLを渡してサーバーの最後にキャッチするのが良い方法です。すなわち、

<input type="hidden" name="cur_url" value="(your Current URL here)" /> 
関連する問題