Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]specyficzne porcjowanie
Forum PHP.pl > Forum > Przedszkole
Pcbecaw
Witam, potrzebuję skrypt stronicowania, ale bez możliwości przechodzenia na kolejne podstrony. Mam już skrypt paginacji i chciałbym wyświetlać zawartość w zależności od podstrony. Jeśli podstrona 1 - pewna zawartość, jeśli podstrona 2 - inna pewna zawartość. Chciałbym wyświetlać na jednej podstronie 10 rekordów. Obecnie mam coś takiego:
  1. <?php
  2. $dbhost = "localhost";
  3. $dbuser = "root";
  4. $dbpass = "";
  5. $dbname = "smf";
  6.  
  7. $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database");
  8. mysql_select_db($dbname);
  9. $sql = "SET CHARSET utf8";
  10. // include your code to connect to DB.
  11.  
  12. $wynik = mysql_query("SELECT `keywords` FROM `newsy`")
  13. or die('Błąd zapytania');
  14.  
  15. /*
  16. wyświetlamy wyniki, sprawdzamy,
  17. czy zapytanie zwróciło wartość większą od 0
  18. */
  19. if(mysql_num_rows($wynik) > 0) {
  20. /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  21. while($r = mysql_fetch_assoc($wynik)) {
  22. echo " ".$r['keywords']." ";
  23. }
  24. }
  25. ?>

Chciałbym dodać do tego porcjowanie w zależności od podstrony, czyli podstrona 1 - 10 rekordów, podstrona 2 - kolejne 10 rekordów. Jak to zrobić?
gargamel
w zapytaniu SQL coś takiego jak LIMIT
Pcbecaw
Tyle to sam wiem, tylko nie wystarczy dodać po prostu LIMIT 0,10 ponieważ wyświetli tylko pierwsze 10 rekordów, a ja chciałbym wyświetlać rekordy w zależności od podstrony.
gargamel
No to zastanów się co powinieneś wstawić w zapytaniu zamiast 0 i 10 żeby było tak jak chcesz. W adresie masz numer strony i pobierasz go przez $_GET....
Pcbecaw
o get mało wiem, a nawet bardzo mało, żeby nie powiedzieć wcale. Mógłbyś/moglibyście dopisać odpowiednie: $_GET['page']; do poniższej linijki? (zamiast tego limitu)
  1. $wynik = mysql_query("SELECT `keywords` FROM `newsy` LIMIT 0,10")
aeaeae
Tutaj masz mój skrypt paginacji z GETem. Wrzuć do index.php i uruchom ...
  1. <?php
  2. $o=120; //liczba przedmiotow ogolnie
  3. $ile=7; //liczba przedmiotow na strone
  4. $n=$_GET['p']; //pobranie numeru strony
  5. if($n<1) //zabezpieczenie przed pustym i niedodatnim p
  6. $n=1;
  7. $max=$n*$ile;
  8. for($i=($n-1)*$ile+1; ($i<=$max)&&($i<=$o); $i++)
  9. echo "przedmiot nr $i".'<br />';
  10. $is=(int)(ceil($o/$ile));
  11. if(!$is)
  12. echo 'brak przedmiotow';
  13. else
  14. for($i=1;$i<=$is;$i++)
  15. echo '<a href="index.php?p='.$i.'">['.$i.']'.'</a>'.' ';
  16. ?>


Tłumaczenie tu:
Temat: 12345 itd strony
Pcbecaw
Takie pytanie jeszcze mam, dlaczego tam muszę określać liczbę rekordów ogólnie? ($o)
I drugie pytanie, co muszę zrobić, żeby wyświetlić te dane z komórki "keywords" ? Próbowałem whilem i później
echo " ".$r['keywords']." "; ale coś nie działa.

Na razie mam coś takiego:
  1. <?php
  2. $dbhost = "localhost";
  3. $dbuser = "root";
  4. $dbpass = "";
  5. $dbname = "smf";
  6.  
  7. $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ("Error connecting to database");
  8. mysql_select_db($dbname);
  9. $sql = "SET CHARSET utf8";
  10. // include your code to connect to DB.
  11.  
  12. $wynik = mysql_query("SELECT `keywords` FROM `newsy`")
  13. or die('Błąd zapytania');
  14.  
  15. $o=120; //liczba przedmiotow ogolnie
  16. $ile=10; //liczba przedmiotow na strone
  17. $n=$_GET['page']; //pobranie numeru strony
  18. if($n<1) //zabezpieczenie przed pustym i niedodatnim p
  19. $n=1;
  20. $max=$n*$ile;
  21. for($i=($n-1)*$ile+1; ($i<=$max)&&($i<=$o); $i++)
  22. echo "$i".' ';
  23. ?>

Metoda get działa poprawnie, jednak chciałbym wyświetlać wyniki z kolumny "keywords". Ni jak nie potrafie tego zrobić, próbowałem na 10 metod i żadna nie działa. Mógłby ktoś podpowiedzieć?
aeaeae
1. Ile ogólnie jest elementów pobierasz po to, żeby wyświetlić odsyłacze do wszystkich podstron (ten fragment, który usunąłeś) i tylko do nich, oraz po to, żeby na ostatniej stronie zrobić ograniczenie (np, masz 15 elementów, wyświetlasz po 10, więc na drugiej stronie powinno być tylko 5, przy dobrze sformułowanym zapytaniu nie jest to konieczne).
  1. <?php
  2. $o=120; //liczba przedmiotow ogolnie
  3. ...
  4. else
  5. for($i=1;$i<=$is;$i++)
  6. echo '<a href="index.php?p='.$i.'">['.$i.']'.'</a>'.' ';
  7. ?>


2. Ten skrypt, który wkleiłem służy przedstawieniu idei paginacji. Jeśli chcesz pracować na bazie danych a nie na tablicy najwygodniej jest wyliczyć min i max rekord do wyświetlenia na stronie. Już pokazuję.

  1. <?php
  2. /*
  3. liczbę przedmiotów trzeba pobrać z bazy danych, nie jest to kosztowna operacja,
  4. zamiast tworzyć zmienną można użyć define(), a jeśli nie będziesz niegdzie więcej
  5. z tej liczby korzystał, to wrzuć wartość bezpośrednio do wyświetlania odnośników
  6. stron
  7. */
  8. $o=120;
  9.  
  10. /*
  11. liczba przedmiotow na strone, tu też powinno być define()
  12. */
  13. $ile=7;
  14.  
  15. /*
  16. pobranie numeru strony
  17. zabezpieczenie przed pustym, tekstowym i niedodatnim p
  18. */
  19. $n=$_GET['p'];
  20. if($n<1)
  21. $n=1;
  22.  
  23. /*
  24. obliczenie minimalnego i maksymalnego rekordu,
  25. który ma być wyświetlony
  26. (przy zalożeniu, że kolumna identyfikatorów rekordów
  27. jest ciągiem liczb naturalnych),
  28. tu podaję zmienne, ale najwygodniej wstawić do zapytania do bazy
  29. */
  30. $max=$n*$ile;
  31. $min=($n-1)*$ile+1;
  32.  
  33. /*
  34. W tym miejscu wysyłasz zapytanie dla minimalnej i maksymalnej
  35. wartości, zwróć uwagę na obsługę tego czy min i max nie przekraczają
  36. ogólnej ilości rekordów.
  37. Tutaj też wyświetlasz rekordy.
  38. */
  39.  
  40. /*
  41. Wyświetlenie odnośników do podstron paginacji
  42. */
  43. $is=(int)(ceil($o/$ile));
  44. if(!$is)
  45. echo 'brak przedmiotow';
  46. else
  47. for($i=1;$i<=$is;$i++)
  48. echo '<a href="index.php?p='.$i.'">['.$i.']'.'</a>'.' ';
  49. ?>


Edycja: teraz zwróciłem uwagę, że nie chcesz mieć odnośników do podstron. W takim razie ilość rekordów w tabeli nie jest potrzebna, a ten fragment, który wyrzuciłeś też. tongue.gif
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.