Foros del Web » Programando para Internet » PHP »

Buscador que no acepta "paginador"

Estas en el tema de Buscador que no acepta "paginador" en el foro de PHP en Foros del Web. Gente, que tal: Mi consulta es la siguiente. En una página tengo un formulario sencillo que actua como un buscador, al darle "Buscar" paso la ...
  #1 (permalink)  
Antiguo 17/12/2002, 18:32
 
Fecha de Ingreso: diciembre-2001
Mensajes: 348
Antigüedad: 16 años
Puntos: 0
Buscador que no acepta "paginador"

Gente, que tal:

Mi consulta es la siguiente.

En una página tengo un formulario sencillo que actua como un buscador, al darle "Buscar" paso la variable $buscar a un select que ejecuta dicha consulta por nombre or descripcion mediante regexp '$buscar'.
Al salir la primer página de resultados, todo es totalmente normal, pero en las páginas siguiente informa que hay una variable inexistente llamada $buscar.

Cómo puedo pasar esa variable mediante un paginado?.
Lo extraño es que en otras consultas no hubo problema alguno,
aclaro que no eran busquedas.

Saludos

RedeX
  #2 (permalink)  
Antiguo 17/12/2002, 20:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
El paginador q usa ese buscador (los resultados) No propaga otras variables? .. como es tu $buscar q tienes? ...

La primera pagina requiere de $buscar para hacer el select .. las siguientes páginas no se como te lo haras .. (supongo q usaras LIMIT .. pero aun así te hará falta $buscar para aplicar tu condicion WHERE .. en el SQL de tu consulta) ..

Sin ver el código .. lo que creo q te sudece es que NO propagas la variable $buscar entre las páginas q puede arrojar tu busqueda y q gestiona la rutina de paginado q uses ...

Tendrias q progagar esa $buscar .. sea por el URL o en una session o cookie ...

De todas formas .. ese "error" es solo un Notice (suponemos) .. es decir no es crítico solo te infoma de ese hecho ..

Puedes configurar tu PHP.ini para que sólo te informe de errores críticos (no mostrando Notice ..):

error_reporting = E_ALL & ~E_NOTICE

Tambien puedes ajustar ese informe de errores en tiempo de ejcución (al principi de tu script) ... con error_reporting()

Para proximas veces .. si PHP te muestra un error .. indicalo en tu pregunta textualmente .. así veremos si es un simple "Notice" o es un "Warning" u otro tipo ..


Un saludo,
  #3 (permalink)  
Antiguo 18/12/2002, 14:40
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

Como bien dice Cluster es porque no has "propagado" la variable buscar. Normalmente se hace añadiendola en la URL de los links de paginacion. Pero tambien puede ser que la tengas en el link y tu codigo sea incapaz de leerla. La razon puede ser de que el formulario que manda el texto a buscar tenga el metodo POST y tu codigo lo lea con $_POST (o $HTTP_POST_VARS, segun versiones). Todo eso es correcto. Pero si la propagas por la URL de los links de paginacion, esa variable de la ÜRL es GET. Asi que tu $_POST no la lee. Si este es tu caso tienes dos soluciones: cambiar al formulario el metodo y ponerlo GET; o en tu script leer la variable de $_POST y de $_GET. Puedes poner que si no existe en $_POST la lea de $_GET.

Y sobre lo que comenta Cluster de que los Notice no avisan de errores importantes, discrepo totalmente. Los Notices te pueden avisar de cantidad de errores de "tecleo" (cuando nos hekibokamos al escribir), errores que de otra forma seamos incapaces de localizar (sin quedarnos ciegos). Son errores que permiten al script seguir funcionando y no dar ningun otro error, pero dar un resultado erroneo. Aunque hay veces de que los cometemos a proposito (ej, al poner en un formulario los datos enviados por si mismo). Mi recomendacion es que pongas el error_reporting a E_ALL, y si te sale algun Notice que no debiera salir lo corriges. Una vez que solo queden los que salen "a sabiendas", puedes cambiar el error_reporting a lo que quieras. Yo recomendaria que una vez que el script esta en produccion (una vez finalizado), lo ejecutes con error_reporting a 0 para que no muestre mensajes de error.

Espero haber sido de ayuda.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 19/12/2002, 05:15
 
Fecha de Ingreso: diciembre-2001
Mensajes: 348
Antigüedad: 16 años
Puntos: 0
Que tal gente;

Agradezco ambas contestaciones.
Lo de las cookies no me convence mucho, ya probé el formulario con get y post, usando luego $http_get_vars y post_vars respectivamente, aún así no funciona. Claro que el problema es al pasar la variable de una página a otra (Esto lo probé escribiendo en la URL busqueda.php?pagina=1&busqueda=a por ejemplo)

Aca va el código:

1.- El formulario en html con metodo post (y get para probar) y action buscar.php?pagina=1

2.- Código buscar.php:
$pagina = $HTTP_GET_VARS["pagina"];//aquí aparecen ambos
$pagina = $HTTP_POST_VARS["pagina"];//métodos que intenté.
include("class.paginado.busqueda.php");
$rs = new paginado($conectar);
$rs->pagina($pagina);
$rs->porPagina(1);
$rs->propagar("forum");
if(!$rs->query("select * from juegos where descripcion or nombre regexp '$buscar'"))
{tabla
echo ( $rs->error() );
} else { }
while($fila = $rs->obtenerArray())
{ }

Ahora, la primer página no presenta error alguno, pero las subsecuentes presentan el error de "empty (sub)expresion de regexp', por la falta de la variable $buscar.

Aquí quedé, se me ocurre que si coloco un header("location:") ayude en algo.

Saludos.

RedeX
  #5 (permalink)  
Antiguo 19/12/2002, 11:02
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 16 años, 1 mes
Puntos: 68
Ay ay ay... si leyeramos la documentacion....
Reemplaza:
$rs->propagar("forum");

por:
$rs->propagar("buscar");

Eso debería solucionar tu problema.
Saludos.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #6 (permalink)  
Antiguo 19/12/2002, 13:32
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

NO puedes poner los dos metodos de lectura de la variable a la vez. Tal como lo tienes puesto, SOLO lee la variable cuando viene de un POST. Sino, vale NULL. Prueba con este codigo:
Código PHP:
$pagina = (isset($HTTP_GET_VARS["pagina"]))?$HTTP_GET_VARS["pagina"]:$HTTP_POST_VARS["pagina"]; 
Es el operador ternario (un IF-THEN-ELSE). Si recibe el parametro por GET, lee ese valor. SIno, lo lee del POST. En este caso, si existe la variable tanto en GET como en POST, solo lee la del GET.

Y para el metodo de propagar haz caso del autor y lee la documentacion.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 19/12/2002, 19:13
 
Fecha de Ingreso: diciembre-2001
Mensajes: 348
Antigüedad: 16 años
Puntos: 0
Ambos métodos solucionan el problema... tiene razón Webstudio, que cuesta leer

Saludos a todos

RedeX
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 13:00.