Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Stronicowanie
Forum PHP.pl > Forum > Przedszkole
domel86
Witam. Robie sobie takie niewielkie stronicowanie. Troszke moze malo profesjonalnie wyglada, ale dopiero zaczynam zabawe z PHP. Wszystko dziala tak jak powinno, tylko ... po wpisaniu gotowej sciezki np. ?site=strona&show=-10 ... przenosi mnie spowrotem do ?site=strona&show=1 - tak ma byc. Natomiast jesli w miejscu, gdzie jest "-10" wstawie liczbe mniejsza, badz rowna od -33 .... zaczyna sie problem i wyswietla wszystko, jak przy liczbach dodatnich. Nie mam pojecia gdzie jest blad. Czy ktos moglby mi podpowiedziec ?

  1. <?php
  2. if(!isset($_GET['show'])) {
  3. $show = 1;
  4. } else {
  5. $show = $_GET['show'];
  6. }
  7. $podstrona = ceil(count($Files) / 8);
  8. $beginning = 8 * $show - 8;
  9. $Files = array_slice($Files, $beginning, 8);
  10. foreach ($Files as $File) echo $File;
  11. echo '<p class="pages">';
  12. if ($show != "1") {
  13.  $previous = $show - 1;
  14. echo '<a href="?site=strona&show='.$previous.'"> POPRZEDNIA </a>' ."&nbsp; &nbsp;" ."\n";
  15. }
  16.  if ($show < "10") {
  17.  switch ($show) {
  18. case $podstrona  : $next = $show; break;
  19. case $podstrona - 1: $next = $show + 1; break;
  20. case $podstrona - 2: $next = $show + 2; break;
  21. case $podstrona - 3: $next = $show + 3; break;
  22. case $podstrona - 4: $next = $show + 4; break;
  23. case $podstrona - 5: $next = $show + 5; break;
  24. case $podstrona - 6: $next = $show + 6; break;
  25. case $podstrona - 7: $next = $show + 7; break;
  26. case $podstrona - 8: $next = $show + 8; break;
  27. case $podstrona - 9: $next = $show + 9; break;
  28. default: $next = "10"; break;
  29.  }
  30. } 
  31.  if ($show < "10") {
  32.  switch ($show) {
  33. case '1': $before = 1; break;
  34. case '2': $before = 1; break;
  35. case '3': $before = 1; break;
  36. case '4': $before = 1; break;
  37. case '5': $before = 1; break;
  38. case '6': $before = 1; break;
  39. case '7': $before = 1; break;
  40. case '8': $before = 1; break;
  41. case '9': $before = 1; break;
  42. default: $before = $show - 9; break;
  43. }
  44.  }
  45.  if ($show > "9" AND $show < "11") {
  46.  switch ($show) {
  47. case '10': $before = 5; break;
  48. default: $before = $show - 5; break;
  49.  }
  50. }
  51.  
  52.  if ($show > "9" AND $show < "11") {
  53.  switch ($show) {
  54. case $podstrona - 9: $next = $show + 9; break;
  55. default: $next = $show + 5; break;
  56.  }
  57. } 
  58.  if ($show > "10") {
  59.  switch ($show) {
  60. case '1': $before = 1; break;
  61. case '2': $before = 1; break;
  62. case '3': $before = 1; break;
  63. case '4': $before = 1; break;
  64. case '5': $before = 1; break;
  65. case '6': $before = 1; break;
  66. case '7': $before = 1; break;
  67. case '8': $before = 1; break;
  68. case '9': $before = 1; break;
  69. case '10': $before = 1; break;
  70. default: $before = $show - 5; break;
  71.  }
  72. } 
  73.  if ($show > "10") {
  74. switch ($show) {
  75. case $podstrona  : $next = $show; break;
  76. case $podstrona - 1: $next = $show + 1; break;
  77. case $podstrona - 2: $next = $show + 2; break;
  78. case $podstrona - 3: $next = $show + 3; break;
  79. case $podstrona - 4: $next = $show + 4; break;
  80. case $podstrona - 5: $next = $show + 5; break;
  81. case $podstrona - 6: $next = $show + 6; break;
  82. case $podstrona - 7: $next = $show + 7; break;
  83. case $podstrona - 8: $next = $show + 8; break;
  84. case $podstrona - 9: $next = $show + 9; break;
  85. default: $next = $show + 5; break; 
  86. }
  87.  }
  88.  if ($show > "56" AND $show < "58") {
  89.  switch ($show) {
  90. case '57': $before = 50; break;
  91. default: $before = $show - 7; break;
  92. }
  93.  }
  94.  if ($show >= "53" AND $show < "58") {
  95.  switch ($show) {
  96. case $podstrona - 7: $next = $show + 7; break;
  97. default: $next = "57"; break;
  98.  }
  99. }
  100. for ($link = $before; $link <= $next; $link++, $link <= "57") {
  101. if ($link == $show) {
  102. echo '<a href="?site=strona&show='. $link .'"><font color="red" size="6"><b>'.$link.'</b></font></a>'."\n";
  103. } else {
  104. echo '<a href="?site=strona&show='. $link .'"><font color="black" size="5">'.$link.'</font></a>'."\n";
  105. }
  106. }
  107. if ($show != $podstrona AND $show < "57") {
  108. $next = $show + 1;
  109. echo '&nbsp; &nbsp; <a href="?site=strona&show='.$next.'"> NASTEPNA </a>'."\n";
  110. }
  111. if ($show != $podstrona AND $show > "57") {
  112. header("Location: ?site=strona&show=57");
  113. }  
  114. [b]// TU JEST BLAD [/b]
  115. if ($show <= "0") {
  116. header("Location: ?site=strona&show=1");
  117. }
  118. echo '</p>';
  119. echo '<br>';
  120. ?>
artega
Sporo tych if'ów i switch'ów smile.gif
Może przyda Ci się coś takiego

  1. <?php
  2.  
  3. function generate_pagination($items, $start_item)
  4. {
  5. $pagination  = "";
  6.  
  7. $per_page  = 10;
  8.  
  9. $total_pages = ceil($items / $per_page);
  10.  
  11. $current_page = floor($start_item / $per_page) + 1;
  12.  
  13. $start_count = max(1, $current_page - 3);
  14.  
  15. $end_count = min($total_pages, $current_page + 4);
  16.  
  17. if ($start_count > 1 )
  18. {
  19. $pagination .= "<a href=\"index.php?show=0\">Ť</a> ";
  20. }
  21.  
  22. if ($current_page > 1)
  23. {
  24. $pagination .= "<a href=\"index.php?show=".(($current_page - 2) * $per_page)."\"><</a> ";
  25. }
  26.  
  27. for ($i = $start_count; $i <= $end_count; $i++)
  28. {
  29. if ($i == $current_page)
  30. {
  31. $pagination .= "<strong>".$i."</strong>";
  32. }
  33. else
  34. {
  35. $pagination .= "<a href=\"index.php?show=".(($i - 1) * $per_page)."\">".$i."</a>";
  36. }
  37.  
  38. if ($i < $end_count)
  39. {
  40. $pagination .= " ";
  41. }
  42. }
  43.  
  44. if ($current_page < $total_pages)
  45. {
  46. $pagination .= " <a href=\"index.php?show=".($current_page * $per_page)."\">></a>";
  47. }
  48.  
  49. if ($end_count < $total_pages )
  50. {
  51. $pagination .= " <a href=\"index.php?show=".(($total_pages - 1) * $per_page)."\">ť</a>";
  52. }
  53.  
  54. return $pagination;
  55. }
  56.  
  57. ?>

Pierwszy argument funkcji to ilość wszystkich rekordów a drugi to liczba na której zaczynasz wyświetlanie wyników.
Zmienną show możesz przefiltrować przez

  1. <?php
  2.  
  3. if (intval($_GET['show']) < 0) $_GET['show'] = 0;
  4.  
  5. ?>
MajareQ
Cytat
Nie mam pojecia gdzie jest blad.


Cytat
Kod
if ($show != $podstrona AND $show > "57") {
    header("Location: ?site=strona&show=57");
    }  
[b]// TU JEST BLAD [/b]
    if ($show <= "0") {
    header("Location: ?site=strona&show=1");
    }
domel86
Ja wiem, w ktorym miejscu jest blad - sam ten komentarz wstawilem. Nie mam jednak pojecia, dlaczego tak a nie inaczej sie dzieje. Filtrowania za pomoca intval tez juz probowalem. Ten sam efekt. Dla liczb z zakresu " -32 do 0 " jest ok, czyli header przenosi do strony z show=1.... natomiast dla liczb mniejszych od -32 zaczyna sie to wystwietlanie, ktorego chcialbym sie pozbyc


Edit.
No i problem okazal sie byc na prawde trywialny. Wstawilem na poczatku

CODE

if ($beginning < "0") {
header("Location: ?site=strona&show=1");
}


i wszystko zaczelo dzialac jak powinno.
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.