2012-02-01 11 views
5

Como una continuación de Adding Values to a Query String in a URL, tengo un cuadro de búsqueda que agregará argumentos adicionales a la URL actual.Pasar la URL actual en el formulario enviar

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

código La forma se parece a esto:

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

Dónde search_result.php es sólo una nueva página que he creado para analizar el enviar y reorientar el uso de la nueva URL.

¿Cómo puedo pasar la URL original a search_result.php para poder manipular la URL?

editar # 1: He añadido un campo oculto:

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

Mi única salida es la adición de los argumentos de la página de presentación (search_result.php) y no la página de consulta 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); 
       } 
?> 

estoy bien pasarlos mal o para que hagan mal o ambos!

editar # 2: URL de salida es como:

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 

editar # 3 que se hizo eco de la URL de salida y es correcta. Me deshice de la preg_match solo para ver si podía obtener la misma URL cuando procesé el formulario. Curiosamente, recibí una página no encontrada. He decidido añadir http: // la cabecera y funcionó:

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

Así que, por lo tanto, creo que la única cosa mal aquí es el preg_replace.

+0

Parece que tiene que hacer value = "". También podría usar $ _SERVER ['HTTP_REFERER'] como dfsq sugiere como alternativa a este método, pero no siempre es confiable. –

+0

tampoco funcionó:/ – AlxVallejo

+0

¿Obtiene algún valor en su variable de $ location? –

Respuesta

8

Creo que está buscando la entrada oculta.

Algo como esto:

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

luego acceder a ella al igual que lo haría con cualquier otro parámetro $ _GET o $ _POST.


EDIT para responder a las ediciones:

Podría usted echo $location; die; después de esta línea:

$location = $_GET['current_url']; 

y quiero saber lo que es la salida? Esto nos dirá si se está transfiriendo incorrectamente o procesándose incorrectamente.

+0

ver mi URL de salida – AlxVallejo

+0

Edité mi respuesta para solucionar problemas. –

+0

Consulte EDIT # 3 (¡me disculpo por todas las ediciones!) – AlxVallejo

1

Simplemente use $_SERVER['HTTP_REFERER'] en su search_result.php. Otra opción es usar una entrada oculta, pero yo elegiría la primera.

+0

No estoy de acuerdo, el referer puede no ser tan estable en algunos entornos. Si es un pequeño esfuerzo utilizar una entrada oculta, use ese método en su lugar. –

0

La mejor manera de obtener el UR actual crea una entrada oculta y en la que pasa la URL actual y atrapa al final del servidor. es decir

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