Foros del Web » Programando para Internet » PHP »

Obtener el query string

Estas en el tema de Obtener el query string en el foro de PHP en Foros del Web. Cluster me recomendó utilizar la función parse_url() en este post: http://www.forosdelweb.com/s/msg176504.html A ver... ya me puse a fastidiar con lo del query string... Es verdad ...
  #1 (permalink)  
Antiguo 15/01/2004, 20:14
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Obtener el query string

Cluster me recomendó utilizar la función parse_url() en este post:
http://www.forosdelweb.com/s/msg176504.html
A ver... ya me puse a fastidiar con lo del query string...
Es verdad que el query string se puede obtener así:
Código PHP:
$arr parse_url($_SERVER['REQUEST_URI']);
echo 
$arr['query'
Pero también se obtiene directamente así:
Código PHP:
$query $_SERVER['QUERY_STRING'
Entonces, más que la función parse_url()... creo que se puede utilizar la función parse_str() de la siguiente manera:
Código PHP:
parse_str($_SERVER['QUERY_STRING'], $query);
//El array $query que se obtiene, será una copia del array  $_GET
//O sea, lo que yo hago en Paginator con $query = $_GET 
No sé si es a esto a lo que se refiere Cluster exactamente...

Saludos

Última edición por jpinedo; 15/01/2004 a las 20:46
  #2 (permalink)  
Antiguo 16/01/2004, 07:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si, jpinedo .. a eso me referería y ahora que lo veo .. con la variable de servidor "QUERY STRING" màs directo todavia.

No he tenido tiempo de probar el script completo de Paginator .. pero, parece que en el caso que se compone el query string por el actual foreach() que hay .. se queda "suelta" un & al final (corrigeme si me equivoco).

Bueno .. aquí va una propuesta para obtener el query string limpio de la variable de control 'pg' si es que llegase ya propagada por el URL:

Código PHP:
<?
// como array que es $_GET .. miramos con in_array si existe nuestro elemento a buscar.
if (in_array('pg',$_GET)){
   
// si existe .. nos deshacemos de el con unset()
    
unset($_GET['pg']);

  
// componemos el nuevo query string sin la variable 'pg'
  
$_pagi_query_string '';
  foreach (
$_GET as $clave => $valor) {
          
$_pagi_query_string .= (strlen($_pagi_query_string) < 1) ? '' '&';
           
$_pagi_query_string .= $clave '=' rawurlencode($valor);
       }

} else {
    
// Si no está en el $_GET nuestra variable de control 'pg' tomamos directo el query string ..
    
$_pagi_query_string $_SERVER['QUERY_STRING'];
}

?>
El detalle de la nueva rutina para componer el query string si corresponde es que tiene en cuenta el nº de variables (grupo: variable=valor& si corresponde) para añadir el & o no según si quedan más variables que componer .. A su vez se aplica rawurlencode() para evitar problemas con variables que vengan con espacios, comillas y caracteres similares codificando el query string.

(no lo he probado .. pero más o menos esa es la idea).

Créditos:
foreach () para componer el query string:
dante at lorenso dot com (06-Jul-2003 04:11)
Comentarios de los usuarios de:
http://www.php.net/manual/en/function.parse-str.php

resto Cluster xD..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 16/01/2004 a las 07:10
  #3 (permalink)  
Antiguo 16/01/2004, 07:31
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

No es por molestar, pero ¿que pasa si unos parametros de la URL son un array (pagina.php?op[]=1&op[]=3&var[1]=hola&var['hola']=adios)? Pues me temo que crearia los links con pagina.php?op=Array&var=Array.

La solucion es "sencilla". En el foreach metes una comprobacion de is_array($valor), y en caso afirmativo generas todos los parametros de ese array (incluso debes tener en cuenta los arrays multidimensionales).

A mi ni me va ni me viene, pero por comentarlo tampoco pasa nada (frase de un programa de humor de la ETB)

Suerte.

PD: Creo que
Código PHP:
          $_pagi_query_string .= (strlen($_pagi_query_string) < 1) ? '' '&'
es innecesario. Simplemente haciendo:
Código PHP:
foreach ($_GET as $clave => $valor) {
           
$_pagi_query_string .= '&'.$clave '=' rawurlencode($valor);
       } 
obtendremos el query string de la forma '&var=valor&var2=valor'. Y como luego (supongo) vas a concatenar con pg, harias:
Código PHP:
$url='?pg='.$pg.$_pagi_query_string
(siento no poner las variables que usas) y no quedaria colgando nada.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 16/01/2004, 08:23
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues tienes razón josemi .. xD. Por mi parte se me pasó el detallazo de arrays y lo del "query string" .. si concatenas como mencionas ok.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 17/01/2004, 14:08
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Gracias amigos.. voy a revisar sus ideas...
la idea de dejar la "&" al final, era justamente porque de todas maneras se va a agregar la variable "pg"...

Como digo... voy a hacer algunas pruebas y les aviso..

Saludos
  #6 (permalink)  
Antiguo 19/01/2004, 23:43
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno.. lo de los arrays no lo había pensado para nada.. pero ahora que ya me puse a buscar una solución quioero preguntarles si no es ¿mejor? quitarle la variable "pg" al query string mediante expresiones regulares... yo lo probé y funciona bien.. de esa manera no tengo que hacer comprobaciones de arrays ni nada por el estilo, ni siquiera tengo que concatenar variable por variable, pues copio el query string tal cual llegó acá simplemente le quito un elemento...

Ésta es la línea que yo propongo:
Código PHP:
$_pagi_query_string ereg_replace('pg=[0-9]*'''$_SERVER['QUERY_STRING']);

//Y luego en los enlaces hago como puso josemi. 
A ver qué opinan.

Saludos
  #7 (permalink)  
Antiguo 20/01/2004, 09:38
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. si funciona, ves que tan sólo tienes un línea de código .. y aparentemente (habría que testearlo) en tiempo de proceso y recursos del servidor consume = o menor a las opciones anteriores .. Usalo.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 20/01/2004, 09:49
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
No es por molestar, pero ¿que pasa en el caso en que el Id de sesion se pase por URL pero transparentemente al usuario? tendrias un Id de sesion de tu querystring, y luego no se si PHP lo añade tambien automaticamente a tus links, aunque ya este puesto. Esto puede llevar a que los links en la primera pagina tengan dos veces el id de sesion, la siguiente pagina 3, la otra 4, etc.

Ya digo que no se si lo hace o no (puede que lo pruebe mas tarde).

De todas formas, la solucion seria facil, con los valores de session_name() y session_id().

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:38.