Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Paginación con filtros casi acabada, pequeño fallito q me atasca

Estas en el tema de Paginación con filtros casi acabada, pequeño fallito q me atasca en el foro de PHP en Foros del Web. Holaa, tengo la paginación casi acabada, me aparecen los números de páginas a pie de página y todo perfecto. Cuando cargo la página de primeras ...
  #1 (permalink)  
Antiguo 02/09/2013, 07:53
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 10 años, 10 meses
Puntos: 5
Paginación con filtros casi acabada, pequeño fallito q me atasca

Holaa, tengo la paginación casi acabada, me aparecen los números de páginas a pie de página y todo perfecto. Cuando cargo la página de primeras me aparecen todos los elementos de la base de datos por defecto, que es lo que quiero por ahora, y ahí cuando le doy a página 2 o 3 o la que sea me funciona perfectamente.

Ahora he querido meter unos filtros a la paginación. Si selecciono uno de los 11 filtros por ejemplo el pais, y pongo España en la primera página me aparecen los 10(lo tengo limitado a 10 por página) primeros elementos de España pero si le doy a la segunda página me vuelven los elementos por defecto en vez de los elementos pertenecientes al filtro España, es decir lo de todos los paises, es decir sólo me sirve el filtro para la primera página, no sé porqué no me guarda el filtro para la segunda página también.

Pongo el código:
Código PHP:
Ver original
  1. $numGet = array("page","pagenum");
  2.  
  3. foreach($_GET as $k=>$v) {
  4.     if (in_array($k, $numGet) ) {
  5.         $_GET[$k] = cleanInput($v, 3, "numeric");
  6.     } else {
  7.         $_GET[$k] = cleanInput($v, 3);
  8.     }
  9. }
  10.  
  11. foreach($_POST as $k=>$v) {
  12.     $v = substr($v, 0, 50);
  13.     $_POST[$k] = cleanHex($v);
  14. }

Con esta parte consigo los elementos por página:

Código PHP:
Ver original
  1. $SetNumberOnPage = $NumberOnPage;
  2.  
  3. if (isset($_GET['pagenum'])){
  4.     $SetNumberOnPage = $_GET['pagenum'];
  5. }
  6.  
  7. //$beginning = $Page;
  8. $getPage = $Page;
  9.  
  10. if (isset($_GET['page'])) {
  11.     $getPage = $_GET['page'];
  12. }
  13.  
  14. $rcsElementNumber = $cardata->query($qryElementNumber);
  15. $row = $rcsElementNumber->fetch_array(MYSQLI_BOTH);
  16.  
  17. $total_pages = floor($row["ElementCount"]/$SetNumberOnPage)+1;
  18.  
  19. if(is_numeric($getPage)){
  20.     if($getPage > $total_pages){
  21.         $getPage = $total_pages;
  22.     }
  23.     $beginning = (($getPage - 1) *$SetNumberOnPage);
  24. } else {
  25.     $beginning = 0;
  26. }

Este es uno de mis filtros por ejemplo, Categoría, una parte de él, q comprueba si el usuario ha seleccionado algo o no y luego mediante la variable $DataFilter va modificando el query para acceder a la base de datos:

Código PHP:
Ver original
  1. //Category
  2. if (isset ($_POST['CategoryInput'])) {
  3.     $CategoryInput = $_POST['CategoryInput'];
  4.    
  5.     if ($CategoryInput !=''){
  6.         if($DataFilter!="") {
  7.             $DataFilter .= " AND ";
  8.         }
  9.         $DataFilter .= "category_id = '" . $CategoryInput . "' ";
  10.     }  
  11. } else {
  12.     $CategoryInput = '';
  13. }

Esta es la parte del filtro que se muestra por pantalla con un select para que el usuario elija la opción:

Código PHP:
Ver original
  1. <label for="CategoryInput"><?php echo $arrMainPage[$MainPageCategory]["TextHeader"]; ?></label>
  2.                                 <select name="CategoryInput" >
  3.                                     <option></option>
  4.                                     <?php
  5.                                     $rcsCategory = $elementdata->query($qryCategory);
  6.        
  7.                                     while ($row = $rcsCategory->fetch_array(MYSQLI_BOTH)) {
  8.                                            
  9.                                         if ($row["CategoryCodePK"] == $CategoryInput) {
  10.                                             $CategorySelected = "selected";
  11.                                         } else {
  12.                                             $CategorySelected = "";
  13.                                         }
  14.                                        
  15.                                         ?><Option <?php echo $CategorySelected; ?> value="<?php echo $row["CategoryCodePK"]; ?>"><?php echo $row["CategoryDescription"]; ?></option>
  16.                                     <?php
  17.                                     }
  18.                                     echo "</select>"
  19.                                     ?>                     
  20.                                 </select>

Y este último select está dentro de este form con su correspondiente btón de búsqueda para que cuando el usuario elija su opción pulse buscar

Código PHP:
Ver original
  1. <form method="post" action="Screen2List2.php">
  2. ...
  3.  
  4.   <button type="submit" class="btn btn-primary " value=""/> <i class="icon-search icon-large"></i>SEARCH</button>
  5.  
  6. </form>

Y este es el pie de página donde muestra las páginas limitadas con el botón Next o Previous, y cuando pulso la 2 se pierde el filtro y me vienen todos los elementos que aparecen cuando se carga la página en vez de los elementos filtrados que no caben en la página 1 y por eso están en la 2:

Código PHP:
Ver original
  1. if (($total_pages > 1) AND ($getPage > 1 )) {
  2.                                     echo "<a href ='{$_SERVER['PHP_SELF']}?page=".($getPage-1)."'>" .$arrMainPage[$MainPagePrevious]['TextHeader']. "</a> ";
  3.                                 }  
  4.                                
  5.                                 //If current page is < 5 the list start in 1 if not, in current page - 5
  6.                                 if ($getPage < 5) {
  7.                                     $StartList = 1;
  8.                                 } else {
  9.                                     $StartList = $getPage - 5;
  10.                                 }
  11.  
  12.                                 // If current page is very near of total_pages, StartList = $total_pages - 10;
  13.                                 if ((($getPage + 5) > $total_pages) AND ($total_pages >1)) {
  14.                                     $StartList = $total_pages - 10;
  15.                                 }
  16.                                
  17.                                 //New if
  18.                                 //if (($getPage == $total_pages) AND ($total_pages<2)){
  19.                                 if (($total_pages < 0) OR ($getPage < 0)){
  20.                                     echo "1";
  21.                                 }else{
  22.                                 //This for was out of the niew if
  23.                                     for($cont = $StartList; $cont <= $StartList + 10; $cont++){
  24.                                         if ($cont == $getPage) {
  25.                                             echo "<a class='bold' href ='{$_SERVER['PHP_SELF']}?page=".$cont."'>$cont</a> ";
  26.                                         } else {
  27.                                             if($total_pages > 1){
  28.                                                 echo "<a href ='{$_SERVER['PHP_SELF']}?page=".$cont."'>$cont</a> ";
  29.                                             }  
  30.                                         }
  31.                                     }
  32.                                 }  
  33.                                                
  34.                                 if(($getPage < $total_pages) AND ($total_pages > 1 )){
  35.                                     echo "<a href ='{$_SERVER['PHP_SELF']}?page=".($getPage+1)."'>" .$arrMainPage[$MainPageNext]['TextHeader']. "</a> ";
  36.                                 }

Yo creo que el problema no está en este pie d página si no en la parte del principio de código que he puesto donde los POST, tengo q añadir o modificar algo para que el POST del filtro se mantenga en la segunda página tb y no sólo cuando le doy al botón buscar y me aparece en la primera página.

Si alguien ve donde está el fallo, le estaría muy agradecido.

A lo mejor se me ha psado postear alguna parte de código, creo q he puesto todo lo q se usa para el filtro y la paginación menos los querys para no hacer demasiado extenso el post.

Muchas gracias.

Saludos.
  #2 (permalink)  
Antiguo 03/09/2013, 07:33
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Paginación con filtros casi acabada, pequeño fallito q me atasca

He averiguado algo:

Por lo visto es imposible mantener el valor de $_POST(necesario para filtrar) cuando clikeas en la segunda página si no lo almacenas en algún lado, y entonces es mejor el comando $_SESSION que si te permite arrastrar el valor seleccionado para las diferentes páginas al estar tirando de base de datos...tb había pensado que se cambiara sólo la parte en donde aparecen los elementos cuando selecciones la segunda página, q es lo suyo, en vez de recargar toda la página, pero por lo visto es muy complicado... pero bueno ahora por lo menos tengo más donde buscar, aunque tb había leido que no es bueno usar más de una vez el comando session sino sólo al principio por cosas de seguridad...un poco lio todo, pero se va aclarando la cosa cn esfuerzo.

Si alguien se le ocurre algo más q arroje un poco más d luz, bienvenido sea.
O si alguien está con el mismo problema...

Muchas gracias, seguiré posteando si avanzo algo.
  #3 (permalink)  
Antiguo 03/09/2013, 11:51
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 14 años, 7 meses
Puntos: 44
Respuesta: Paginación con filtros casi acabada, pequeño fallito q me atasca

o si deseas usar a fuerzas el valor de $_POST puedes alojarlo en una input type ="hidden" e ir lo pasando mediante un submit de un form (lo veo más complejo)

Como bien lo comentas usa sessiones o bien usa $_GET para ir pasando el número de la paginación.
__________________
Desde hace tiempo estoy esperandote... bienvenido mi pequeño Diego!!!
  #4 (permalink)  
Antiguo 04/09/2013, 02:08
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Paginación con filtros casi acabada, pequeño fallito q me atasca

Cita:
Iniciado por p414 Ver Mensaje
o si deseas usar a fuerzas el valor de $_POST puedes alojarlo en una input type ="hidden" e ir lo pasando mediante un submit de un form (lo veo más complejo)

Como bien lo comentas usa sessiones o bien usa $_GET para ir pasando el número de la paginación.
Lo primero: Muchas gracias por responder.

A ver si me aclaro un poko mejor, q con sto d intentar aprender rápido PHP no veas q lio tengo ya:

Si no me equivoco, con mi paginador estoy intentando hacer exactamente lo que me dices, usar el $_GET para ir pasando el número de la paginación:

Código PHP:
Ver original
  1. <div class="text_align_left" >
  2.                                 <?php    
  3.                                 //Print previous
  4.                                 if (($total_pages > 1) AND ($getPage > 1 )) {
  5.                                     echo "<a href ='{$_SERVER['PHP_SELF']}?page=".($getPage-1)."'>" .$arrMainPage[$MainPagePrevious]['TextHeader']. "</a> ";
  6.                                 }  
  7.                                
  8.                                 //If current page is < 5 the list start in 1 if not, in current page - 5
  9.                                 if ($getPage < 5) {
  10.                                     $StartList = 1;
  11.                                 } else {
  12.                                     $StartList = $getPage - 5;
  13.                                 }
  14.  
  15.                                 // If current page is very near of total_pages, StartList = $total_pages - 10;
  16.                                 if ((($getPage + 5) > $total_pages) AND ($total_pages >1)) {
  17.                                     $StartList = $total_pages - 10;
  18.                                 }
  19.                                
  20.                                 //New if
  21.                                 //if (($getPage == $total_pages) AND ($total_pages<2)){
  22.                                 if (($total_pages < 0) OR ($getPage < 0)){
  23.                                     echo "1";
  24.                                 }else{
  25.                                 //This for was out of the new if
  26.                                     for($cont = $StartList; $cont <= $StartList + 10; $cont++){
  27.                                         if ($cont == $getPage) {
  28.                                             echo "<a class='bold' href ='{$_SERVER['PHP_SELF']}?page=".$cont."'>$cont</a> ";
  29.                                         } else {
  30.                                             if($total_pages > 1){
  31.                                                 echo "<a href ='{$_SERVER['PHP_SELF']}?page=".$cont."'>$cont</a> ";
  32.                                             }  
  33.                                         }
  34.                                     }
  35.                                 }  
  36.                                                
  37.                                 if(($getPage < $total_pages) AND ($total_pages > 1 )){
  38.                                     echo "<a href ='{$_SERVER['PHP_SELF']}?page=".($getPage+1)."'>" .$arrMainPage[$MainPageNext]['TextHeader']. "</a> ";
  39.                                 }
  40.                                 ?>
  41.                             </div>

Si te fijas tengo la variable $getPage por todos lo lados del paginador, la cual he declarado más arriba usando $_GET , te pongo el resto d variables d la paginación tb aparte de $getPage:

Código PHP:
Ver original
  1. $SetNumberOnPage = $NumberOnPage;
  2.  
  3. if (isset($_GET['pagenum'])){
  4.     $SetNumberOnPage = $_GET['pagenum'];
  5. }
  6.  
  7. //$beginning = $Page;
  8. $getPage = $Page;
  9.  
  10. if (isset($_GET['page'])) {
  11.     $getPage = $_GET['page'];
  12. }
  13. /*
  14. else{
  15.     $getPage = 1;
  16. }
  17. */
  18. $rcsElementNumber = $elementdata->query($qryElementNumber);
  19. $row = $rcsElementNumber->fetch_array(MYSQLI_BOTH);
  20.  
  21. $total_pages = floor($row["ElementCount"]/$SetNumberOnPage)+1;
  22.  
  23. if(is_numeric($getPage)){
  24.     if($getPage > $total_pages){
  25.         $getPage = $total_pages;
  26.     }
  27.     $beginning = (($getPage - 1) *$SetNumberOnPage);
  28. } else {
  29.     $beginning = 0;
  30. }

Con lo cual se supone que estoy usando $_GET cada vez que clicleo en un número de la paginación no?, o al menos eso es lo que pretendía...

Muchas gracias.
  #5 (permalink)  
Antiguo 04/09/2013, 02:43
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Paginación con filtros casi acabada, pequeño fallito q me atasca

También tengo este script que que me sirve para la colocación de elementos por página:

Código Javascript:
Ver original
  1. function Number_Elements_Page() {
  2.                 self.location = window.location.pathname +'?page=1&pagenum='+$("#ElementsPerPage").val()
  3.             };

Y ya d paso pongo el select para escoger los elementos que se quieren mostrar por página:

Código PHP:
Ver original
  1. <div>
  2.                                 <label class="text_align_right" for="selectinput1">Elements per page</label>
  3.                                 <div class="text_align_right" >
  4.                                     <select id="ElementsPerPage" style="width:100px" onchange="Number_Elements_Page()"  >
  5.                                         <?php          
  6.                                         $rcsElectionNumber = $elementdata->query($qryElementsPerPage);
  7.                        
  8.                                         while ($row = $rcsElectionNumber->fetch_array(MYSQLI_BOTH)) {
  9.                                             if ($row["ElectionNumber"] == $SetNumberOnPage) {
  10.                                                 $sele = "selected";
  11.                                             } else {
  12.                                                 $sele = "";
  13.                                             }
  14.                                                        
  15.                                             ?><Option <?php echo $sele; ?> value="<?php echo $row["ElectionNumber"]; ?>"><?php echo $row["ElectionNumber"]; ?></option>
  16.                                             <?php
  17.                                         }
  18.                                         echo "</select>";
  19.                                         ?>                     
  20.                                     </select>
  21.                                 </div>
  22.                             </div>

Aunque creo que no tiene nada que ver y es totalmente independiente pero bueno, así ya está todo completo y por si sirve de algo
  #6 (permalink)  
Antiguo 05/09/2013, 04:43
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Paginación con filtros casi acabada, pequeño fallito q me atasca

He modificado uno de los filtros para que cuando la página no sea la primera use $_GET en vez de $_POST pero nada, no funciona... :

Este era mi filtro sin el $_GET:
Código PHP:
Ver original
  1. if (isset ($_POST['ModelInput'])) {
  2.     $ModelInput = $_POST['ModelInput'];
  3.    
  4.     if ($ModelInput !=''){
  5.         if($DataFilter!="") {
  6.             $DataFilter .= " AND ";
  7.         }
  8.         $DataFilter .= "Body_id = '" . $ModelInput ."' ";
  9.     }
  10. } else {
  11.     $ModelInput = '';
  12. }

Y este con el $_GET:
Código PHP:
Ver original
  1. if (isset ($_POST['ModelInput'])) {
  2.    
  3.     if($beginning = 0){
  4.         $ModelInput = $_POST['ModelInput'];
  5.     }else{
  6.         $beginning = (($getPage - 1) *$SetNumberOnPage);
  7.         $ModelInput = $_GET['ModelInput'];
  8.     }
  9.     if ($ModelInput !=''){
  10.         if($DataFilter!="") {
  11.             $DataFilter .= " AND ";
  12.         }
  13.         $DataFilter .= "Body_id = '" . $ModelInput ."' ";
  14.     }
  15. } else {
  16.     $ModelInput = '';
  17. }
  #7 (permalink)  
Antiguo 06/09/2013, 03:01
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Paginación con filtros casi acabada, pequeño fallito q me atasca

Avanzando:

Bueno aparte de que no sé si tengo que poner el if con el GET dentro de cada filtro como he puesto arriba de ejemplo con el filtro ModelInput, he descubierto que la línea de la paginación no es correcta del todo porque no pasa el filtro, pensé q al pasar la página se pasaba el filtro tb pero no:

Código PHP:
Ver original
  1. "<a href ='{$_SERVER['PHP_SELF']}?page=".$cont."'>$cont</a> ";

aunque no se muy bien como ponerlo en código, he intentado lo siguiente q creo q no andará muy lejos, y a la vez lo he ido combinando con el if del GET dentro de cada filtro y sin el, por lo que he probado un montón de combinaciones y nada, esto es como he intentado pasar el filtro:

Código PHP:
Ver original
  1. //if (($getPage == $total_pages) AND ($total_pages<2)){
  2.                                 if (($total_pages < 0) OR ($getPage < 0)){                      ////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE///
  3.                                     echo "1";                                                   ////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE///
  4.                                 }else{                                                          ////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE///
  5.                                 //This for was out of the new if HR
  6.                                     for($cont = $StartList; $cont <= $StartList + 10; $cont++){
  7.                                         if ($cont == $getPage) {
  8.                                             echo "<a class='bold' href ='{$_SERVER['PHP_SELF']}?page=".$cont."&DataFilter=".$ModelInput."'>$cont</a>";
  9.                                             //echo "<a class='bold' href ='Screen2List2.php?page=".$cont."&ModelInput=".$ModelInput."'>$cont</a>";
  10.                                             //echo "<a class='bold' href ='{$_SERVER['PHP_SELF']}?page=".$cont."&ModelInput=".$ModelInput."'>$cont</a>"; //with this ModelInput is 7 in the second page when I choose one option, so in this way I get to transefer something
  11.                                             //echo "<a class='bold' href ='{$_SERVER['PHP_SELF']}?page=".$cont."&DataFilter=".""."'>$cont</a>";
  12.                                             //echo "<a class='bold' href ='Screen2List2.php?page=".$cont."&DataFilter=".""."'>$cont</a>";
  13.                                         } else {
  14.                                             if($total_pages > 1){               ////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE/////NEW LINE///
  15.                                                 echo "<a href ='{$_SERVER['PHP_SELF']}?page=".$cont."&DataFilter=".$ModelInput."'>$cont</a>";
  16.                                                 //echo "<a href ='Screen2List2.php?page=".$cont."&ModelInput=".$ModelInput."'>$cont</a>";
  17.                                                 //echo "<a href ='{$_SERVER['PHP_SELF']}?page=".$cont."&ModelInput=".$ModelInput."'>$cont</a>"; //with this ModelInput is 7 in the second page when I choose one option, so in this way I get to transefer something
  18.                                                 //echo "<a href ='Screen2List2.php?page=".$cont."&DataFilter=".""."'>$cont</a>";
  19.                                                 //echo "<a href ='Screen2List2.php?page=".$cont."&DataFilter=".$DataFilter."'>$cont</a>";
  20.                                             }  
  21.                                         }
  22.                                     }
  23.                                 }

Hay una de las pruebas en la que he puesot la aclaración, que dependiendo de la opción que coja del filtro me pasa un valor pero luego no se refleja en la página sino que me sigue poniendo en la segunda los valores por defecto de inicio, en la primera página si que funciona como siempre pero en la segunda no.

Esto es lo que me pone arriba en el explorador con otra de las pruebas osea que si que pasa algo pero por alguna razón no funciona en la segunda página a pesar de que esto que pongo es en la segunda página como se puede ver en page=2 :

localhost/Screen2List2.php?page=2&DataFilter=13

Tampoco me queda muy claro si tengo que usar en el href {$_SERVER['PHP_SELF']} o Screen2List2.php o es lo mismo, por eso probé con los dos pero nada...

Desarrollo el código en inglés y las aclaraciones para autoobligarme a practicar, pero vamos creo q se entiende fácil.

Si alguien me puede decir como sería la setencia correcta sobre lo que pregunto, le estaría agradecido.

Muchas gracias.
  #8 (permalink)  
Antiguo 10/09/2013, 03:22
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Paginación con filtros casi acabada, pequeño fallito q me atasca

Ya lo he arreglado, lo pongo por si le sirve a alguien. Lo he arreglado con el comando $_SESSION q me permite guardar el valor seleccionado del usuario para las diferentes páginas y durante más tiempo que $_POST y $_GET, he modificado todos mis filtros d la siguiente forma:

Código PHP:
Ver original
  1. //Category
  2. if (isset ($_POST['CategoryInput'])) {
  3.     $CategoryInput = $_POST['CategoryInput'];
  4. } elseif (isset( $_SESSION['filter']['CategoryInput'] )) {
  5.     $CategoryInput = $_SESSION['filter']['CategoryInput'];
  6. } else {//Nothing
  7. }
  8.  
  9. if (isset($CategoryInput)) {
  10.  
  11.     if ($CategoryInput !=''){
  12.         $_SESSION['filter']['CategoryInput'] = $CategoryInput;                                                    
  13.         if($DataFilter!="") {
  14.             $DataFilter .= " AND ";
  15.         }
  16.         $DataFilter .= "category_id = '" . $CategoryInput . "' ";
  17.     }    
  18. }else {
  19.     $CategoryInput = '';
  20. }

Y mi form, donde muestro por pantalla mis filtros y donde tengo metido el botón buscar he cambiado la primera línea la parte del action por lo siguiente:

Código HTML:
Ver original
  1. <form method="POST" action="<?=$_SERVER['REQUEST_URI']?>">

Mi línea de paginación de mi último post estaba correcta, no es necesario meter el filtro ahi ya con el comando $_SESSION.

Con lo dicho en este último post y todos los anterios teneis una paginación filtrada completa , espero q sirva a los q anden buscando algo parecido ;)
  #9 (permalink)  
Antiguo 10/09/2013, 12:07
 
Fecha de Ingreso: junio-2013
Ubicación: santiago
Mensajes: 34
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Paginación con filtros casi acabada, pequeño fallito q me atasca

hola, sabes yo tengo el mismo problema, pero hay un buscador de por medio, en vez del filtro, y me pasa lo mismo al buscar me muestran 3 paginas de las 10 en total, y al ir a la segunda o tercera esta se vuelve a la principal con las 10 paginas nuevamente.

pero mi codigo es muy distinto al tuyo..
Cita:


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<link href="style.css" rel="stylesheet" type="text/css" />
<link href="paginacion.css" type="text/css" rel="stylesheet">
</head>



<body>
<form width="650" method="POST" action="" name="formulario" id="formulario">
<table>
<tr>
<td width="250px;"><strong>Nombres:</strong> <input type="text" name="busca" id="busca" size="20"></td>
<td width="250px;"><strong>Area:</strong>
<select width="150" name="busca1">
<option value="">Seleccione Area</option>
<option value="Unidad Minería">Unidad Minera</option>
<option value="Casa Matriz">Casa Matriz</option>
<option value="Unidad Teniente">Unidad Teniente</option>
<option value="Unidad Obras Civiles">Unidad Obras Civiles</option>
</select>
</td>
<td width="250px;"><strong>Cargo:</strong> <input type="text" name="busca2" id="busca2" size="20"></td>
<td><input class="enter_buscar" type="submit" value="Buscar"></td>
</tr>

</form>

</br>
<?php
include("db.php");

$conn=get_db_conn();
mysql_query("set names utf8");

if(isset($_GET['page']))
{
$page= $_GET['page'];
}
else
{

$page=1;
}
?>
<br>
<?php
$busca="";
$busca1="";
$busca2="";

//variable vacia para que se inicalize
$busca=trim($_POST['busca']);
$busca1=trim($_POST['busca1']);
$busca2=trim($_POST['busca2']);

//busca despues del espacio vacio
$busca=str_replace(" "," ",$busca);
$busca1=str_replace(" "," ",$busca1);
$busca2=str_replace(" "," ",$busca2);

$consulta="SELECT area,
nombre,
cargo,
ubicacion,
telefono,
fecha_nacimiento,
foto FROM directorio_telefonico where nombre like '%".$busca."%'and area like '%".$busca1."%' and cargo like '%".$busca2."%'";
$datos=mysql_query($consulta,$conn);


$num_rows=mysql_num_rows($datos);


$rows_per_page= 3;


$lastpage= ceil($num_rows / $rows_per_page);

$page=(int)$page;

if($page > $lastpage)
{
$page= $lastpage;
}

if($page < 1)
{
$page=1;
}


$limit= 'LIMIT '. ($page -1) * $rows_per_page . ',' .$rows_per_page;


$consulta .=" $limit";
$directorioTelefonico=mysql_query($consulta,$conn) ;

if(!$directorioTelefonico)
{

die('Invalid query: ' . mysql_error());
}
else
{

?>



<?php while($row = mysql_fetch_assoc($directorioTelefonico))
{ ?>


<tr class="par">
<td>Area:</td>
<td><?php echo $row['area'] ?></td>
</tr>

<tr class="par">
<td>Nombre:</td>
<td><?php echo $row['nombre'] ?></td>
</tr>

<tr class="par">
<td>Cargo:</td>
<td><?php echo $row['cargo'] ?></td>
</tr>

<tr class="par">
<td>Ubicacion:</td>
<td><?php echo $row['ubicacion'] ?></td>
</tr>

<tr class="par">
<td>Telefono</td>
<td><?php echo $row["telefono"]; ?></td>
</tr>

<tr class="par">
<td>Fecha Nacimiento</td>
<td><?php echo date("d/m/y", strtotime ($row["fecha_nacimiento"])); ?></td>
</tr>

<tr class="par">
<td>Foto</td>
<td> <img src="./fotos-prueba-directorio/<?php echo $row["foto"]; ?>" width="120" height="140"> </td>
</tr>


<?php } ?>



<?php

//muestra la paginacion siempre y cuando haya mas de una pagina


if($num_rows != 5)
{
$nextpage= $page +1;
$prevpage= $page -1;

?>

<ul id="pagination-digg">

<?php

if ($page == 0)
{
?>
<li class="previous-off">&laquo; Anterior</li>
<li class="active">1</li>
<?php
for($i= $page+1; $i<= $lastpage ; $i++)
{?>
<li><a href="busca-nombre2.php?page=<?php echo $i;?>"><?php echo $i;?></a></li>
<?php }

//Y SI LA ULTIMA PÁGINA ES MAYOR QUE LA ACTUAL MUESTRO EL BOTON NEXT O LO DESHABILITO
if($lastpage >$page )
{?>
<li class="next"><a href="busca-nombre2.php?page=<?php echo $nextpage;?>" >Siguiente &raquo;</a></li>
<?php
}
else
{?>
<li class="next-off">Next &raquo;</li>
<?php
}
}
else
{

//EN CAMBIO SI NO ESTAMOS EN LA PÁGINA UNO HABILITO EL BOTON DE PREVIUS Y MUESTRO LAS DEMÁS
?>
<li class="previous"><a href="busca-nombre2.php?page=<?php echo $prevpage;?>">&laquo; Anterior</a></li>
<?php
for($i= 1; $i<= $lastpage ; $i++)
{

if($page == $i)
{
?> <li class="active"><?php echo $i;?></li>
<?php
}
else
{
?> <li><a href="busca-nombre2.php?page=<?php echo $i;?>" ><?php echo $i;?></a></li>
<?php
}
}

if($lastpage >$page )
{ ?>
<li class="next"><a href="busca-nombre2.php?page=<?php echo $nextpage;?>">Siguiente &raquo;</a></li>
<?php

}
else
{
?>
<li class="next-off">Siguiente &raquo;</li>

<?php
}
}
?>
</ul>
</div>
<?php

}
}

?>
</table>
<body>
</html>
  #10 (permalink)  
Antiguo 11/09/2013, 02:58
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 10 años, 10 meses
Puntos: 5
Respuesta: Paginación con filtros casi acabada, pequeño fallito q me atasca

Ese problema es porque cuando clickeas en la segunda página la variable que has posteado se pierde o al menos es lo que me pasaba a mi, de tal manera que te sirve para la primera página sólo, a mi se me arregló usando el comando $_SESSION que hace que se te guarde la variable toda la sesión d tal manera que te sirve para la segunda página tb. Primero compruebas si existe $_POST y luego la metes en $_SESSION, fijate en mi último mensaje d este hilo en la estrutura del código dónde pongo //Category y como uso el $_SESSION e intenta adaptarlo a tu código y lo que buscas.

De todas formas siendo honesto llevo poco más d un par de meses en esto de programación y no controlo mucho pero con la experiencia q he tenido con mis filtros es lo q te diría q te pasa.

Prueba a ver con $_SESSION, seguro q se te soluciona al menos en parte si no del todo.

Suerte, salu2.

Etiquetas: filtros, pequeño, select, sql, variable
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 22:11.