Foros del Web » Programando para Internet » PHP »

como mantener la busqueda con paginacion

Estas en el tema de como mantener la busqueda con paginacion en el foro de PHP en Foros del Web. buenas a todos. tengo un problema. yo estoy haciendo una busqueda de productos con 3 selects. el primer select es el nombre del producto, el ...
  #1 (permalink)  
Antiguo 13/05/2009, 08:40
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
como mantener la busqueda con paginacion

buenas a todos. tengo un problema. yo estoy haciendo una busqueda de productos con 3 selects. el primer select es el nombre del producto, el 2do es la categoria del producto y el 3ro es el modelo.

cuando no selecciono los 3 selects, me muestra todos los productos. inclui la paginacion tambien para hacer la busqueda. estos productos me deben de paginar pero cuando voy a la paginacion 2 pero me muestra en blanco que no hay nada. pero para que me muestren los productos que no he seleccionado, hago de esta forma:

Código PHP:
$registros 8;

if (!
$pagina) { 
    
$inicio 0
    
$pagina 1
}else{ 
    
$inicio = ($pagina 1) * $registros
}         

#hacer la busqueda de los productos.

#tipo de producto
if($_POST['producto']!="0"){
    
$condicion "and p.idproducto = '".$_POST['producto']."'";
}
#categoria del producto.
if($_POST['categoria']!="0"){
    
$condicion .= "and p.idcategoria = '".$_POST['categoria']."'";
}
#modelo del producto.
if($_POST['modelo']!="0"){
    
$condicion .= "and p.idmodelo = '".$_POST['modelo']."'";
}                        
    
$sql_productos "SELECT p.*, c.*, m.* FROM miusb_productos p, miusb_categorias c, miusb_modelos m
WHERE p.idcategoria = c.idcategoria
AND p.idmodelo = m.idmodelo
"
.$condicion."";

$rpta_productos mysql_query($sql_productos) or die(mysql_error());
$total_registros mysql_num_rows($rpta_productos);

$resultado_busqueda_productos "SELECT p.*, c.*, m.* FROM miusb_productos p, miusb_categorias c, 
miusb_modelos m
WHERE p.idcategoria = c.idcategoria
AND p.idmodelo = m.idmodelo
"
.$condicion."
LIMIT $inicio, $registros"
;

$rs_resultado_busqueda_productos mysql_query($resultado_busqueda_productos) or die(mysql_error());
$filas_productos mysql_num_rows($rs_resultado_busqueda_productos);            

$total_paginas ceil($total_registros $registros); 
codigo de la paginacion.

Código PHP:
#codigo de paginacion.
<?php
    
#pregunto si hay resultados para paginar.
        
    
mysql_free_result($rs_resultado_busqueda_productos);                
    
    if(
$total_registros) {

        if((
$pagina 1) > 0) {
?>
    <a href="miusb_buscar_productos.php?pagina=<?=($pagina-1); ?>">< Anterior</a>
    <?php        
        
}
?>
    <?php

        
for ($i=1$i<=$total_paginas$i++){ 
            if (
$pagina == $i) {
                echo 
"<a class='sel' href = '#'>".$pagina."</a> "
            } else {
?>
    <a href="miusb_buscar_productos.php?pagina=<?=$i?>" ><?php echo $i?></a>
    <?php

            
}    
        }
      
        if((
$pagina 1)<=$total_paginas) {
?>
    <a href="miusb_buscar_productos.php?pagina=<?=($pagina+1); ?>">Siguiente ></a>
    <?php
        
        
}
        
    }
mi problema es como debo mantaner la busqueda de la paginacion con o sin haber selccionado los 3 selects, ya sea el primero, el segundo y el tercero.

ayudenme con mi problema.

es urgente. por favor ayudenme.

Última edición por esaenz22; 13/05/2009 a las 09:54 Razón: correcion de mi problema y no me responden.
  #2 (permalink)  
Antiguo 13/05/2009, 11:07
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: como mantener la busqueda con paginacion

El problema es que como se pierde los valores del POST no te armara el sql nuevamente, podrias guardar el sql luego de armarlo en la pagina 1, en una session, y luego consultarlo y ejecutarlo.
Solo debes verificar que tenga valor y ejecutarlo, pero debes dejar lo que tienes porq si deciden cambiar las opciones de busqueda se debe actualizar la variable de session.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #3 (permalink)  
Antiguo 13/05/2009, 11:27
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: como mantener la busqueda con paginacion

gracias por responder the_web_saint. como haria el codigo. me podrias ayudar en ello.

saludos.
  #4 (permalink)  
Antiguo 13/05/2009, 11:36
Avatar de asassa  
Fecha de Ingreso: julio-2008
Ubicación: En el DF ectuoso
Mensajes: 240
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: como mantener la busqueda con paginacion

creo que al avanzar a la segunta pagina te manda error y tambien no te permite regresara a primera. ...( creo que ese es el error que te pasa).

En ves de usar lariables del modo normal utiliza variables de sesiones y asi de esa manera no se pierde tu "variable" a buscar en el salto de una pagina a otra.

A mi me paso con la paginacion de sql server y solo me hacia la busqueda de mis primeras paginas, al darme cuanta de que mi variable se perdia al momento de navegar entre las paginas diceidi usar variables de session y asi se mantenia la variable a buscar.

Espero qu te sirva
  #5 (permalink)  
Antiguo 13/05/2009, 11:41
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: como mantener la busqueda con paginacion

Código php:
Ver original
  1. if(!isset($_SESSION['SqlBusqueda']) || $_SESSION['SqlBusqueda']=='')
  2. {
  3. $_SESSION['SqlBusqueda']="SELECT p.*, c.*, m.* FROM miusb_productos p, miusb_categorias c, miusb_modelos m
  4. WHERE p.idcategoria = c.idcategoria
  5. AND p.idmodelo = m.idmodelo";
  6. }
  7.  
  8. $registros = 8;
  9.  
  10. if (!$pagina) {
  11.     $inicio = 0;
  12.     $pagina = 1;
  13. }else{
  14.     $inicio = ($pagina - 1) * $registros;
  15. }        
  16.  
  17. #hacer la busqueda de los productos.
  18.  
  19. #tipo de producto
  20. if(isset($_POST['enviar']) && $_POST['enviar']=='Enviar')
  21. {
  22. if($_POST['producto']!="0"){
  23.     $condicion = "and p.idproducto = '".$_POST['producto']."'";
  24. }
  25. #categoria del producto.
  26. if($_POST['categoria']!="0"){
  27.     $condicion .= "and p.idcategoria = '".$_POST['categoria']."'";
  28. }
  29. #modelo del producto.
  30. if($_POST['modelo']!="0"){
  31.     $condicion .= "and p.idmodelo = '".$_POST['modelo']."'";
  32. }                        
  33.    
  34. $sql_productos = "SELECT p.*, c.*, m.* FROM miusb_productos p, miusb_categorias c, miusb_modelos m
  35. WHERE p.idcategoria = c.idcategoria
  36. AND p.idmodelo = m.idmodelo
  37. ".$condicion."";
  38.  
  39. $_SESSION['SqlBusqueda']=$sql_productos;
  40.  
  41. }
  42. $rpta_productos = mysql_query($_SESSION['SqlBusqueda']) or die(mysql_error());
  43. $total_registros = mysql_num_rows($rpta_productos);
  44.  
  45. $resultado_busqueda_productos = $_SESSION['SqlBusqueda']." LIMIT $inicio, $registros";
  46.  
  47. $rs_resultado_busqueda_productos = mysql_query($resultado_busqueda_productos) or die(mysql_error());
  48. $filas_productos = mysql_num_rows($rs_resultado_busqueda_productos);            
  49.  
  50. $total_paginas = ceil($total_registros / $registros);

Creo que te puede dar una idea, no esta probada asi q puede fallar.

Solo debes colocar el verdadero nombre del input de envio en el formulario de los combos, en la linea 21.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #6 (permalink)  
Antiguo 13/05/2009, 11:43
Avatar de asassa  
Fecha de Ingreso: julio-2008
Ubicación: En el DF ectuoso
Mensajes: 240
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: como mantener la busqueda con paginacion

Lo que puede hacer es poner en tu primer codigo php ajustar estas lineas para tus variable sean variables de session como en el siguiente ejemplo
Código PHP:
$nombre=$_POST['nombre'];
$password=$_POST['pass'];
if (!isset(
$_SESSION[nombre]))        
       
$_SESSION[nombre]=$nombre;  
if (!isset(
$_SESSION[pass]))        
       
$_SESSION[pass]=$password;
echo 
"$_SESSION[nombre]";
echo 
"$_SESSION[pass"; 
con esto te deberia mostrar el lo que tienes en las viariables cuando avances de paginas.
  #7 (permalink)  
Antiguo 13/05/2009, 11:44
 
Fecha de Ingreso: mayo-2009
Ubicación: Madrid
Mensajes: 100
Antigüedad: 14 años, 11 meses
Puntos: 3
Respuesta: como mantener la busqueda con paginacion

Y si metes la query en una variable de sesion y pregunta si existe o no.
si existe usas la query de sesion y sino la que tienes almacenada?

no creo yo que sea muy complicado mantener una query en memoria.

de todas maneras otro ejemplo

tu pagina es siempre la misma yo preguntaria donde el limite 0,10 por ejemplo
if(!isset($limite))
$limite = 10;
else
$limite = $_POST['limite'];

if(!isset($registros_mostrar)) //esta parte es por si puedden modificar el num registros/vista
$registros_mostrar = 10;

en tu pagina ahora haz
$query="select * from .... where ".$valores de sesion o del while.".... LIMIT $limite,$registros

a la paginacion de numeritos 1 2 3 4 multiplicales en el href el $limite
1 = 10
2 = 20
3 = 30
....


OK?
  #8 (permalink)  
Antiguo 13/05/2009, 11:52
(Desactivado)
 
Fecha de Ingreso: abril-2008
Mensajes: 787
Antigüedad: 16 años
Puntos: 7
Respuesta: como mantener la busqueda con paginacion

gracias por responder a mi pregunta. voy a ver las demas sugerencias que dejaron. una consulta the_web_saint, como pondria en el link de la paginacion, es decir cual es la variable a la que debo concatenar.

y otra pregunta, lo que mencionaste: Solo debes colocar el verdadero nombre del input de envio en el formulario de los combos, en la linea 21.

te refieres al nombre del boton o al nombre del formulario.

gracias y saludos.

Última edición por esaenz22; 13/05/2009 a las 12:29 Razón: una consulta sobre busqueda con paginacion
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 23:25.