Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Paginacja newsow na GET
Forum PHP.pl > Forum > Przedszkole
viamarimar
Mam problem z dzialaniem tej paginacji, wzieta jest niby z jakiegos tutorialu i niby powinna dzialac. Jednak niestety nie dziala, tzn. na kazdej stronie wyswietlaja sie te same wiadomosci. Osoba mądrzejsza odemnie powiedziala ze jest problem limitem. Zmienna $limit?

Jak rozwiazac problem i spwadzic i spowodowac zeby to zaczelo funkcjionowac?
Czy to ze jest to w gecie jakos przeszkadza?

  1. if(isset($_GET['newsy']) && $_GET['newsy']=='pokaz')
  2. {
  3.  
  4. $query = "SELECT COUNT(*) as all_posts FROM news";
  5. $result = mysql_query($query) or die (mysql_error());
  6. $row = mysql_fetch_array($result);
  7. extract($row);
  8.  
  9. $onpage = 2;
  10. $navnum = 7;
  11. $allpages = ceil($all_posts/$onpage);
  12.  
  13. if(!isset($_GET['page']) or $_GET['page'] > $allpages or !is_numeric($_GET['page']) or $_GET['page'] <= 0){
  14. $page = 1;
  15. }else{
  16. $page = $_GET['page'];
  17. }
  18. $limit = ($page - 1) * $onpage;
  19.  
  20. $query = "SELECT * FROM news ORDER BY id DESC LIMIT $limit, $onpage";
  21. $result = mysql_query($query) or die (mysql_error());
  22.  
  23. while($row = mysql_fetch_array($result)){
  24. echo "<h1>".$row['tytul']."</h1>";
  25. echo "<p>".$row['tresc']."</p>";
  26. echo "<hr>";
  27. }
  28.  
  29. if($navnum > $allpages){
  30. $navnum = $allpages;
  31. }
  32.  
  33. $forstart = $page - floor($navnum/2);
  34. $forend = $forstart + $navnum;
  35.  
  36. if($forstart <= 0){ $forstart = 1; }
  37.  
  38. $overend = $allpages - $forend;
  39.  
  40. if($overend < 0){ $forstart = $forstart + $overend + 1; }
  41.  
  42. $forend = $forstart + $navnum;
  43.  
  44. $prev = $page - 1;
  45. $next = $page + 1;
  46.  
  47. $script_name = $_SERVER['SCRIPT_NAME'];
  48.  
  49. echo "<div id=\"nav\"><ul>";
  50. if($page > 1) echo "<li><a href=\"".$script_name."?newsy=pokaz&amp;page=".$prev."\">Poprzednia</a></li>";
  51. if ($forstart > 1) echo "<li><a href=\"".$script_name."?newsy=pokaz&amp;page=?page=1\">[1]</a></li>";
  52. if ($forstart > 2) echo "<li>...</li>";
  53. for($forstart; $forstart < $forend; $forstart++){
  54. if($forstart == $page){
  55. echo "<li class=\"current\">";
  56. }else{
  57. echo "<li>";
  58. }
  59. echo "<a href=\"".$script_name."?newsy=pokaz&amp;page=?page=".$forstart."\">[".$forstart."]</a></li>";
  60. }
  61. if($forstart < $allpages) echo "<li>...</li>";
  62. if($forstart - 1 < $allpages) echo "<li><a href=\"".$script_name."?newsy=pokaz&amp;page=?page=".$allpages."\">[".$allpages."]</a></li>";
  63. if($page < $allpages) echo "<li><a href=\"".$script_name."?newsy=pokaz&amp;page=?page=".$next."\">Następna</a></li>";
  64. echo "</ul></div><div class=\"clear\">";
  65.  
  66. }
modern-web
Masz sieczkę w kodzie, to raz. Jak możesz coś takiego ogarniać? Serio w necie tylko takie gó*** wystawiają :/?
Szczerze z w/w powodu nawet nie chce mi się tego czytać, ale wyjaśnię Ci na czym polega cały mechanizm, lepiej zrozumiesz temat, a implementację zostaw sobie na później.

$_GET to predefiniowana zmienna, która zawiera parametry GET (te po znaku zapytania) z requesta (żądania).
Zasadniczo wyciągasz je jak wartości z normalnej tablicy, czyli tak jak w linii #1:
  1. $_GET['newsy']


Okej, co dalej? A no jakoś musisz tę wartość przekazać do zapytania (pomijam walidację danych i zabezpieczenia). Najprościej jest po prostu ją tam "dokleić".

Jak działa paginacja? Podajesz rekord początkowy (punkt startowy) i limit wyników od tego punktu. Czyli w SQL wygląda to tak:
  1. ... LIMIT 0,30

Czym jest 0, a czym 30? To pierwsze to punkt startowy, drugie natomiast to ilość wyników które chcesz otrzymać.

Teraz powinieneś wiedzieć o co biega, jest jeszcze pełna wersja zapisu
  1. ... OFFSET 0 LIMIT 30
ale to tylko ciekawostka.
Spójrz na kod i ogarnij co może być nie tak, w razie wątpliwości pytaj dalej.
viamarimar
Cos nie tak jest tu:
  1. if(!isset($_GET['page']) or $_GET['page'] > $allpages or !is_numeric($_GET['page']) or $_GET['page'] <= 0){
  2. $page = 1;
  3. }else{
  4. $page = $_GET['page'];
  5. }
  6. $limit = ($page - 1) * $onpage;


  1. $query = "SELECT * FROM news ORDER BY id DESC LIMIT $limit, $onpage";


ogolnie paginacja "dziala" jest podzial na strony tylko jak zrobie
echo $query

to na kazdej podstronie
SELECT * FROM news ORDER BY id DESC LIMIT 0, 2
wiec cos z kodem nie tak:<
i zawsze dwa te same newsy
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.