Foros del Web » Programando para Internet » PHP »

Problema de paginación PHP+MYSQL

Estas en el tema de Problema de paginación PHP+MYSQL en el foro de PHP en Foros del Web. Hola, buenos días. Me encuentro realizando una base de datos con MYSQL y estoy intentando paginar los resultados. Lo que uno se encuentra al entrar ...
  #1 (permalink)  
Antiguo 12/04/2012, 08:20
 
Fecha de Ingreso: diciembre-2006
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 0
Exclamación Problema de paginación PHP+MYSQL

Hola, buenos días.

Me encuentro realizando una base de datos con MYSQL y estoy intentando paginar los resultados.

Lo que uno se encuentra al entrar es un formulario, que realiza un post hacia la misma página mediante:

Código:
<form action = "" method = "POST">

            <input type = "text" name = "keywords" value="<?php echo $_POST['keywords']?>"/>

</form>
Con ello, mediante $_POST['keywords'] consigo que cada casilla mantenga el valor que se ha escrito en ella.


Ahora bien, cuando se me muestran los resultados, mando paginarlos mediante una función que me devuelve la paginacion mediante paso de variables por url, como por ejemplo:

Código:
$pagination.= "<li><a href='?page=$counter>$counter</a></li>";
El problema que tengo, es que cada vez que realizo una búsqueda (se me quedan marcados los valores escritos en el formulario) y posteriormente pincho para ver la siguiente página de la búsqueda, me sale la siguiente página pero de todos los resultados, no de la búsqueda específica.

Es decir, no se porqué cada vez que pincho para ver la siguiente página de la búsqueda, se me borran los campos del formulario y coge la siguiente página pero de todos los resultados... No sé si alguien sabrá que es lo que ocurre... Pienso que es problema del href que no le estoy pasando una variable para que mantenga el valor el formulario, pero no se como se haría eso...

El método con el que realizo la paginación es:

Código PHP:
<?php

 
   
function pagination($cadenapag$per_page 10$page 1){ 
       
$url '?';     
        
$row mysql_fetch_array(mysql_query($cadenapag));
        
$total $row['num'];
        
$adjacents "2"

        
$page = ($page == $page);  
        
$start = ($page 1) * $per_page;                                
        
        
$prev $page 1;                            
        
$next $page 1;
        
$lastpage ceil($total/$per_page);
        
$lpm1 $lastpage 1;
        
        
$pagination "";
        if(
$lastpage 1)
        {    
            
$pagination .= "<ul class='pagination'>";
                    
$pagination .= "<li class='details'>Page $page of $lastpage</li>";
            if (
$lastpage + ($adjacents 2))
            {    
                for (
$counter 1$counter <= $lastpage$counter++)
                {
                    if (
$counter == $page)
                        
$pagination.= "<li><a class='current'>$counter</a></li>";
                    else
                        
$pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                }
            }
            elseif(
$lastpage + ($adjacents 2))
            {
                if(
$page + ($adjacents 2))        
                {
                    for (
$counter 1$counter + ($adjacents 2); $counter++)
                    {
                        if (
$counter == $page)
                            
$pagination.= "<li><a class='current'>$counter</a></li>";
                        else
                            
$pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                    }
                    
$pagination.= "<li class='dot'>...</li>";
                    
$pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                    
$pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";        
                }
                elseif(
$lastpage - ($adjacents 2) > $page && $page > ($adjacents 2))
                {
                    
$pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                    
$pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                    
$pagination.= "<li class='dot'>...</li>";
                    for (
$counter $page $adjacents$counter <= $page $adjacents$counter++)
                    {
                        if (
$counter == $page)
                            
$pagination.= "<li><a class='current'>$counter</a></li>";
                        else
                            
$pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                    }
                    
$pagination.= "<li class='dot'>..</li>";
                    
$pagination.= "<li><a href='{$url}page=$lpm1'>$lpm1</a></li>";
                    
$pagination.= "<li><a href='{$url}page=$lastpage'>$lastpage</a></li>";        
                }
                else
                {
                    
$pagination.= "<li><a href='{$url}page=1'>1</a></li>";
                    
$pagination.= "<li><a href='{$url}page=2'>2</a></li>";
                    
$pagination.= "<li class='dot'>..</li>";
                    for (
$counter $lastpage - (+ ($adjacents 2)); $counter <= $lastpage$counter++)
                    {
                        if (
$counter == $page)
                            
$pagination.= "<li><a class='current'>$counter</a></li>";
                        else
                            
$pagination.= "<li><a href='{$url}page=$counter'>$counter</a></li>";                    
                    }
                }
            }
            
            if (
$page $counter 1){ 
                
$pagination.= "<li><a href='{$url}page=$next'>Next</a></li>";
                
$pagination.= "<li><a href='{$url}page=$lastpage'>Last</a></li>";
            }else{
                
$pagination.= "<li><a class='current'>Next</a></li>";
                
$pagination.= "<li><a class='current'>Last</a></li>";
            }
            
$pagination.= "</ul>\n";        
        }
    
    
        return 
$pagination;
    } 
?>
Y $cadenapag es:


Código:
SELECT COUNT(*) as `num` FROM `inventario2` WHERE blablabla
Muchas gracias de antemano!!
  #2 (permalink)  
Antiguo 12/04/2012, 09:39
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Problema de paginación PHP+MYSQL

En algún sitio de los enlaces de la paginación deberás guardar lo que estás buscando, no crees?
Quiero decir, que si lo pones en el campo del formulario, pero luego en los enlaces de "página siguiente" lo haces con href y no por post, pues no te coge lo que tengas en ese campo.
Tienes varias opciones, pero si no quieres que salga por todos sitios todo el rato lo que el usuario está buscando, usa sesiones, en una variable de sesion guardas los datos de la busqueda y ya esta, luego en los enlaces que creas de "página siguiente" pones los limites y demas.

Saludos.
  #3 (permalink)  
Antiguo 12/04/2012, 10:43
 
Fecha de Ingreso: diciembre-2006
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Problema de paginación PHP+MYSQL

Hola DooBie, muchas gracias por contestar. La verdad es que soy un poco nuevo en el tema... llevo bastantes horas intentando indagar como puedo hacer eso; también he mirado lo de utilizar $_SESSION pero la verdad es que no se muy bien como utilizarlo...¿podrias darme un ejemplo para mi caso de como podria realizarse?
La verdad es que es de gran ayuda, porque no se como avanzar.

Muchas gracias
  #4 (permalink)  
Antiguo 12/04/2012, 11:08
Avatar de DooBie  
Fecha de Ingreso: septiembre-2004
Mensajes: 1.101
Antigüedad: 19 años, 7 meses
Puntos: 71
Respuesta: Problema de paginación PHP+MYSQL

No soy de dar código mascadito, por eso te daré algunos pasos, que bien, pueden no ser los mejores, serán de ayuda para que lo consigas.
1.- Para usar sesiones, debes iniciarlas con session_start ANTES de enviarle ningún dato al navegador, sino te dará error de cabeceras ya enviadas.
2.- Cuando llames la primera vez el formulario, asignas a una variable de session lo que el usuario ha enviado ($_SESSION['Lo_que_busco'] = $_POST['texto_a_buscar'];)
3.- Hacer los enlaces de la paginación como de costumbre.
4.- Cuando llames a la página desde los enlaces de paginación, recuperas los datos de los limites con $_GET y la cadena de la búsqueda con $_SESSION.
5.- Ejecutas la consulta sql
6.- Muestras los resultados, manteniendo la session, claro.

Creo que no me dejo nada, hace mucho que no uso paginaciones a pelo :p
  #5 (permalink)  
Antiguo 12/04/2012, 11:36
 
Fecha de Ingreso: diciembre-2006
Mensajes: 16
Antigüedad: 17 años, 4 meses
Puntos: 0
Respuesta: Problema de paginación PHP+MYSQL

Muchas gracias por las pautas!!! Voy a intentarlo y ya te cuento, pero gracias

Etiquetas: formulario, mysql, php-mysql, sql, variables
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 06:48.