Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wyświetlanie określonych rekordów
Forum PHP.pl > Forum > Przedszkole
Th0e
Witam! Tworzę stronę dość podobną w działaniu jak kwejk, czy demotywatory, jednak o innej tematyce. Nie chcę by wszystkie rekordy były wyświetlone na 1 stronie. Chciałbym to podzielić np. po 10 rekordów na stronę.

Tak wygląda mój skrypt na wyświetlanie rekordów:

  1. function lista()
  2. {
  3. if(!isset($_GET['action']))
  4. {
  5. $wez_wrzucone=mysql_query("SELECT * FROM `wrzucone` ORDER BY `id` DESC LIMIT 10");
  6.  
  7. while($wrzucone=mysql_fetch_array($wez_wrzucone))
  8. {
  9. $wrzucone['data'] = htmlspecialchars($wrzucone['data']);
  10. $wrzucone['tytul'] = htmlspecialchars($wrzucone['tytul']);
  11. $wrzucone['opis'] = htmlspecialchars($wrzucone['opis']);
  12.  
  13. <center>
  14. <div id="general">
  15. <div id="general_autor">
  16. <div id="float_left">
  17. <table border="0" width="730"><tr><td width="50%"><strong><a href="http://www.youtube.com/'. $wrzucone['autor'] .'">'. $wrzucone['autor'] .'</a></td><td width="50%" align="right">'.$wrzucone['data'].'</strong></td></tr></table>
  18. </div>
  19. </div>
  20. <br />
  21. <strong>'.$wrzucone['tytul'].'</strong><br />
  22. '. $wrzucone['link'] .'<br /><br />
  23. '. $wrzucone['opis'] .'<br />
  24.  
  25. <strong><font color="yellow">_____________________________________</font></strong><br />
  26. <a href="?like='. $wrzucone['id'] .'">Lubię to!</a> - lubi to '. $wrzucone['like'] .' użytkowników!<br /><br />
  27. </div>
  28. </center>
  29. ';
  30. }
  31. }
  32. }


a tak skrypt od podstron

  1. function strony()
  2. {
  3. $ile_wrzuconych = mysql_num_rows("SELECT * FROM `wrzucone`");
  4.  
  5. if($ile_wrzuconych>10)
  6. {
  7. $ile_ma_byc_stron = $ile_wrzuconych / 10;
  8.  
  9. $liczba=1;
  10.  
  11. echo '<br /><br />Przejdź do strony:';
  12. while($liczba>$ile_ma_byc_stron)
  13. {
  14. echo'<a href="?str='. $liczba .'">'. $liczba .'&nbsp;</a>';
  15. $liczba++;
  16. }
  17. }
  18. }


Moje pytanie. Załóżmy że mam już na stronę wrzucone 20 filmów. Utworzą się 2 strony. Jak zrobić że gdy kliknę na dwójkę to pokażą mi się rekordy od 11-20, ale wolałbym żeby nie działało to na zasadzie id, tylko coś w stylu mysql_num_rows, żeby samo to policzyło bo czasami będzie trzeba usunąć dany rekord czy coś smile.gif

Pozdrawiam.
b4rt3kk
LIMIT na końcu zapytania:

  1. LIMIT $page-1,$wynikow


Zmienna $page to oczywiście nr strony (to właśnie przekazujesz w GET), natomiast $wynikow to liczba wyników na stronę.
Th0e
Cytat(b4rt3kk @ 17.07.2013, 09:45:59 ) *
LIMIT na końcu zapytania:

  1. LIMIT $page-1,$wynikow


Zmienna $page to oczywiście nr strony (to właśnie przekazujesz w GET), natomiast $wynikow to liczba wyników na stronę.


Nie do końca zrozumiałem, wydaje mi się że gdy np. przejdę na 2 stronę to pokaże mi od 1-10 rekordu.

PS: Może da się zrobić to jakoś taj jak zmieniłem? Wprowadziłem na początku funkcji lista parę zmian:

  1. function lista()
  2. {
  3. if(!isset($_GET['action']))
  4. {
  5. if(isset($_GET['str']))
  6. {
  7. $strona = $_GET['str'];
  8. $wyswietl_do = $strona * 10;
  9. $wyswietl_od = $wyswietl_do - 9;
  10.  
  11. $wez_wrzucone=mysql_query("SELECT * FROM `wrzucone` ORDER BY `id` DESC LIMIT 10");
  12. }
  13. $wez_wrzucone=mysql_query("SELECT * FROM `wrzucone` ORDER BY `id` DESC LIMIT 10");
  14.  
  15. while($wrzucone=mysql_fetch_array($wez_wrzucone))


reszta taka sama.

Tylko jak napisać zapytanie by wzięło mi rekordy o id nie mniejszym niż $wyswietl_od i nie wiekszym niż $wyswietl_do ?
Gość
Przede wszystkim przed wyswietleniem rekordow musisz je policzyc i podzielic:

$podstrona = ceil($ile_rekordow/$ile_wyswietlic); // gdzie podstrona to bedzie Twoja zmienna GET czyli numeracja 1,2,3 itd.

pozniej obliczyc poczatek od ktorego rekordu ma byc wyswietlanie

$poczatek = $podstrona*$ile_wyswietlic;

i teraz w zapytaniu wyswietlajacym wyniki dac LIMIT $ile_wyswietlic,$poczatek

Tak na szybkiego i moze byc jakis blad ale chyba wiadomo o co chodzi a w google masz pelno przykladow (paginacja, stronnicowanie)
b4rt3kk
Cytat(Th0e @ 17.07.2013, 09:51:09 ) *
Nie do końca zrozumiałem, wydaje mi się że gdy np. przejdę na 2 stronę to pokaże mi od 1-10 rekordu.

PS: Może da się zrobić to jakoś taj jak zmieniłem? Wprowadziłem na początku funkcji lista parę zmian:

  1. function lista()
  2. {
  3. if(!isset($_GET['action']))
  4. {
  5. if(isset($_GET['str']))
  6. {
  7. $strona = $_GET['str'];
  8. $wyswietl_do = $strona * 10;
  9. $wyswietl_od = $wyswietl_do - 9;
  10.  
  11. $wez_wrzucone=mysql_query("SELECT * FROM `wrzucone` ORDER BY `id` DESC LIMIT 10");
  12. }
  13. $wez_wrzucone=mysql_query("SELECT * FROM `wrzucone` ORDER BY `id` DESC LIMIT 10");
  14.  
  15. while($wrzucone=mysql_fetch_array($wez_wrzucone))


reszta taka sama.

Tylko jak napisać zapytanie by wzięło mi rekordy o id nie mniejszym niż $wyswietl_od i nie wiekszym niż $wyswietl_do ?


Masz rację, pominąłem jedną zmienną, prawidłowy LIMIT:

  1. LIMIT ($page-1)*$wynikow,$wynikow*$page
Th0e
@up dzięki teraz załapałem smile.gif Ale z ciekawości...

czyli takie coś się sprawdzi?

  1. $strona = $_GET['str'];
  2. $wyswietl_do = $strona * 10;
  3. $wyswietl_od = $wyswietl_do - 9;
  4.  
  5. $wez_wrzucone=mysql_query("SELECT * FROM `wrzucone` ORDER BY `id` DESC LIMIT '$wyswietl_od','$wyswietl_do'");


zawsze wolę stosować własny kod. Gdy potem przyjdzie coś zmieniać łatwiej jest mi się połapać smile.gif
b4rt3kk
Cytat(Th0e @ 17.07.2013, 10:04:15 ) *
@up dzięki teraz załapałem smile.gif Ale z ciekawości...

czyli takie coś się sprawdzi?

  1. $strona = $_GET['str'];
  2. $wyswietl_do = $strona * 10;
  3. $wyswietl_od = $wyswietl_do - 9;
  4.  
  5. $wez_wrzucone=mysql_query("SELECT * FROM `wrzucone` ORDER BY `id` DESC LIMIT '$wyswietl_od','$wyswietl_do'");


zawsze wolę stosować własny kod. Gdy potem przyjdzie coś zmieniać łatwiej jest mi się połapać smile.gif


Nie sprawdzi się. Na pierwszej stronie będziesz miał wyniki od 1 do 11. A wyniki indeksuje od 0.
Th0e
aha dzięki.

Temat do zamknięcia.
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.