Foros del Web » Programando para Internet » PHP »

Otro problema con paginación

Estas en el tema de Otro problema con paginación en el foro de PHP en Foros del Web. Bueno, ayer pude solventar un problema que tenía con éste código y ahora surgió otro, el tema es que cuando crea las páginas no me ...
  #1 (permalink)  
Antiguo 12/06/2012, 10:55
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 11 años, 10 meses
Puntos: 1
Otro problema con paginación

Bueno, ayer pude solventar un problema que tenía con éste código y ahora surgió otro, el tema es que cuando crea las páginas no me muestra bien las noticias, es decir, yo configuré para que muestre 6 como máximo 6 noticias por página, pero ahora me muestra siempre 6 noticias por página.
Por ejemplo, yo tengo 7 noticias en mi base de datos, en la primera página me muestra de la 1 a la 6 y en la segunda de la 2 a la 7.

Qué podrá ser? Les dejo el código para ver si alguien puede ayudarme.

Código PHP:
Ver original
  1. <?php
  2. /*
  3. * autor:
  4. * mail:  
  5.  
  6. * page: creditos
  7. */
  8. $host = "host";
  9. $user = "user";
  10. $passwd = "pass";
  11. $database = "demo";
  12.  
  13. //provando conexion con mysql
  14. $db = mysql_connect($host,$user,$passwd);
  15.  
  16. //provando conexion con la base de datos
  17. @mysql_select_db($database,$db);
  18.  
  19. $rows_for_page = 6; //numero de registros a mostra
  20. $sql = "SELECT * FROM noticia";
  21. $result = mysql_query($sql, $db);
  22. //total de registros existentes en la tabla
  23. $total_records = @mysql_num_rows($result);
  24.  
  25. //total de paginas
  26. $pages = ceil($total_records / $rows_for_page);
  27.  
  28.  
  29. //si no existe por GET la var screen coloca por defecto el valor de 0
  30. if (!isset($_GET['pagina']))
  31.   $position = 0;
  32. //de lo contrario asigna el valor por get a $position
  33. else
  34.   $position = (int)$_GET['pagina'];
  35.  
  36. //comenzando el paginado
  37. $start = $position * $rows_per_page;
  38. //consulta ala db por limites
  39. $sql = "SELECT * FROM noticia order by id ASC LIMIT ".$position.",".$rows_for_page;
  40. //ejecuta el query
  41. $result = mysql_query($sql, $db);
  42. //resultados de la consulta (total)
  43. $rows = @mysql_num_rows($result);
  44.  
  45. //imprime registros
  46. for ($i = 0; $i < $rows; $i++) {
  47.   $titulo = mysql_result($result,$i,1);
  48.   $subtitulo = mysql_result($result,$i,2);
  49.   echo "<div class='col1 marg_right1'><h3 class='color1'>$titulo</h3>" ;
  50.   echo "<br />" ;
  51.   echo "<p>" ;
  52.   echo "<img src=noticias/images_bd.php?id=$mostrador[id]&tam=2 class=alignleft width='80' height='60' >" ;
  53.   echo "</p>" ;
  54.   echo "<p>$subtitulo</p></div>" ;
  55. }
  56. //comienza el paginado
  57. echo '<p><hr></p>
  58. <div style="width:100%; text-align:center;">';
  59. //si posicion es mayor o igual a 1 quiere decir que muestre la parte Primero y Anterior de la paginación
  60. if ($position >= 1) {
  61.   $url = "novedad.php?pagina=0";
  62.   echo "<a href=\"$url\">Primero</a>\n";
  63.   //para que el preius no termine con valor 0
  64.    $url = "novedad.php?pagina=" .($position-1);
  65.   echo "<a href=\"$url\">Anterior</a>\n";
  66. }
  67. //sirve para expandir el prollecto para poder paginar de la manera (Primero Anterior | 0 | 1 | 2 | 3 | Siguiente Ultimo)
  68. /*for ($i = 0; $i < $pages; $i++) {
  69.   $url = "pag_next.php?screen=" . $i;
  70.   echo " | <a href=\"$url\">$i</a> | ";
  71. }*/
  72.  
  73. //muestra total de resultados 1 de N
  74. echo '<strong>'.($position+1).' de '.$pages.' </strong>';
  75.  
  76. //si position es menor a el valor entre los parentesis muestra la parte (Siguiente Ultimo)
  77. if ($position < ($pages-1)) {
  78.   $url = "novedad.php?pagina=" . ($position+1);
  79.   echo "<a href=\"$url\">Siguiente</a>\n";
  80.   $url = "novedad.php?pagina=" . ($pages-1);
  81.   echo "<a href=\"$url\">Ultimo</a>\n";
  82. }
  83. echo '</div>';
  84. ?>
  #2 (permalink)  
Antiguo 12/06/2012, 13:10
 
Fecha de Ingreso: junio-2012
Ubicación: San Blas
Mensajes: 5
Antigüedad: 11 años, 10 meses
Puntos: 3
Respuesta: Otro problema con paginación

Hola,
soy nuevo por aquí y no sé si podré ayudarte debidamente pero tras revisar tu código puede que el problema lo soluciones si modificas las siguientes líneas:


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



Un saludooo
  #3 (permalink)  
Antiguo 12/06/2012, 13:35
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Otro problema con paginación

Nono, la verdad que no funcionó. Es más, directamente no mostraba nada al pasar la página.

Otra opción?
  #4 (permalink)  
Antiguo 12/06/2012, 13:52
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Otro problema con paginación

Supongo que es por que donde tienes
$sql = "SELECT * FROM noticia order by id ASC LIMIT ".$position.",".$rows_for_page;
debe ser
$sql = "SELECT * FROM noticia order by id ASC LIMIT ".$start.",".$rows_for_page;
  #5 (permalink)  
Antiguo 12/06/2012, 14:22
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Otro problema con paginación

No, así no me cambia ni de noticia, otra opción ?

Gracias de todas formas !
  #6 (permalink)  
Antiguo 12/06/2012, 14:40
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 3 meses
Puntos: 128
Respuesta: Otro problema con paginación

Hola, si cambias esto :

Código PHP:
Ver original
  1. if (!isset($_GET['pagina']))
  2.   $position = 0;
  3. else
  4.   $position = (int)$_GET['pagina'];

$position por 1 en el default ya que luego de eso tu le dices que multiplique 0*6 lo cual sera 0, mira:

Código PHP:
Ver original
  1. $start = $position * $rows_per_page;
  2. // $start = 0 * 6;

Y asi sucesivamente y de pasada realiza lo que te dijo ocp001a


Saludos.


__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #7 (permalink)  
Antiguo 12/06/2012, 15:04
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Otro problema con paginación

Agregando lo que me dicen me envía directamente a la página número 2 y nunca me muestra la noticia número 7 !

Así quedó agregando lo que me dijo bUllan9ebrio y ocp001a

Código PHP:
Ver original
  1. <?php
  2. /*
  3. * autor:
  4. * mail:  
  5.  
  6. * page:
  7. */
  8. $host = "";
  9. $user = "";
  10. $passwd = "";
  11. $database = "";
  12.  
  13. //provando conexion con mysql
  14. $db = mysql_connect($host,$user,$passwd);
  15.  
  16. //provando conexion con la base de datos
  17. @mysql_select_db($database,$db);
  18.  
  19. $rows_for_page = 6; //numero de registros a mostra
  20. $sql = "SELECT * FROM noticia";
  21. $result = mysql_query($sql, $db);
  22. //total de registros existentes en la tabla
  23. $total_records = @mysql_num_rows($result);
  24.  
  25. //total de paginas
  26. $pages = ceil($total_records / $rows_for_page);
  27.  
  28.  
  29. //si no existe por GET la var screen coloca por defecto el valor de 0
  30. if (!isset($_GET['pagina']))
  31.   $position = 1;
  32. //de lo contrario asigna el valor por get a $position
  33. else
  34.   $position = (int)$_GET['pagina'];
  35.  
  36. //comenzando el paginado
  37. $start = $position * $rows_per_page;
  38. //consulta ala db por limites
  39. $sql = "SELECT * FROM noticia order by id ASC LIMIT ".$start.",".$rows_for_page;
  40. //ejecuta el query
  41. $result = mysql_query($sql, $db);
  42. //resultados de la consulta (total)
  43. $rows = @mysql_num_rows($result);
  44.  
  45. //imprime registros
  46. for ($i = 0; $i < $rows; $i++) {
  47.   $titulo = mysql_result($result,$i,1);
  48.   $subtitulo = mysql_result($result,$i,2);
  49.   echo "<div class='col1 marg_right1'><h3 class='color1'>$titulo</h3>" ;
  50.   echo "<br />" ;
  51.   echo "<p>" ;
  52.   echo "<img src=noticias/images_bd.php?id=$mostrador[id]&tam=2 class=alignleft width='80' height='60' >" ;
  53.   echo "</p>" ;
  54.   echo "<p>$subtitulo</p></div>" ;
  55. }
  56. //comienza el paginado
  57. echo '<p><hr></p>
  58. <div style="width:100%; text-align:center;">';
  59. //si posicion es mayor o igual a 1 quiere decir que muestre la parte Primero y Anterior de la paginación
  60. if ($position >= 1) {
  61.   $url = "noveda.php?pagina=0";
  62.   echo "<a href=\"$url\">Primero</a>\n";
  63.   //para que el preius no termine con valor 0
  64.    $url = "noveda.php?pagina=" .($position-1);
  65.   echo "<a href=\"$url\">Anterior</a>\n";
  66. }
  67. //sirve para expandir el prollecto para poder paginar de la manera (Primero Anterior | 0 | 1 | 2 | 3 | Siguiente Ultimo)
  68. /*for ($i = 0; $i < $pages; $i++) {
  69.   $url = "pag_next.php?screen=" . $i;
  70.   echo " | <a href=\"$url\">$i</a> | ";
  71. }*/
  72.  
  73. //muestra total de resultados 1 de N
  74. echo '<strong>'.($position+1).' de '.$pages.' </strong>';
  75.  
  76. //si position es menor a el valor entre los parentesis muestra la parte (Siguiente Ultimo)
  77. if ($position < ($pages-1)) {
  78.   $url = "noveda.php?pagina=" . ($position+1);
  79.   echo "<a href=\"$url\">Siguiente</a>\n";
  80.   $url = "noveda.php?pagina=" . ($pages-1);
  81.   echo "<a href=\"$url\">Ultimo</a>\n";
  82. }
  83. echo '</div>';
  84. ?>

Y para probar como funciona les dejo

www.jrwebdesign.com.ar/demo/noveda.php
  #8 (permalink)  
Antiguo 12/06/2012, 16:01
Avatar de bUllan9ebrio  
Fecha de Ingreso: enero-2011
Ubicación: Chile
Mensajes: 1.128
Antigüedad: 13 años, 3 meses
Puntos: 128
Respuesta: Otro problema con paginación

Hola, mira analicé y ejecute tu código de manera local, pero no pude arreglarlo dado que tiene muchas falencia, entonces adapté un paginador que cree en Sql Server, y lo adapté a tu código y me funcionó sin problemas, a continuación te dejo mi código, pero te recomiendo que practiques y que veas otros paginadores que existen para MySql ya que nose si el mio será el idea.

Código CSS:
Ver original
  1. <style>
  2. .inline
  3. {
  4.     display:inline;
  5. }
  6. </style>

Y el código php es el siguiente:

Código PHP:
Ver original
  1. /*
  2. * autor: bUllan9ebrio
  3. */
  4. $host = "host";
  5. $user = "user";
  6. $passwd = "pass";
  7. $database = "demo";
  8. $db = mysql_connect($host,$user,$passwd);
  9. @mysql_select_db($database,$db);
  10. $max = mysql_query("SELECT * FROM noticia");
  11. $total = @mysql_num_rows($max);
  12. extract($_REQUEST);
  13. if ($pagina!=1)
  14. {
  15.     $inicio=$pagina*6-5;
  16.     $fin=6;
  17. }
  18. else
  19. {
  20.     $inicio=0;
  21.     $fin=6;
  22. }
  23. if ($Enviar=="")
  24. {
  25.     $inicio=0;
  26.     $fin=6;
  27. }
  28. $sql =mysql_query("SELECT * FROM noticia order by id ASC LIMIT ".$inicio.",".$fin);
  29. while($rs=mysql_fetch_array($sql))
  30. {
  31.     echo
  32.         '
  33.                 <h1>'.$rs['1'].'</h1>
  34.                 <br>
  35.         ';
  36. }
  37. for($i=1;$i<=($total/6);$i++)
  38. {
  39.     echo
  40.     '
  41.         <form method="post" margin="0" class="inline">
  42.             <input type="hidden" name="pagina" value="'.$i.'">
  43.             <input type="submit" value="'.$i.'" name="Enviar">
  44.         </form>
  45.     ';
  46. }

Espero que te sirva y ojalá sigas mi recomendación , saludos.



__________________
Si no vivimos como pensamos, pronto empezaremos a pensar como vivimos.
Más vale un Gracias sincero, que un número que aumente "popularidad" ¬¬°

Universidad de chile, campeón
  #9 (permalink)  
Antiguo 12/06/2012, 18:47
 
Fecha de Ingreso: junio-2012
Mensajes: 46
Antigüedad: 11 años, 10 meses
Puntos: 1
Respuesta: Otro problema con paginación

Gracias bUllan9ebrio pero al intentar ejecutarlo me tira el siguiente error

Parse error: syntax error, unexpected T_STRING on line 16 que es la siguiente.

Código PHP:
Ver original
  1. $inicio=$pagina*6-5;

Te aclaro que dejé el archivo tal cual está, solo agregue el <?php y lo cerre ?>

Etiquetas: mysql, 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 01:55.