Comunidad de diseño web y desarrollo en internet online

Paginación

Citar            
MensajeEscrito el 12 Feb 2012 09:56 am
Hola a tod@s.

Tengo una página que muestra los resultados de una base de datos Mysql y que para filtrar los mismos utilizo un campo de busqueda y un select donde selecciono la población para poder ver solo los registros que cumplen dichas condiciones, lo que hago realmente es filtrar los registros, ESTO FUNCIONA BIEN.

Ahora añado una clase para paginar (Zebra_Pagination.php) la implemento en mi código y aparece la misma, le digo que me págine 5 registros por página y me lo hace bien.

Mi problema es el siguiente cuando pagina el paginador me salen en la primera página los primeros 5 registros correctamente filtrados pero al cambiar de página por ejemplo (cuando cambio con el paginador de la página 1 a la 2) lo que me sale son igualmente 5 registros pero sin filtrar osea me saca del registro 6 a 10 pero sin filtrar ni por el campo de busqueda ni por el select, me saca los registros sin importar la población que he seleccionado ni el criterio de busqueda.

Se que en algún lugar me falta poner algún parametro para que el paginador siga utilizando el filtrado que le he hecho a la tabla y me lo mantega cuando cambio de página, no obstante despues de haber probado todo lo que alcanza mis conocimientos no doy con ello, alguien me podia decir en que lugar debo poner ese parametro y como debo ponerlo.

Necesito ayuda llevo muchas horas con esto y ya no se ni lo que he probado.

Gracias a tod@s.

Código PHP :

<?php
$conexion = mysql_connect('localhost', 'root', '');
mysql_select_db('general');
?>

 <?php
 

           $records_per_page = 5; 
    
       // Incluye la clase de paginación
        require '../Zebra_Pagination.php';

        // Instancia del objeto paginación
        $pagination = new Zebra_Pagination();
      
      
 
  // Recuperar el número total de registros en la tabla
       $result = mysql_query("SELECT * FROM actividades", $conexion);
        $num_rows = mysql_num_rows($result);




      
      

        // Pasar el número total de registros a la clase de paginación
        $pagination->records($num_rows);

        // Registros por página
        $pagination->records_per_page($records_per_page);
 

 
 ?>


<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Reporte de Propiedades</title>

<!--Enlaces a los css necesarios-->
      <link rel="stylesheet" href="../reset.css" type="text/css">

        <link rel="stylesheet" href="../style.css" type="text/css">

        <link rel="stylesheet" href="../Zebra_Pagination.css" type="text/css">






</head>
<body>

 <table width="765" height= 30 border="1">
  <tr>
    <td><?php $pagination->render();?></td>
  </tr>
</table>
   
        
        

<table width="765" height="30" border="0">
<td>
<form name="form1" method="post" action="PaginadorLocal.php">
<font color="#800000">Buscar:&nbsp;&nbsp;&nbsp;</font>
<input name="txtBusqueda" type="text" size="30" style="border-width: 2px;  font-size:13pt; font-weight:bold;color: #800000;">
     
<font color="#800000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Población: &nbsp;&nbsp;&nbsp;</font> 
   <select name="selCiudad" id="selCiudad" style class="Guias2">
      <option value="-1" selected>Todas las poblaciones</option>
      
<?php
   $tablapoblaciones = mysql_query("SELECT * FROM poblaciones ORDER BY poblacion ASC"); // Seleccionamos las ciudades de la tabla ciudades
   while ($registropoblacion = mysql_fetch_array($tablapoblaciones)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
?>

<option value="<?php echo $registropoblacion['Id']; ?>"><?php echo $registropoblacion['Poblacion']; ?></option>

<?php
   } // termina la zona de repeticion
   mysql_free_result($tablapoblaciones); // se libera la memoria usada por la tabla
   

?>
   </select>
    
   
   </label>
   <input type="submit" name="cmdBuscar" id="cmdBuscar" value="BUSCAR">
     
</form>

</td>
</table>

  <table width="765" height="80" border="0">
  <?php
$sql= "SELECT * FROM actividades, poblaciones WHERE actividades.Actividades = 'Hosteleria' and actividades.idpoblacion = poblaciones.id ";
if (isset($_POST['txtBusqueda'])) {
   $sql .= " AND actividades.NombreComer LIKE '%" . $_POST['txtBusqueda'] . "%' ";
   if (intval($_POST['selCiudad']) > 0) {
      $sql .= " AND actividades.idpoblacion = '" . intval($_POST['selCiudad']) . "'";
   }
}
$sql .= " ORDER BY NombreComer LIMIT
" . (($pagination->get_page() - 1) * $records_per_page) . ', ' . $records_per_page . '
        ';

$tabla = mysql_query($sql);





while ($registro = mysql_fetch_assoc($tabla)) {
?>
        <tr>
          <td><a href="<?php echo $registro['Url']; ?>"><?php echo $registro['NombreComer']; ?>"></a></td>
        </tr>
        <tr>
          <td width="765" height="0"></td>
        </tr>
        <?php
}
mysql_free_result($tabla);
mysql_close($conexion);

 echo "$num_rows Rows\n"; // esto lo he puesto para comprobar cuantos registros me encuentra

?>
        
    </table>
   


</body>
</html>

Por Ra120354

12 de clabLevel



 

msie8
Citar            
MensajeEscrito el 12 Feb 2012 04:07 pm
No sé mucho de zebra_pagination (no sé nada). Pero no veo como va a paginar si no usas $_GET, deberías usar $_GET para saber en que página está y así obtener los resultados de la mencionada.
Por ejemplo, yo remplazaría esto:

Código PHP :

$result = mysql_query("SELECT * FROM actividades", $conexion);
$num_rows = mysql_num_rows($result);
$pagination->records($num_rows);
$pagination->records_per_page($records_per_page);

Por esto:

Código PHP :

// Resultados a mostrar por pagina
$resultados_por_pagina = 5;

// Si $_GET['pagina'] existe entonces tomaremos el valor entero de la misma
$pagina = isset($_GET['pagina']) intval($_GET['pagina']) : 0;

// esto es por motivos de seguridad
$pagina = $pagina < 0 ? 0 : $pagina;

// Prefiero usar COUNT porque hace que la consulta sea más rápida
// Para que usarás paginación si de todos modos obtienes todos los datos en una consulta?
// Demoraría lo mismo en cargar que si no pusieras paginación
$total_query = mysql_query("SELECT COUNT(`id`) AS `acts` FROM `actividades`");

// Con limit obtienes los resultados que corresponden a dicha página
// Limit ayuda a que la consulta sea más rápida
$result = mysql_query("SELECT * FROM actividades LIMIT ".$pagina*$resultados_por_pagina.",".$resultados_por_pagina, $conexion);

// Obtengo la cantidad total de 'actividades'
$total = mysql_fetch_assoc($total_query);

// esto ya sabras tu haha
$pagination->records($total['acts']);
$pagination->records_per_page($resultados_por_pagina);


No sé si me entiendas bien, cualquier cosa dime

Por Night~

43 de clabLevel



Genero:Masculino  

Geek, Gamer, Otaku

chrome
Citar            
MensajeEscrito el 12 Feb 2012 08:26 pm
Night he puesto lo que tu dices y funciona exactamente igual que lo hacia antes, ya que me página bien los 5 primeros pero al cambiar de página con el páginador sigue saliendo la cantidad de registros que tiene que páginar osea 5 pero si yo he elegido por ejemplo la población Valencia en el select, los 5 primeros son de Valencia , pero al cambiar la página me salen otros 5 pero de cualquier ciudad, pierde por decirlo de algún modo el filtrado que aplico utilizando el select o el txt_Busqueda, el problema debe de ser un parametro que no consigo encontrar ni tampoco sabria donde ponerlo cuando lo encuentre ya que soy muy novato en esto, así que si puedes ayudarme te lo agradecere.

Por Ra120354

12 de clabLevel



 

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.