Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] stronicowanie
Forum PHP.pl > Forum > Przedszkole
gigzorr
witam . mam oto taki skrypt stronicowania:
  1. $page = $_GET['page'];
  2.  
  3. $result = "SELECT nick_z_gry FROM `rejestracja` LIMIT 0,8";
  4. $idzap = mysql_query($result) or die(mysql_error());
  5. $wszystkich = mysql_fetch_row($idzap);
  6. $ilestr = "8"; // podajemy tutaj ilość wyników na jedną stronę.
  7. $podstron = ceil($wszystkich[0]/$ilestr);
  8.  
  9.  
  10. $result= mysql_query("SELECT nick_z_gry FROM `rejestracja` LIMIT ".(($page)*$ilestr).",".$ilestr."");
  11. echo '<p style="font-weight:bold;font-family:Arial;font-size:12px;">Lista zarejestrowanych użytkowników:</p>';
  12. while ($row = mysql_fetch_array($result, MYSQL_NUM))
  13. {
  14. printf("<div style='margin:auto;'>
  15. <table border='1' style='font-size:13px;font-family:Verdana;'>
  16. <tr>
  17. <td>Nick z gry:</td> <td style='width:400px;color:white;' class='td'>%s</td>
  18. </tr>
  19. </table>
  20. </div>
  21. ", $row["0"]);
  22. }
  23. echo '<br/>';
  24. if ($page>0) echo "<a href=lista-uzytkownikow?podstrona_".($page-1).">Poprzednia</a>";
  25. else
  26. {
  27. echo "Poprzednia";
  28. }
  29. if ($page<$podstron) echo "<a href=lista-uzytkownikow?podstrona_".($page+1)."><div style='margin-left:110px;margin-top:-20px;'>Następna</style></a>";
  30. else
  31. {
  32. echo "<div style='margin-left:160px;margin-top:-20px;'>Następna</div>";
  33. }
  34. }
  35.  


Ładnie wyswietla dane, ogranicza ilosc , ale juz nastepna strona jest nie aktywna , tzn sie nie da kliknac , i problem chyba tutaj jest:
  1. $wszystkich = mysql_fetch_row($idzap);
  2. $ilestr = "8"; // podajemy tutaj ilość wyników na jedną stronę.
  3. $podstron = ceil($wszystkich[0]/$ilestr);


Bo wyciagam nazwe , a mam w [0] liczbe , ale probowalem zamienic 0 za [nick_z_gry] ale to byloby bez sensu.

Dziękuje za wszystkie porady.
pedro84
A gdzie wg. Ciebie sprawdzasz ilość rekordów w bazie?
gigzorr
ym nigdzie
  1. #
  2. $result = "SELECT nick_z_gry FROM `rejestracja` LIMIT 0,8";


tutaj powinieniem sprawdzic? cos takiego?:
  1. $result = "SELECT COUNT(*) FROM rejestracja LIMIT 0,8";


chociaz to troche sensu nie ma raczej
pedro84
Zobacz sobie do pierwszego lepszego tutoriala o stronicowaniu. Musisz policzyć ile masz wszystkich rekordów (czyli wywal LIMIT). I nie COUNT(*) a COUNT(id).
everth
Mały sprzeciw: właśnie COUNT (*) a nie COUNT(`kolumna`), chyba że ma nicki bez id
gigzorr
  1. $result = "select count(id) as iCount from rejestracja";



np. takie zapytanie albo cos innego np.
  1. select count(*) id from rejestracja


ym rozwala mi strone?nic z tego nie rozumiem
tomekpl
tutaj masz błąd:

$result= mysql_query("SELECT nick_z_gry FROM `rejestracja` LIMIT ".(($page)*$ilestr).",".$ilestr."");

jeżeli będziesz miał 2 stronę to będzie zaczynało od 16. Jeżeli będziesz miał 3 stronę to od 24. A powinno odpowiednio 9 i 17. czyli powinien być + zamiast *.

a jeszcze wcześniej usuń ten limit. bo to ma liczyc całą bazę. a nie 8 rekordów.

$result = "SELECT nick_z_gry FROM `rejestracja` LIMIT 0,8";


ps:
żeby podać wartość liczby. która określa rozpoczęcia czytania rekordów wykorzystaj wzór:
$od=($nrstrony* $limit) - $limit ;
thek
Tomekpl.. Nie wprowadzaj go w błąd smile.gif Zapytanie z LIMIT i mnożeniem jest prawie prawidłowe. Musi tylko kontrolować czy strona=1 jest pierwsza czy druga, bo od tego zależy czy w zapytaniu od niej nie odejmie 1, a więc czy będzie:
$ile_na_stronie*$strona
czy może
$ile_na_stronie*($strona-1)
To jest identyczna forma jaką w PS podałeś tylko zapisana ciut inaczej matematycznie (rozdzielność mnożenia względem odejmowania - poziom 2 lub 3 klasy podstawówki, a przynajmniej ja wtedy to miałem).
Co do count to są 2 rozwiązania. Albo leci2 identyczne zapytanie jak to wyciągające wiersze, ale robi count(jedna_z_kolumn) albo robi to z użyciem dodatkowego SQL_CALC_FOUND_ROWS w zapytaniu. Poczytaj o tym drugim, bo są sprzeczne opinie na temat jego działania. Niektórzy twierdzą jakoby to drugie nie używało indeksów, przez co działa kilkudziesięciokrotnie wolniej. Z mojego doświadczenia i używania explain wynika, że osoby te się mylą i indeksy są używane, a więc różnica jest niezauważalna.
gigzorr
przez + * nie rozwala sie strona , jak np. jest to zapytanie :
  1. $result = "SELECT nick_z_gry FROM `rejestracja` LIMIT 0,8";


to strona sie trzyma , a jak jest np. select count(*) id from rejestrac albo as etc to sie sypie , tzn jak jest tak to sie sypie , ale widac guzik kolejnej strony.
thek
Popatrz na to co napisałem... count (nazwa_kolumny)... nie count(*) nazwa_kolumny :/ zrób
SELECT count(id) AS ile FROM tabela
a powinno zadziergać jak ta lala.
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.