2012-02-01 18 views
5

Come una continuazione di Adding Values to a Query String in a URL, ho una casella di ricerca che aggiungerà ulteriori argomenti all'URL corrente.Passa l'URL corrente sul modulo invia

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

codice La forma è simile al seguente:

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

Dove search_result.php è solo una nuova pagina che ho creato per analizzare il presentare e reindirizzare utilizzando il nuovo URL.

Come posso passare l'URL originale a search_result.php in modo da poter quindi modificare l'URL?

EDIT # 1: ho aggiunto un input nascosto:

<?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" /> 

La mia uscita è l'aggiunta di solo gli argomenti alla pagina di presentazione (search_result.php) e non la pagina di ricerca previsto.

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

Sto sbagliando o sbagliando o entrambi!

EDIT # 2: URL stampa ricorda:

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 ho fatto eco l'URL di uscita ed è corretto. Mi sono sbarazzato del preg_match solo per vedere se potevo ottenere lo stesso URL quando ho elaborato il modulo. È interessante notare che ho trovato una pagina non trovata. Ho deciso di aggiungere http: // l'intestazione e ha funzionato:

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

Così dunque, io credo che l'unica cosa sbagliata qui è la preg_replace.

+0

Sembra che tu debba fare value = "". Puoi anche usare $ _SERVER ['HTTP_REFERER'] come dfsq suggerisce come alternativa a questo metodo, ma non è sempre affidabile. –

+0

non ha funzionato:/ – AlxVallejo

+0

Hai ottenuto qualche valore nella variabile $ posizione? –

risposta

8

Penso che stiate cercando l'input nascosto.

Qualcosa di simile a questo:

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

Poi accedervi proprio come si farebbe con qualsiasi altro parametro $ _GET o $ _POST.


EDIT per rispondere alle modifiche:

Potresti echo $location; die; dopo questa riga:

$location = $_GET['current_url']; 

e fatemi sapere cosa l'uscita è? Questo ci dirà se è stato trasmesso in modo errato o elaborato in modo errato.

+0

vedere il mio URL di output – AlxVallejo

+0

Modificata la mia risposta per la risoluzione dei problemi. –

+0

Vedere EDIT # 3 (mi scuso per tutte le modifiche!) – AlxVallejo

1

Basta usare $_SERVER['HTTP_REFERER'] nel search_result.php. Un'altra opzione è usare l'input nascosto, ma vorrei andare con il primo.

+0

Non sono d'accordo, il riferimento potrebbe non essere stabile su alcuni ambienti. Se è un piccolo sforzo usare un input nascosto, usa invece quel metodo. –

0

Il modo migliore per ottenere l'URl corrente è creare un input nascosto e in questo si passa l'URL corrente e si cattura nel server. cioè

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