Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/09/2013, 07:53
Novato2013
 
Fecha de Ingreso: junio-2013
Ubicación: Madrid
Mensajes: 61
Antigüedad: 11 años, 6 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.