¿Cómo puedo agregar variables GET al final de la URL actual en php?

5 minutos de lectura

Estoy tratando de agregar algunas variables GET diferentes a la URL.

Fácilmente podría hacer una redirección de encabezado 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:

  • Compruebe si hay variables GET en la URL

    • Si no lo hay, redirija a la URL actual con el nuevo GET[‘test’] variable al final de la url.

    • Si hay, pero no hay GET[‘test’] variable en la url, luego mantenga esos otros valores GET en la url y agregue el GET[‘test’] variable hasta el final de la cadena de URL completa

    • Si hay, Y hay un GET[‘test’] variable en la url, luego mantenga esos otros valores GET en la url e intercambie el GET[‘test’] valor de la variable con el nuevo valor.

¿Cómo puedo hacer para verificar todas estas condiciones?

avatar de usuario
Artefacto

La forma simple de hacerlo es:

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

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

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

Tenga en cuenta, sin embargo, que el análisis de parámetros de cadena de consulta de PHP 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 una matriz.

Entonces puedes simplemente reenviar a

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

  • Creo que esto se duplicará en los GET vars. Si la URL es actualmente domain.com/page.php?var=1 el resultado final del código “Entonces puede reenviar a” es domain.com/page.php?var=1?var=1&test=testvalue.

    – Marc Guay

    22 de enero de 2013 a las 15:59

  • reemplace SOLICITUD_URI con PHP_SELF

    –Jeffrey Nicholson Carré

    20 de noviembre de 2013 a las 2:45

  • por qué necesita: unset ($ params[“test”]); ¿No se reemplaza por la declaración: $params[“test”] = “valor de prueba”;

    – rayo s.

    18 de febrero de 2014 a las 8:59

  • Verifique mi respuesta a continuación. Funciona a las mil maravillas. No se duplican GET var. Función sencilla 😉

    – M_R_K

    21 de febrero de 2015 a las 12:49

  • Revisa mi respuesta a continuación. Creé una función simple basada en esta respuesta.

    – M_R_K

    26 de abril de 2015 a las 12:19

Creé esta función simple de PHP basada en ArtefactoRespuesta de .

function addOrUpdateUrlParam($name, $value)
{
    $params = $_GET;
    unset($params[$name]);
    $params[$name] = $value;
    return basename($_SERVER['PHP_SELF']).'?'.http_build_query($params);
}
  • Actualiza el valor si está cambiando un parámetro existente.
  • Se suma si es un valor nuevo

avatar de usuario
N / A

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/reservado.variables.server.php ejemplo de LOL

Esto le dará la 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("https://stackoverflow.com/", $_SERVER['REQUEST_URI']);

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

Puede que solo sean razones de Joomla, pero obtengo el mismo valor al usar:

$url actual = $_SERVIDOR[‘REQUEST_URI’] ;

mucho menos código.

..

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

  • Ya sabes, se considera una buena práctica acompañar tus votos negativos con comentarios, de lo contrario, la respuesta no se puede mejorar y el voto negativo no tiene ningún propósito, con la excepción de cuando la respuesta es claramente incendiaria. Esto es especialmente cierto si estás rechazando una respuesta alternativa a la tuya; de lo contrario, parece egoísta. En cuanto a su respuesta en sí, creo que está tomando las especificaciones del OP demasiado literalmente, pero solo él puede decirlo. Además, es una buena práctica modificar $GET (o $_SERVER).

    – Artefacto

    2 de julio de 2010 a las 2:56


  • Quiero decir que no es una buena práctica (la ventana de edición se ha cerrado).

    – Artefacto

    2 de julio de 2010 a las 3:29

  • np, voté ahora que se ha expandido, iba a comentar antes, pero se alejó de la PC antes de que pudiera por los niños;)

    – nathan

    2 de julio de 2010 a las 4:01

Escribí esto porque, a diferencia de la otra solución, no expone los parámetros GET ocultos de las reescrituras de htaccess. Sin embargo, no actualiza el parámetro existente.

 function addUrlParam($name, $value)
{
  $url = $_SERVER['REQUEST_URI'];
  $val =  $name . '=' . urlencode($value);
  if (strpos($url, '?') !== false) {
    $url .= '&' . $val;
  } else {
    $url .= '?' . $val;
  }
  return $url;
}

  • Ya sabes, se considera una buena práctica acompañar tus votos negativos con comentarios, de lo contrario, la respuesta no se puede mejorar y el voto negativo no tiene ningún propósito, con la excepción de cuando la respuesta es claramente incendiaria. Esto es especialmente cierto si estás rechazando una respuesta alternativa a la tuya; de lo contrario, parece egoísta. En cuanto a su respuesta en sí, creo que está tomando las especificaciones del OP demasiado literalmente, pero solo él puede decir eso. Además, es una buena práctica modificar $GET (o $_SERVER).

    – Artefacto

    2 de julio de 2010 a las 2:56


  • Quiero decir que no es una buena práctica (la ventana de edición se ha cerrado).

    – Artefacto

    2 de julio de 2010 a las 3:29

  • np, voté ahora que se ha expandido, iba a comentar antes, pero se alejó de la PC antes de que pudiera por los niños;)

    – nathan

    2 de julio de 2010 a las 4:01

avatar de usuario
Amaynuez

Aquí está la forma más sencilla de hacerlo.

function buildUrl($name, $value)
 {
    $_GET[$name] = $value;
    return $_SERVER['SCRIPT_NAME'] . '?' . http_build_query($_GET);
 }

Agregará el nuevo parámetro de consulta a la URL o actualizará su valor si ya existe

¿Ha sido útil esta solución?