request_uri por pasar parametros obtener completa _server php url variables get

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



php obtener url sin parametros (5)

..

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

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

Podría fácilmente hacer un redireccionamiento 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 alguna variable GET en la url

    • Si no hay, redirigir a la url actual con la nueva variable GET [''prueba''] al final de la url.

    • Si existe, pero no hay una variable GET [''prueba''] en la url, entonces mantenga esos otros valores GET en la url y agregue la variable GET [''prueba''] al final de la cadena de url completa

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

¿Cómo puedo verificar todas estas condiciones?


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

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 se trata de un nuevo valor.

La forma más simple de hacerlo es:

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

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

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

Sin embargo, tenga en cuenta que el análisis de parámetros de cadena de consulta 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 reenviarte a

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


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

$ currenturl = $ _SERVER [''REQUEST_URI''];

Mucho menos código.


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 example by 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("/", $_SERVER[''REQUEST_URI'']); $current_url = $current_url[end(array_keys($current_url))];