Foros del Web » Programando para Internet » PHP »

Problema con paginación.

Estas en el tema de Problema con paginación. en el foro de PHP en Foros del Web. Buenas tardes a todos. Veréis,tengo un código de paginación que me funciona perfectamente, salvo en la pagina de buscar. Te explico, yo quiero que me ...
  #1 (permalink)  
Antiguo 03/07/2015, 12:03
 
Fecha de Ingreso: mayo-2015
Ubicación: Pontevedra
Mensajes: 7
Antigüedad: 9 años
Puntos: 0
Problema con paginación.

Buenas tardes a todos.
Veréis,tengo un código de paginación que me funciona perfectamente, salvo en la pagina de buscar.
Te explico, yo quiero que me muestre seis registros por página, y en camisetas por ejemplo, me lo hace perfectamente, me muestra los registros y el numero de enlaces dependiendo del total de registros, pero en la pagina buscar(tipico formulario de busqueda), me busca perfectamente, pero si son varias páginas, en la primera me muestra los seis correspondientes pero al darle a los siguientes me muestra todos los productos que tengo,aunque no tenga nada que ver con la búsqueda, o sea todos y aparecen nuevos enlaces, es como si la primera página funcionara correctamente pero en los siguientes resultados no.

Codigo de una página funcionando correctamente.

$sql=mysql_query("SELECT * from productos WHERE (plataforma='gorras') or ( plataforma='camisetas') ORDER BY id DESC");
$consulta=mysql_query("SELECT * from productos WHERE (plataforma='gorras') or ( plataforma='camisetas') ORDER BY id DESC LIMIT $inicio,$registros;");
$num_registros=mysql_num_rows($sql);
$num_paginas=ceil($num_registros/$registros);

while($filas=mysql_fetch_array($consulta)){
$id=$filas['id'];
$nombre=$filas['nombre'];
$imagen=$filas['imagen'];
$descripcion=$filas['descripcion'];
$pvp=$filas['pvp'];
$plataforma=$filas['plataforma'];
$fecha=$filas['fecha'];
$acumula=$filas['acumula'];
$acumulado=$pvp*$acumula;

?>

<div class="col-xs-6 col-sm-6 col-md-4 ContJuegos">

<div class="col-xs-10 col-xs-offset-1 col-lg-10 col-lg-offset-1 ImagenJuego">
<img src="<?php echo $imagen;?>" alt="imagen_juego" class="img-responsive" style="margin:auto"></img>
</div>


<div class="row">
<div class="col-xs-12 col-md-12 JuegosNombre">
<?php echo $nombre;?>
</div>
</div>


<form action="<?php if($pvp>12){echo 'ver.php';}elseif($pvp<=12){echo 'verCamisetas.php';}?>" method="post" name="ver">
<input name="id" type="hidden" value="<?php echo $id ?>"/>
<input name="imagen" type="hidden" value="<?php echo $imagen?>"/>
<input name="nombre" type="hidden" value="<?php echo $nombre ?>"/>
<input name="pvp" type="hidden" value="<?php echo $pvp?>"/>
<input name="fecha" type="hidden" value="<?php echo $fecha?>"/>
<input name="descripcion" type="hidden" value="<?php echo $descripcion?>"/>
<input name="plataforma" type="hidden" value="<?php echo $plataforma?>"/>
<input name="acumula" type="hidden" value="<?php echo $acumula?>"/>
<input name="acumulado" type="hidden" value="<?php echo $acumulado?>"/>

<div class="row">
<div class="col-xs-12 col-md-12 ContButton">
<button class="boton" type="submit">Más Información</button></form>
</div>
</div>
</div>
<?php }?>
</div>
</div>
</div>

<div class="container">
<div class="row">
<div class="col-xs-12 col-md-6 col-md-offset-3" style="padding:10px;text-align:center">
<?php

if($pagina>1)
echo "<button class='btn btn-default btn-xs'><a href='camisetas1.php?num=".($pagina-1)."'>Anterior</a></button>&nbsp;";

for($cont=1;$cont<=$num_paginas;$cont++){ if($cont==$pagina) echo "<button class='btn btn-default btn-xs' style='background:#808080' disabled='disabled'>$cont</button>&nbsp;";
else
echo "<button class='btn btn-default btn-xs'><a href='camisetas1.php?num=".$cont."'>$cont</a></button>&nbsp;";
}


if($pagina<$num_paginas)
echo "<button class='btn btn-default btn-xs'><a href='camisetas1.php?num=".($pagina+1)."'>Siguient e</a></button>&nbsp;";
?>
</div>
</div>
</div>

Ahora la página buscar que es dónde hace lo que comento arriba.

$buscar=$_POST['buscar'];
$registros=6;
$pagina=$_GET["num"];
if(is_numeric($pagina)){
$inicio=(($pagina-1)*$registros);
} else $inicio=0;

$sql=mysql_query("select * from productos where nombre like '%".$buscar."%'");
$consulta=mysql_query("SELECT * from productos where nombre like '%".$buscar."%' LIMIT $inicio,$registros;");
$num_registros=mysql_num_rows($sql);
$num_paginas=ceil($num_registros/$registros);

if($num_registros==0)echo "Lo sentimos, no hemos encontrado ningún resultado, prueba con otras palabras."; else { while($filas=mysql_fetch_array($consulta)){

$id=$filas['id'];
$nombre=$filas['nombre'];
$imagen=$filas['imagen'];
$descripcion=$filas['descripcion'];
$plataforma=$filas['plataforma'];
$pvp=$filas['pvp'];
$fecha=$filas['fecha'];
$acumula=$filas['acumula'];?>


<div class="col-xs-6 col-sm-6 col-md-4 ContJuegos">

<div class="col-xs-10 col-xs-offset-1 col-lg-10 col-lg-offset-1 ImagenJuego">
<img src="<?php echo $imagen;?>" alt="imagen_juego" class="img-responsive" style="margin:auto"></img>
</div>


<div class="row">
<div class="col-xs-12 col-md-12 JuegosNombre">
<?php echo $nombre;?>
</div>
</div>


<form action="<?php if($pvp>12){echo 'ver.php';}elseif($pvp<=12){echo 'verCamisetas.php';}?>" method="post" name="ver">
<input name="id" type="hidden" value="<?php echo $id ?>"/>
<input name="imagen" type="hidden" value="<?php echo $imagen?>"/>
<input name="nombre" type="hidden" value="<?php echo $nombre ?>"/>
<input name="pvp" type="hidden" value="<?php echo $pvp?>"/>
<input name="fecha" type="hidden" value="<?php echo $fecha?>"/>
<input name="descripcion" type="hidden" value="<?php echo $descripcion?>"/>
<input name="plataforma" type="hidden" value="<?php echo $plataforma?>"/>
<input name="acumula" type="hidden" value="<?php echo $acumula?>"/>
<input name="acumulado" type="hidden" value="<?php echo $acumulado?>"/>

<div class="row">
<div class="col-xs-12 col-md-12 ContButton">
<button class="boton" type="submit">Más Información</button></form>
</div>
</div>
</div>



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

<div class="container">
<div class="row">
<div class="col-xs-12 col-md-6 col-md-offset-3" style="padding:10px;text-align:center">
<?php

if($pagina>1)
echo "<button class='btn btn-default btn-xs'><a href='buscar.php?num=".($pagina-1)."'>Anterior</a></button>&nbsp;";

for($cont=1;$cont<=$num_paginas;$cont++){ if($cont==$pagina) echo "<button class='btn btn-default btn-xs' style='background:#808080' disabled='disabled'>$cont</button>&nbsp;";
else
echo "<button class='btn btn-default btn-xs'><a href='buscar.php?num=".$cont."'>$cont</a></button>&nbsp;";
}


if($pagina<$num_paginas)
echo "<button class='btn btn-default btn-xs'><a href='buscar.php?num=".($pagina+1)."'>Siguiente</a></button>&nbsp;";
?>
</div>
</div>
</div>
  #2 (permalink)  
Antiguo 03/07/2015, 12:58
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con paginación.

Es mala idea usar el método POST en un formulario para búsqueda, porque:

1- Tendrás que buscar la forma de propagar los términos de búsqueda para incluirlos en los enlaces de páginas (justo lo que te está pasando ahora)

2- Los usuarios no podrán añadir a favoritos ni compartir las páginas de resultados por una simple URL

Solución:
- Cambia el método del formulario a GET
- $buscar = $_GET['buscar'];
- En los enlaces de página incluye los términos de búsqueda:
buscar.php?buscar=$buscar&num=$numero_de_pagina
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 06/07/2015, 04:28
 
Fecha de Ingreso: mayo-2015
Ubicación: Pontevedra
Mensajes: 7
Antigüedad: 9 años
Puntos: 0
Respuesta: Problema con paginación.

Antes de nada gracias por responder.
Por otro lado quería comentarte que no entiendo muy bien la segunda parte, lo de incluir los términos de búsqueda, que tendría que copiar el código directamente como lo pones?
  #4 (permalink)  
Antiguo 06/07/2015, 13:18
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con paginación.

Nunca recomendamos copiar y pegar, lo mejor es analizar y entender el código, así te evitarás futuros problemas.
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 06/07/2015, 13:59
 
Fecha de Ingreso: mayo-2015
Ubicación: Pontevedra
Mensajes: 7
Antigüedad: 9 años
Puntos: 0
Respuesta: Problema con paginación.

Ya,si estoy de acuerdo, por eso te digo que no entiendo la segunda parte, lo de incluir los términos de búsqueda. Por eso me gustaría que me lo desmenuzaras un poco más a ver si lo entiendo.
Gracias y un saludo.
  #6 (permalink)  
Antiguo 06/07/2015, 14:46
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problema con paginación.

En esta parte solo estás enviando número de página, pero no estás especifiando lo que se va a buscar.

Código PHP:
Ver original
  1. echo "<a href='buscar.php?num=\"$cont\"'>$cont</a>";

Entonces, como las palabras a buscar (o términos de búsqueda) pueden contener caracteres incompatibles en URL, debes codificarlos e incluirlos en el enlace:

Código PHP:
Ver original
  1. $buscar_url = url_encode($buscar);
  2. for(/* aquí los parámetros de inicio y fin */) {
  3.     echo "<a href='buscar.php?buscar=$buscar_url&num=\"$cont\"'>$cont</a>";
  4. }
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: fecha, formulario, registro, 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 12:18.