Problema con paginación en PHP

  • Autor Autor newmesis
  • Fecha de inicio Fecha de inicio
N

newmesis

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola amigos mi problema es el siguiente
engo este codigo

PHP:
<?php
/*
* autor: Abraham Zenteno Sánchez
* mail:  abzenteno@gmail.com

* page: http://abzenteno.blogspot.com
*/
$host = "localhost";
$user = "root";
$passwd = "colocolo";
$database = "tag";

//provando conexion con mysql
$db = mysql_connect($host,$user,$passwd);

//provando conexion con la base de datos
@mysql_select_db($database,$db);

$rows_for_page = 6; //numero de registros a mostra
$sql = "SELECT * FROM picture";
$result = mysql_query($sql, $db);
//total de registros existentes en la tabla
$total_records = @mysql_num_rows($result);

//total de paginas
$pages = ceil($total_records / $rows_for_page);

@mysql_free_result($result);

//si no existe por GET la var screen coloca por defecto el valor de 0
if (!isset($_GET['screen']))
  $screen = 0;
//de lo contrario asigna el valor por get a $position
else
  $position = (int)$_GET['screen'];

//comenzando el paginado
$start = $screen * $rows_per_page;
//consulta ala db por limites
$sql = "SELECT * FROM picture order by id ASC LIMIT ".$position.",".$rows_for_page;
//ejecuta el query
$result = mysql_query($sql, $db);
//resultados de la consulta (total)
$rows = @mysql_num_rows($result);

//imprime registros
for ($i = 0; $i < $rows; $i++) {
  $title = mysql_result($result,$i,0);
  $content = mysql_result($result,$i,1);
  echo "<h1> $title </h1>
      <br>
      <p>$content</p><br>";
}
//comienza el paginado
echo '<p><hr></p>
<div style="width:100%; text-align:center;">';
//si posicion es mayor o igual a 1 quiere decir que muestre la parte Primero y Anterior de la paginación
if ($position >= 1) {
  $url = "busquedas.php?screen=0";
  echo "<a href=\"$url\">Primero</a>\n";
  //para que el preius no termine con valor 0
   $url = "busquedas.php?screen=" .($position-1);
  echo "<a href=\"$url\">Anterior</a>\n";
}
//sirve para expandir el prollecto para poder paginar de la manera (Primero Anterior | 0 | 1 | 2 | 3 | Siguiente Ultimo)
/*for ($i = 0; $i < $pages; $i++) {
  $url = "busquedas.php?screen=" . $i;
  echo " | <a href=\"$url\">$i</a> | ";
}*/

//muestra total de resultados 1 de N
echo '<strong>'.($position+1).' de '.$pages.' </strong>';

//si position es menor a el valor entre los parentesis muestra la parte (Siguiente Ultimo)
if ($position < ($pages-1)) {
  $url = "busquedas.php?screen=" . ($position+1);
  echo "<a href=\"$url\">Siguiente</a>\n";
  $url = "busquedas.php?screen=" . ($pages-1);
  echo "<a href=\"$url\">Ultimo</a>\n";
}
echo '</div>';
?>

el problema esque me muestra bien en la pagina 1 todos mis post ejemplo
1,2,3,4,5 cuando le doy a sieguiente pasa a la pagina 2 pero me muestra desde las 2 en adelante ejemplo 2,3,4,5,6 y asi noc en que estoy mal ayuda plis
 
Ésta linea:

PHP:
$sql = "SELECT * FROM picture order by id ASC LIMIT ".$position.",".$rows_for_page;

Déjala así:

PHP:
$sql = "SELECT * FROM picture order by id ASC LIMIT ".$position.",".$start;

Es decir cambia "rows_for_page" por "start".

Espero que te sirva

Saludos!
 
gracias amigo lo cambie pero ahora no me muesta los datos (los post) que sera?
 
Bueno, lo analicé y creo que encontré los errores:

Esta línea:
PHP:
$position = (int)$_GET['screen'];

Déjala así:
PHP:
$screen= (int)$_GET['screen'];

Y ésta otra:
PHP:
$sql = "SELECT * FROM picture order by id ASC LIMIT ".$position.",".$rows_for_page;

Así:
PHP:
$sql = "SELECT * FROM picture order by id ASC LIMIT ".$start.",".$rows_for_page;

Ahora sí tiene que funcionar jeje

Saludos!
 
Última edición:

Xd amigo lo cambie pero ahora me da otro error me muestra de a 1 al ponerle siguiente se le agrega el post 2 quedando el 1 y 2 disculpa por molestar si no fuera porque tengo que entregarlo como trabajo en la u

isculpa no avia visto el ultimo comentario pero tampoko me resulto ahora se queda pegado siempre en el 1 screem=1
 
Estás usando nombres distintos: $rows_for_page y $rows_per_page

Cambia
PHP:
$start = $screen * $rows_per_page;

Por
PHP:
$start = $screen * $rows_for_page;

Saludos
 
Creo que el fallo es por que hay nombres que no son iguales en el código, revisa lo que te dice lucianoche
 
gracias por las respuesta bueno cambie los errores pero sige con errores pero se acerca la solucion ahor me aparecen los post ben todo bien solo que no funciona el siguiente porque pasa solo hsta el screem=1 si le pongo siguiente no avanza queda ai pero si lo recorro manualmente desde el navegador busquedas.php?screen=1,busquedas.php?screen=2,busquedas.php?screen=3 etc me aparece todo bien

Lo soluciones....

encontre otro codigo muy similar que entendi bastante mejor y me resulto a la perfeccion
muchisimas gracias por las respuestas y la dedicacion