Foros del Web » Programando para Internet » PHP »

Problema codigo de paginacion php y mysql

Estas en el tema de Problema codigo de paginacion php y mysql en el foro de PHP en Foros del Web. Estoy usando este codigo de paginacion en php y sql para paginar mis noticias del index. Todo funciona perfecto, exepto 1 problema, tengo 2 noticias ...
  #1 (permalink)  
Antiguo 13/06/2012, 12:16
 
Fecha de Ingreso: junio-2012
Mensajes: 6
Antigüedad: 11 años, 10 meses
Puntos: 0
Problema codigo de paginacion php y mysql

Estoy usando este codigo de paginacion en php y sql para paginar mis noticias del index. Todo funciona perfecto, exepto 1 problema, tengo 2 noticias por pagina, pero al pasar a la siguiente pagina me aparece la segunda noticia de primera en la siguiente pagina, ejemplo "pagina 1 = noticia 1 y 2" "pagina 2 = noticia 2 y 3" "pagina 3 = noticia 3 y 4" y asi susesivamente, lo que quiero es que aparescan 2 y 2 no asi como me aparecen, no se que cambiar para que esto funcione.

Cita:
<?php

$host = "";
$user = "";
$passwd = "";
$database = "";

//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 = 2; //numero de registros a mostra
$sql = "SELECT * FROM noticias2";
$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']))
$paginado = 0;
//de lo contrario asigna el valor por get a $position
else
$position = (int)$_GET['screen'];

//comenzando el paginado

//consulta ala db por limites
$sql = "SELECT * FROM noticias2 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,1);
$content = mysql_result($result,$i,2);
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 = "index.php?screen=0";
echo "<a href=\"$url\">Primero</a>\n";
//para que el preius no termine con valor 0
$url = "index.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 = "index.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 = "index.php?screen=" . ($position+1);
echo "<a href=\"$url\">Siguiente</a>\n";
$url = "index.php?screen=" . ($pages-1);
echo "<a href=\"$url\">Ultimo</a>\n";
}
echo '</div>';
?>
Espero me puedan ayudar con esto, GRACIAS!
  #2 (permalink)  
Antiguo 13/06/2012, 15:44
 
Fecha de Ingreso: julio-2011
Mensajes: 220
Antigüedad: 12 años, 9 meses
Puntos: 72
Respuesta: Problema codigo de paginacion php y mysql

Pues el problema esta en el valor que se asigna a la variable "screen", es decir, la variable que se pasa por los enlaces Anterior y Siguiente. El asunto es asi en la primera página la variable $position toma el valor por defecto 0, despues en el enlace Siguiente se asigna el valor a la variable screen de esta manera.

$url = "index.php?screen=" . ($position+1);
echo "<a href=\"$url\">Siguiente</a>\n";

Con lo que screen tendrá el valor 1 el cual sera asignado a $position en la siguiente página y luego será utilizado en la consulta.

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

Esto equivale a:

$sql = "SELECT * FROM noticias2 order by id ASC LIMIT 1,".$rows_for_page;

Y ahora en el enlace se sumará 1 al valor de $position con lo que la variable screen se enviara a la siguiente página con un valor de 2, por lo tanto en la siguiente consulta trendremos.

$sql = "SELECT * FROM noticias2 order by id ASC LIMIT 2,".$rows_for_page;

Y en la siguiente.

$sql = "SELECT * FROM noticias2 order by id ASC LIMIT 3,".$rows_for_page;

Y asi sucesivamente el valor en la clausula LIMIT irá avanzando de 1 en 1 cuando lo que se desea es que vaya de 2 en 2; para esto hay que sumar y restar 2.

$url = "index.php?screen=" . ($position+2);
echo "<a href=\"$url\">Siguiente</a>\n";

$url = "index.php?screen=" .($position-2);
echo "<a href=\"$url\">Anterior</a>\n";
  #3 (permalink)  
Antiguo 13/06/2012, 16:50
 
Fecha de Ingreso: junio-2012
Mensajes: 6
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema codigo de paginacion php y mysql

Cita:
Iniciado por lubtufano Ver Mensaje
Pues el problema esta en el valor que se asigna a la variable "screen", es decir, la variable que se pasa por los enlaces Anterior y Siguiente. El asunto es asi en la primera página la variable $position toma el valor por defecto 0, despues en el enlace Siguiente se asigna el valor a la variable screen de esta manera.

$url = "index.php?screen=" . ($position+1);
echo "<a href=\"$url\">Siguiente</a>\n";

Con lo que screen tendrá el valor 1 el cual sera asignado a $position en la siguiente página y luego será utilizado en la consulta.

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

Esto equivale a:

$sql = "SELECT * FROM noticias2 order by id ASC LIMIT 1,".$rows_for_page;

Y ahora en el enlace se sumará 1 al valor de $position con lo que la variable screen se enviara a la siguiente página con un valor de 2, por lo tanto en la siguiente consulta trendremos.

$sql = "SELECT * FROM noticias2 order by id ASC LIMIT 2,".$rows_for_page;

Y en la siguiente.

$sql = "SELECT * FROM noticias2 order by id ASC LIMIT 3,".$rows_for_page;

Y asi sucesivamente el valor en la clausula LIMIT irá avanzando de 1 en 1 cuando lo que se desea es que vaya de 2 en 2; para esto hay que sumar y restar 2.

$url = "index.php?screen=" . ($position+2);
echo "<a href=\"$url\">Siguiente</a>\n";

$url = "index.php?screen=" .($position-2);
echo "<a href=\"$url\">Anterior</a>\n";
En parte se soluciono el problema, ahora marca de 2 en 2, pero el problema ahora es que salta de pagina en pagina es decir de la pagina 1 pasa a la pagina 3 de la 3 a la 5 y asi sucesivamente, podrias ayudarme en eso?

Gracias por tu ayuda! ;)
  #4 (permalink)  
Antiguo 14/06/2012, 02:29
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Problema codigo de paginacion php y mysql

Eso porque le das el salto de página abajo.
Código PHP:
Ver original
  1. $url = "index.php?screen=" . ($position+2);
  2. echo "<a href=\"$url\">Siguiente</a>\n";
  3.  
  4. $url = "index.php?screen=" .($position-2);
  5. echo "<a href=\"$url\">Anterior</a>\n";

Por ejemplo, si $position es 1 +2 que tenes definido ahí te va a saltar a 3.


Otro consejo, si queres que te muestre las noticias en noticias.php sin tener que acceder a noticias.php?pagina=1 cambia paginado por position acá:


Código PHP:
Ver original
  1. //si no existe por GET la var screen coloca por defecto el valor de 0
  2. if (!isset($_GET['screen']))
  3. $paginado = 0;
  4. //de lo contrario asigna el valor por get a $position
  5. else
  6. $position = (int)$_GET['screen'];

quedaría así

Código PHP:
Ver original
  1. //si no existe por GET la var screen coloca por defecto el valor de 0
  2. if (!isset($_GET['screen']))
  3. $position = 0;
  4. //de lo contrario asigna el valor por get a $position
  5. else
  6. $position = (int)$_GET['screen'];



En lo personal no me sirvió, ya que tenía el mismo problema que vos en éste momento y no lo pude solventar, pero si encontrás la solución chiflame, que me sería muy útil.

Saludos !
  #5 (permalink)  
Antiguo 14/06/2012, 10:52
 
Fecha de Ingreso: junio-2012
Mensajes: 6
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Problema codigo de paginacion php y mysql

Cita:
Iniciado por roodriv Ver Mensaje
Eso porque le das el salto de página abajo.
Código PHP:
Ver original
  1. $url = "index.php?screen=" . ($position+2);
  2. echo "<a href=\"$url\">Siguiente</a>\n";
  3.  
  4. $url = "index.php?screen=" .($position-2);
  5. echo "<a href=\"$url\">Anterior</a>\n";

Por ejemplo, si $position es 1 +2 que tenes definido ahí te va a saltar a 3.


Otro consejo, si queres que te muestre las noticias en noticias.php sin tener que acceder a noticias.php?pagina=1 cambia paginado por position acá:


Código PHP:
Ver original
  1. //si no existe por GET la var screen coloca por defecto el valor de 0
  2. if (!isset($_GET['screen']))
  3. $paginado = 0;
  4. //de lo contrario asigna el valor por get a $position
  5. else
  6. $position = (int)$_GET['screen'];

quedaría así

Código PHP:
Ver original
  1. //si no existe por GET la var screen coloca por defecto el valor de 0
  2. if (!isset($_GET['screen']))
  3. $position = 0;
  4. //de lo contrario asigna el valor por get a $position
  5. else
  6. $position = (int)$_GET['screen'];



En lo personal no me sirvió, ya que tenía el mismo problema que vos en éste momento y no lo pude solventar, pero si encontrás la solución chiflame, que me sería muy útil.

Saludos !
Pues ya e conseguido otro codigo de paginacion muy facil de usar y 100% editable, si quieres puedes avisarme y te lo envio!
  #6 (permalink)  
Antiguo 14/06/2012, 12:31
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Problema codigo de paginacion php y mysql

Dale, estaría buenisimo ! :D

Etiquetas: mysql, paginacion, registro, sql, tabla
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 15:08.