Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Paginacja
Forum PHP.pl > Forum > Przedszkole
b_chmura
Witam
Nie jestem pewien co do swojego systemu paginacji...
Chciałbym abyście go prześledzili i zauważyli czy coś jest nie tak.
(czasem dziwnie się zachowuje... te różne kombinacje ze względu na to gdy $po = 1)
kod:
  1. <?php
  2. $page = $_GET['page'];
  3. $page = ($page < 1 or empty($page))? 0: $page;
  4. $po = 5;
  5. $page = $po*$page;
  6. $page = ($page <= 0)? 1: $page;
  7. $stron  = round($cnt/$po);
  8.  
  9. if($po == 1)
  10. { 
  11. $plus = 0;
  12. $i = 1;
  13. } 
  14. else 
  15. { 
  16. $plus = 1; 
  17. $i = 0;
  18. }
  19.  
  20. while($i <= $stron)
  21. {
  22. if($i*$po <= $cnt) 
  23. {
  24. echo '<a href="?page='.$i.'">'.($i+$plus).'</a> ';
  25. }
  26. $i++;
  27. }
  28.  
  29. if($page == 1)
  30. {
  31. $page = 0;
  32. }
  33. elseif($page > 1)
  34. {
  35. $page = ($page-1);
  36. }
  37. ?>

Gdzie:
$page - liczba od którego rekordu ma być wyświetlana treść
$po - limit wyświetlanych rekordów począwszy od $page
$cnt - suma wszystkich rekordów w bazie
NuLL
Temat: Pager stronicowanie - troche prosciej guitar.gif
b_chmura
czy ja wiem czy prościej? moim zdaniem zdecydowanie nie.
Brak zadowalającej odpowiedz zmusił mnie do poświecenia sporo czasu by efekt był zadowalający.
Poniżej przestawiam funkcję która paginuje wyniki z bazy i moim skromnym zdaniem działa prawidłowo (mogę się mylić dużo czasu = dużo pomyłek)

Kod PHP:
  1. <?php
  2. function paginacja($cnt, $start=5)
  3. {
  4. $page = $_GET['page'];
  5.  
  6. if($page == 0 OR empty($page))
  7. {
  8. $page = 1;
  9. }
  10.  
  11. $show  = $start*$page-$start;
  12. $paginacjaony = $cnt/$start;
  13.  
  14. if(($paginacjaony < round($paginacjaony)) OR ($paginacjaony > round($paginacjaony))) 
  15. { 
  16. $paginacjaony_add = ($paginacjaony+1);
  17. }
  18. elseif($paginacjaony == round($paginacjaony)) 
  19. { 
  20. $paginacjaony_add = $paginacjaony;
  21. }
  22.  
  23. if($page > 1) 
  24. { 
  25. $prewiev = '<input type="button" onclick="self.location.href='?page='.($page-1).''" value="Poprzednia">'; 
  26. } 
  27. else 
  28. { 
  29. $prewiev = '<input type="button" disabled="disabled" value="Poprzednia">';
  30. }
  31.  
  32. if($page > $paginacjaony_add)
  33. {
  34. $error = '<font color="red"><b>Hola Hola troche zadaleko zaszedłeś!</b></font>';
  35. }
  36.  
  37. $i = 1;
  38. while($i <= $paginacjaony_add)
  39. {  
  40. if($page == $i) 
  41. {
  42. $option .= '<option selected value="'.$i.'">'.$i.'</option>'."n";
  43. }
  44. else
  45. {
  46. $option .= '<option value="'.$i.'">'.$i.'</option>'."n";
  47. }
  48. $i++;
  49. }
  50.  
  51. if($page < $paginacjaony) 
  52. { 
  53. $next = '<input type="button" onclick="self.location.href='?page='.($page+1).''" value="Następna">'; 
  54. }
  55. else 
  56. { 
  57. $next = '<input type="button" disabled="disabled" value="Następna">';
  58. }
  59.  
  60. $panel = '<br />
  61. <form method="GET">
  62. '.$prewiev.
  63. <select size="1" name="page">
  64. '.$option.'
  65. </select>
  66. <input type="submit" value="PrzejdĽ"> 
  67. '.$next.'
  68. </form>';
  69.  
  70. $paginacja['error'] = $error;
  71. $paginacja['panel'] = $panel;
  72. $paginacja['page'] = $show;
  73. $paginacja['ile']  = $start;
  74.  
  75. return $paginacja;
  76. }
  77. ?>



  1. <?php
  2. paginacja($suma_wszystkich_rekordów_w_bazie , $ilość_wyświetlanych_wpisów_na_jednej_stronie*)
  3. ?>

* - optymalne (nie podając na stronie będzie się wyświetlać po pięć wyników)


funkcja zwraca nam 4 zmienne w tablicy, odwołujemy się do niej w poniższy sposób:
  1. <?php
  2. //$cnt - liczba wszystkich rekordów
  3. $paginacja = paginacja($cnt);
  4. ?>


Gdzie:
$paginacja['error'] - błąd gdy ktoś podał stronę która przekracza nasz zakres
$paginacja['panel'] - panel przełączania stron
$paginacja['page'] - liczba od której wyświetlanie rekordów ma być rozpoczęta
$paginacja['ile'] - ilość wyświetlanych rekordów na pojedynczej stronie

Przykład działania:
link
lukaszk
Dziękuję skorzystam smile.gif
Znalazłem coś innego co działa
  1. <?php
  2. include "db.php";
  3.  
  4. $limit =5; //Liczba newsów na jednej stronie
  5.  
  6. $strona = $_GET['str']; // Pobranie numeru strony
  7.  
  8.  
  9. if (!isset($strona)) {
  10. $limit1 = 0;
  11. $limit2 = $limit;
  12. } else {
  13. $limit1 = $limit * $strona - $limit;
  14. $limit2 = $limit;
  15. }
  16.  
  17. //Definicja zapytania
  18. $zapytanie = "SELECT * FROM komentarze ORDER BY id_komenta DESC LIMIT $limit1,$limit2";
  19.  
  20.  
  21. if ($r = mysql_query ($zapytanie)) {
  22.  
  23. //Odczytywanie w wyswietlenie kolejnych rekordow.
  24. while ($wiersz = mysql_fetch_array($r)) {
  25.  
  26. print '<a href="paginacja.php?id='.$wiersz['id_komenta'].'"><strong>'.$wiersz['komentarz'].'</strong></a><br />';
  27. echo $wiersz['data_komenta'];
  28. }
  29.  
  30. } else {
  31. die ('<p>Zapytanie nie zosta?o wykonane, bo <b>' . mysql_error() . "</b>. Zapytanie: $zapytanie.</p>");
  32.  
  33. }
  34. echo "<br>";
  35. echo "Strony: ";
  36. list($ile)=mysql_fetch_row(mysql_db_query("test","SELECT count(*) FROM komentarze"));
  37.  
  38. $liczba_stron = $ile / $limit;
  39. $liczba_stron = ceil($liczba_stron);
  40.  
  41. for ($v = 1; $v <= $liczba_stron; $v++) {
  42.  
  43. if ($liczba_stron == 1) {
  44. echo " $v";
  45. } else {
  46. echo "<a href=\"?str=$v\" title=\"Strona $v\">$v</a> ";
  47. }
  48. }
  49. echo "</div>";
  50.  
  51.  
  52.  
  53.  
  54. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.