2010-07-02 8 views
22

Estoy tratando de agregar algunas variables GET diferentes a la url.¿Cómo puedo agregar variables GET al final de la url actual en php?

Podría hacer fácilmente un encabezado redirigir a la URL de la página actual y luego simplemente agregar $ _GET ['test'] en la url.

Mi problema es que tengo algunas variables GET que ya están en la url. Lo que quiero hacer es:

  • Comprobar si hay cualquier variable GET en la URL

    • Si no es así, a continuación, redirigir a la URL actual con el nuevo GET [' test '] variable al final de la url.

    • Si lo hay, pero no hay una variable GET ['test'] en la url, guarde esos otros valores GET en la url y agregue la variable GET ['test'] al final de la cadena de url completa

    • Si lo hay, Y hay una variable GET ['test'] en la url, entonces guarde esos otros valores GET en la url e intercambie el valor de la variable GET ['test'] con el nuevo valor.

¿Cómo puedo ir sobre la comprobación de todas estas condiciones?

Respuesta

33

La forma más sencilla de que es:

$params = array_merge($_GET, array("test" => "testvalue")); 
$new_query_string = http_build_query($params); 

Esto no garantiza que test habrá al final. Si por alguna extraña razón que necesita de eso, sólo puede hacer:

$params = $_GET; 
unset($params["test"]); 
$params["test"] = "testvalue"; 
$new_query_string = http_build_query($params); 

Tenga en cuenta, sin embargo, que consulta PHP parámetro de cadena de análisis puede tener algunos problemas de interoperabilidad con otras aplicaciones. En particular, PHP no acepta valores múltiples para ningún parámetro a menos que tenga un nombre similar a un array.

a continuación, puedes adelante a

(empty($_SERVER['HTTPS'])?"http://":"https://") . 
    (empty($_SERVER['HTTP_HOST'])?$defaultHost:$_SERVER['HTTP_HOST']) . 
    $_SERVER['REQUEST_URI'] . "?" . $new_query_string 
+3

Creo que este será el doble arriba en el GET vars. Si la URL es actualmente 'domain.com/page.php? Var = 1', el resultado final del código" Luego puede reenviarse a "es' domain.com/page.php?var=1?var=1&test= testvalue'. – MarcGuay

+0

reemplace REQUEST_URI con PHP_SELF – bleuscyther

+0

¿por qué necesita: unset ($ params ["test"]); ¿no es reemplazado por la declaración: $ params ["test"] = "testvalue"; –

0

..

$newval = 'whatever'; 
if(!count($_GET)) { 
header('Location: ?test=' . $newval); 
exit; 
} 
if(!isset($_GET['test'])) { 
$_SERVER['REQUEST_URI'] .= '&test='.$newval; 
} 
$_GET['test'] = $newval; 
+0

Ya sabes, se considera una buena práctica acompañar a tus candidatos con comentarios, de lo contrario la respuesta no se puede mejorar y el voto a la baja no sirve para nada; la excepción es cuando la respuesta es claramente incendiaria. Esto es especialmente cierto si está bajando una respuesta alternativa a la suya; parece ser egoísta de lo contrario. En cuanto a su respuesta en sí, creo que está tomando las especificaciones del PO demasiado literalmente, pero solo él puede decir eso. Además, es una buena práctica alterar '$ GET' (o' $ _SERVER'). – Artefacto

+0

Quiero decir que no es una buena práctica (las ventanas de edición se han cerrado). – Artefacto

+0

np, voté ahora que se ha expandido, iba a comentar antes, pero se retiró de la PC antes de que yo pudiera hacerlo;) – nathan

1
function request_URI() { 

    if(!isset($_SERVER['REQUEST_URI'])) { 
     $_SERVER['REQUEST_URI'] = $_SERVER['SCRIPT_NAME']; 
     if($_SERVER['QUERY_STRING']) { 
      $_SERVER['REQUEST_URI'] .= '?' . $_SERVER['QUERY_STRING']; 
     } 
    } 
    return $_SERVER['REQUEST_URI']; 
} 

$_SERVER['REQUEST_URI'] = request_URI(); 

Cortesía: http://php.net/manual/en/reserved.variables.server.php por ejemplo LOL

Esto le dará la dirección URL con respecto a la raíz junto con los parámetros GET.

En caso de que lo desee con respecto al directorio actual, agregue lo siguiente.

$current_url = explode("/", $_SERVER['REQUEST_URI']); 

$current_url = $current_url[end(array_keys($current_url))]; 
1

Puede que sólo sea Joomla razones, pero me da el mismo valor mediante el uso de:

$ CURRENTURL = $ _SERVER [ 'REQUEST_URI'];

mucho menos código.

7

Creé esta sencilla función PHP basada en Respuesta de Artefacto.

function addOrUpdateUrlParam($name, $value) 
{ 
    $params = $_GET; 
    unset($params[$name]); 
    $params[$name] = $value; 
    return basename($_SERVER['PHP_SELF']).'?'.http_build_query($params); 
} 
  • Se actualiza el valor si va a cambiar un parámetro existente.
  • suma si se trata de un valor nuevo
Cuestiones relacionadas