locomputing
Pagination
Daten aus DatenBank auf mehrere Seiten verteilen, wie geht das?
Beispiel: 30 Einträge in der Datenbank verteilt auf 15 Seiten.
Hier ein ganz einfaches Beispiel:
die foo.php
<?php
  • Datenbank verbindung einfügen

  • // Variablen bestimmen
  • $leiste = isset ( $_GET [ ' leiste ' ] ) ? $_GET [ ' leiste ' ] : ' ' ;
  • $seite = isset ( $_GET [ ' seite ' ] ) ? $_GET [ ' seite ' ] : ' 0 ' ;

  • // Seiten anzahl
  • $pagseite = " 2 " ; // Einträge per Seite


    • // Einträge zählen mit COUNT ( * )
  1. $stmt = $sqli -> prepare ( " SELECT COUNT ( * ) FROM a_table " ) ;
  2. $stmt -> execute ( ) ;
  3. $number = $stmt -> get_result ( ) -> fetch_row ( ) ;
  4. $number = $number [ 0 ] ;
  5. $seiten = ceil ( $number / $pagseite ) ;
  6. $start = $seite * $pagseite ;

  7. $stmt = $sqli -> prepare ( " SELECT spalte1 , spalte2 FROM a_table ORDER BY id DESC LIMIT $start , $pagseite " ) ;
  8. $stmt -> execute ( ) ;
  9. $result = $stmt -> get_result ( ) ;
  10. while ( $row = $result -> fetch_assoc ( ) )

    • // Einträge zählen mit rowCount()
  11. $stmt = $pdo -> prepare ( " SELECT id FROM a_table " ) ;
  12. $stmt -> execute ( ) ;
  13. $number = $stmt -> rowCount ( ) ;
  14. $seiten = ceil ( $number / $pagseite ) ;
  15. $start = $seite * $pagseite ;

  16. $stmt = $pdo -> prepare ( " SELECT spalte1 , spalte2 FROM a_table ORDER BY id DESC LIMIT $start , $pagseite " ) ;
  17. $stmt -> execute ( ) ;
  18. while ( $row = $stmt -> fetch ( ) )
  19. {
  20. echo $row [ ' spalte1 ' ] . ' <br> ' ;
  21. echo $row [ ' spalte2 ' ] . ' <br> ' ;
  22. }

    • // Seitenausgabe
  23. $nog = $seite + 1 ;
  24. for ( $i = 0 ; $i < $seiten ; $i + + )
  25. {
  26. $nog2 = $i + 1 ;
  27. if ( $i = = $seite )
  28. {
  29. $leiste . = ' <td> [ ' . $nog2 . ' ] </td> ' ;
  30. }
  31. else
  32. {
  33. $leiste . = ' <td> <a href = " foo.php ? seite = ' . $i . ' "> ' . $nog2 . ' </a> </td> ' ;
  34. }
  35. }
  36. echo ' <table> <tr> ' ;
  37. echo $leiste ;
  38. echo ' </tr> </table> ' ;
?>
Eignet sich für etwa 2 bis 15 Seitenaufteilungen, bei mehr als 15 Seitenaufteilungen könnte es Optische Probleme geben.
Verkürzte Darstellung: ohne Formatierung, sieht etwa so aus:
Daten aus DatenBank auf mehrere Seiten verteilen.
Hier ein anderes Beispiel:
die foo.php
<?php
  • Datenbank verbindung einfügen

  • if ( isset ( $_GET [ ' seite ' ] ) )
  • {
  • $seite = preg_replace ( " / [ ^ 0 - 9 ] / " , " " , $_GET [ ' seite ' ] ) ;
  • }

  • if ( ! isset ( $seite ) | | $seite = = ' ' )
  • {
  • $seite = 1;
  • }

  • // Seiten anzahl
  • $pagseite = " 2 " ; // Einträge per Seite


    • // Einträge zählen mit COUNT ( * )
  1. $stmt = $sqli -> prepare ( " SELECT COUNT ( * ) FROM a_table " ) ;
  2. $stmt -> execute ( ) ;
  3. $number = $stmt -> get_result ( ) -> fetch_row ( ) ;
  4. $number = $number [ 0 ] ;
  5. $seiten = ceil ( $number / $pagseite ) ;
  6. $start = $seite * $pagseite - $pagseite ;

  7. $stmt = $sqli -> prepare ( " SELECT spalte1 , spalte2 FROM a_table ORDER BY id DESC LIMIT $start , $pagseite " ) ;
  8. $stmt -> execute ( ) ;
  9. $result = $stmt -> get_result ( ) ;
  10. while ( $row = $result -> fetch_assoc ( ) )

    • // Einträge zählen mit rowCount()
  11. $stmt = $pdo -> prepare ( " SELECT id FROM a_table " ) ;
  12. $stmt -> execute ( ) ;
  13. $number = $stmt -> rowCount ( ) ;
  14. $seiten = ceil ( $number / $pagseite ) ;
  15. $start = $seite * $pagseite - $pagseite ;

  16. $stmt = $pdo -> prepare ( " SELECT spalte1 , spalte2 FROM a_table ORDER BY id DESC LIMIT $start , $pagseite " ) ;
  17. $stmt -> execute ( ) ;
  18. while ( $row = $stmt -> fetch ( ) )
  19. {
  20. echo $row [ ' spalte1 ' ] . ' <br> ' ;
  21. echo $row [ ' spalte2 ' ] . ' <br> ' ;
  22. }

    • // Seitenausgabe
  23. function blaettern ( $seite , $maxseite , $url = " foo.php " , $get_site = " ? seite " , $anzahl = 4 )
  24. {
  25. if ( $anzahl % 2 ! = 0 ) $anzahl + + ;
  26. $a = $seite - ( $anzahl / 2 ) ;
  27. $b = 0 ;
  28. $blaetter = array ( ) ;
  29. while ( $b < = $anzahl )
  30. {
  31. if ( $a > 0 AND $a < = $maxseite )
  32. {
  33. $blaetter [ ] = $a ;
  34. $b + + ;
  35. }
  36. else if
  37. (
  38. $a > $maxseite AND ( $a - $anzahl - 2 ) > = 0 )
  39. {
  40. $blaetter = array ( ) ;
  41. $a - = ( $anzahl + 2 ) ;
  42. $b = 0;
  43. }
  44. else if
  45. (
  46. $a > $maxseite AND ( $a - $anzahl - 2 ) < 0 )
  47. {
  48. break ;
  49. }
  50. $a + + ;
  51. }
  52. $return = " " ;
  53. if ( ! in_array ( 1 , $blaetter ) AND count ( $blaetter ) > 1 )
  54. {
  55. if ( ! in_array ( 2 , $blaetter ) ) $return . = '<td> <a title = " Erste Seite " href = " ' . $url . $get_site . ' = 1 " > 1 </a> </td> <td> ... </td> ' ;
  56. else
  57. $return . = '<td> <a href = " ' . $url . $get_site . ' = 1"> 1 </a> </td> ' ;
  58. }
  59. foreach ( $blaetter AS $blatt )
  60. {
  61. if ( $blatt = = $seite ) $return . = '<td> [ ' . $blatt . ' ] </td> ' ;
  62. else
  63. $return . = '<td> <a title = " Seite ' . $blatt . ' " href = " ' . $url . $get_site . ' = ' . $blatt . ' "> ' . $blatt . ' </a> </td> ' ;
  64. }
  65. if ( ! in_array ( $maxseite , $blaetter ) AND count ( $blaetter ) > 1 )
  66. {
  67. if ( ! in_array ( ( $maxseite - 1 ) , $blaetter ) ) $return . = '<td> ... </td> <td> <a title = " Letzte Seite " href = " ' . $url . $get_site . ' = ' . $maxseite . ' "> ' . $maxseite . ' </a> </td> ' ;
  68. else
  69. $return . = '<td> <a title = " Letzte Seite " href = " ' . $url . $get_site . ' = ' . $maxseite . ' "> ' . $maxseite . ' </a> </td> ' ;
  70. }
  71. if( empty ( $return ) )
  72. return " &nbsp; " ;
  73. else
  74. return $return ;
  75. }

  76. echo ' <table> <tr> ' ;
  77. if ( $seite ! = 1 )
  78. {
  79. echo ' <td> <a title = " eine Seite zurück " href = " ? seite = ' . ( $seite - 1 ) . ' "> < </a> </td> ' ;
  80. }

  81. echo blaettern ( $seite , $seiten ) ;

  82. if ( $seite ! = $seiten )
  83. {
  84. echo ' <td> <a title = " eine Seite weiter " href = " ? seite = ' . ( $seite + 1 ) . ' "> > </a> </td> ' ;
  85. }
  86. echo '</tr> </table> ' ;
?>
Eignet sich für hunderte von Seitenaufteilungen.
Verkürzte Darstellung: ohne Formatierung, sieht etwa so aus: