Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Problem ze stronicowaniem małych ilości
Forum PHP.pl > Forum > Przedszkole
d0m1n1k_
Witam,
poniżej prezentuję kod stronicowania wyników z mysql.
Problemem jest podawanie przez skrypt wartości ujemnych -2 -1 0 1 2 3
Gdy jest do pokazania "Porzednia 1 ... 5 6 7 ... 12 Następna" jest ok - a przynajmniej nie zauważyłem problemów
Widoczne jest to przy małych ilościach (np. jak jest do stronicowania jedna czy dwie strony).
W czym może być przyczyna? A może ktoś ma proste i sensowne gotowe rozwiązanie?

  1. <?php
  2. $nbratpage = 25;
  3. if (isset($_GET["page"])) {
  4. $page = $_GET["page"];
  5. }else{
  6. $page=1;
  7. }
  8.  
  9. $roww = mysql_fetch_array($rs_result);
  10. $total_records = $roww['qntpgs'];
  11. $total_pages = ceil($total_records/$nbratpage);
  12. $navnum = 5;
  13. $forstart = $page - floor($navnum/2);
  14. $forend = $forstart + $navnum;
  15. if($forstart <= 0){ $forstart = 1; }
  16. $overend = $total_pages - $forend;
  17. if($overend < 0){ $forstart = $forstart + $overend + 1; }
  18. $forend = $forstart + $navnum;
  19. $prev = $page - 1;
  20. $next = $page + 1;
  21.  
  22. if($ctt_producent == NULL && $ctt_firm == NULL)
  23. {
  24.  
  25. if($page > 1) echo "<li><a href=\"". "$adres_lokalny" . "?page=".$prev."\">Poprzednia</a></li>";
  26. if ($forstart > 1) echo "<li><a href=\"". "$adres_lokalny" . "?page=1\">1</a></li>";
  27. if ($forstart > 2) echo "<li><a>...</a></li>";
  28. for($forstart; $forstart < $forend; $forstart++){
  29. if($forstart == $page){
  30. echo "<li><a>";
  31. }else{
  32. echo "<li><a href=\"". "$adres_lokalny" . "?page=".$forstart."\">";
  33. }
  34. echo "<b>".$forstart."</b></a></li>";
  35. }
  36. if($forstart < $total_pages) echo "<li><a>...</a></li>";
  37. if($forstart - 1 < $total_pages) echo "<li><a href=\"". "$adres_lokalny" . "?page=".$total_pages."\">".$total_pages."</a></li>";
  38. if($page < $total_pages) echo "<li><a href=\"". "$adres_lokalny" . "?page=".$next."\">Następna</a></li>";
  39.  
  40. }
  41. else
  42. {
  43.  
  44. if($page > 1) echo "<li><a href=\"". "$adres_lokalny" . "&page=".$prev."\">Poprzednia</a></li>";
  45. if ($forstart > 1) echo "<li><a href=\"". "$adres_lokalny" . "&page=1\">1</a></li>";
  46. if ($forstart > 2) echo "<li><a>...</a></li>";
  47. for($forstart; $forstart < $forend; $forstart++){
  48. if($forstart == $page){
  49. echo "<li><a>";
  50. }else{
  51. echo "<li><a href=\"". "$adres_lokalny" . "&page=".$forstart."\">";
  52. }
  53. echo "<b>".$forstart."</b></a></li>";
  54. }
  55. if($forstart < $total_pages) echo "<li><a>...</a></li>";
  56. if($forstart - 1 < $total_pages) echo "<li><a href=\"". "$adres_lokalny" . "&page=".$total_pages."\">".$total_pages."</a></li>";
  57. if($page < $total_pages) echo "<li><a href=\"". "$adres_lokalny" . "&page=".$next."\">Następna</a></li>";
  58.  
  59. }
  60. ?>
jacobson
czytając zatrzymałem się na linijce 14 i 15. Zamień je miejscami, nie patrzyłem czy potem jest jakiś błąd smile.gif
ikssde
  1. $forstart = $page - floor($navnum/2);


Jeśli użytkownik odwiedzi stronę nr 1 to można podstawić do tego równania $forstart = 1 - floor(5/2) = 1 - 2 = -1. Potem w którejś z kolejnych linijek przesuwasz się o jeszcze jedną pozycję w tył i masz -2.
Dodaj sobie warunki brzegowe.
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.