Foros del Web » Programando para Internet » PHP »

Problema con paginador PHP

Estas en el tema de Problema con paginador PHP en el foro de PHP en Foros del Web. Hola, necesito paginar registros , el código funciona bien, me muestra la cantidad de registros que solicito , pero al hacer clik en los links ...
  #1 (permalink)  
Antiguo 23/04/2013, 01:49
 
Fecha de Ingreso: abril-2013
Mensajes: 7
Antigüedad: 11 años, 6 meses
Puntos: 1
Pregunta Problema con paginador PHP

Hola, necesito paginar registros , el código funciona bien, me muestra la cantidad de registros que solicito , pero al hacer clik en los links para pasar a la siguente página, me aparece en blanco, y si vuelvo a la página 1 , también está en blanco. soy nuevo en esto y cualquier orientación me sería útil. dejo el codigo:

<link href="css/css_select.css" rel="stylesheet" type="text/css">
<?php
$conexion = mysql_connect("localhost","root","");
mysql_select_db("archivo",$conexion);
@$buscar_region=$_POST['buscar_region'];
@$buscar_categoria= $_POST['buscar_categoria'];

$rst_productos=mysql_query("SELECT * FROM datos",$conexion);
$num_registros=(mysql_num_rows($rst_productos));
if ($num_registros==0) {
echo "No hay resultados para mostrar";
mysql_close($conexion);
exit();
}

$registros=3;
@$pagina=$_GET['num'];
if(is_numeric($pagina))
$inicio=(($pagina-1)*$registros);
else
$inicio=0;

$rst_productos=mysql_query("SELECT * FROM datos WHERE region = '$buscar_region' and categoria='$buscar_categoria' LIMIT $inicio, $registros" ,$conexion) ;


if ($buscar_region==="chile"){
$rst_productos=mysql_query("SELECT * FROM datos WHERE categoria ='$buscar_categoria' LIMIT $inicio, $registros" ,$conexion) ;

}


if ($buscar_categoria==="todas_categorias"){
$rst_productos=mysql_query("SELECT * FROM datos WHERE region = '$buscar_region'LIMIT $inicio, $registros",$conexion) ;

}

if ($buscar_region==="chile" && $buscar_categoria==="todas_categorias"){
$rst_productos=mysql_query("SELECT * FROM datos LIMIT $inicio, $registros", $conexion) ;

}
$paginas=ceil($num_registros/$registros);




echo "<table border=0 align=center>";


while ($f = mysql_fetch_array($rst_productos))
{




echo "<table border=\"0\" align=\"left\">
<tr>
<td width=\"120\" height=\"90\" >
<div id=\"divtd1\" ><img src=\"{$f["logo"]}\" width=\"120\" heigth=\"90\"></div></td>
</tr>
<tr>
<td border=0><div id=divtd><div class=datos>".$f["nombre_fb"]." </div>
<div class=datos2>".$f["categoria"]."</div>
<div class=datos2>".$f["region"]."</div>
<div class=datos2>Fono: ".$f["fono"]."</div>
<div class=\"datos2\">WEB:<a href=\"{$f["sitio_web"]}\" target=\"_blank\">{$f["sitio_web"]}</a></div>
<div class=\"datos2\">FB:<a href=\"{$f["link_fb"]}\" target=\"_blank\">Ir a Facebook</a></div>





</div> </td>";


}

echo "</table>";

for ($cont=1;$cont<=$paginas;$cont++)
{
if($cont==$pagina)
echo $cont ." ";
else
echo "<a href='buscar.php?num=".$cont. "'>$cont</a> ";
}
?>
  #2 (permalink)  
Antiguo 23/04/2013, 02:41
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Problema con paginador PHP

Fijate bien en lo que haces.

Primero llamas la lista con dos parametros

@$buscar_region=$_POST['buscar_region'];
@$buscar_categoria= $_POST['buscar_categoria'];

esto hace la selección de registros a mostrar y los muestra.

Cuando construyes el link para ir a la pagina siguiente solo pasas un parametro

echo "<a href='buscar.php?num=".$cont. "'>$cont</a> ";

Con solo ese dato no puedes volver a hacer la consulta y mostrar nuevos registros.

Estas usando @ delante de las variables:

Manual
Cita:
Operadores de control de errores

PHP soporta un operador de control de errores: el signo de arroba (@). Cuando se antepone a una expresión en PHP, cualquier mensaje de error que pueden ser generado por esa expresión será ignorado.

Si se ha establecido una función controladora de errores personalizada con set_error_handler() entonces todavía será llamada, pero este controlador de errores personalizado puede (y debe) llamar a error_reporting() el cual devolverá 0 cuando la llamada que provocó el error fue precedida por el signo @.

Si la propiedad track_errors está activada, cualquier mensaje de error generado por la expresión será guardada en la variable $php_errormsg. Esta variable se sobrescribe en cada error, así que se debe comprobar antes si se desea utilizar.
Si lo quitas vas a ver los errores, ocultar errores en tiempo de programación nunca es buena idea, puesto que te auto engañas ... lo bueno es ver todo lo que esta pasando.

Concretamente en este caso sabrias que

$buscar_region=$_POST['buscar_region'];
$buscar_categoria= $_POST['buscar_categoria'];

cuando entras en la segunda pagina no recibes esos datos.

Deberías plantearte la PPOO progrmacón orientada a objetos y/o el uso de session que te permitiria optimizar el acceso al servidor de bbdd... de la manera que lo haces cada pagina que pides empieza todo des de cero es como una busqueda nueva...

Si no te lo panteas modifica tu codigo para que pase todos los parametros necesaris para la busqueda

Código PHP:
Ver original
  1. $buscar_region=$_REQUEST['buscar_region'];
  2. $buscar_categoria= $_REQUEST['buscar_categoria'];
  3.  
  4. ....
  5.  
  6. echo "<a href='buscar.php?num=".$cont. ".&buscar_region=".$buscar_region."&buscar_categoria=".$buscar_categoria."'>$cont</a> ";

Ahora estaras mandado por get, por eso cambio $_POST por $_REQUEST, todos los datos necesarios....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 03/06/2013, 22:06
 
Fecha de Ingreso: abril-2013
Mensajes: 7
Antigüedad: 11 años, 6 meses
Puntos: 1
Respuesta: Problema con paginador PHP

Gracias, me sirvio mucho la respuesta para comprender mejor. Muy agradecido.

Etiquetas: mysql, paginador, registro, resultados, select, sql
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 07:37.