Odpowiedz 
 
Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
[PHP/MySQL] Stronicowanie
Autor Wiadomość
kmd Offline
Hall of Fame
***

Liczba postów: 147
Dołączył: 29-02-2008
Reputacja: 7
Post: #1
[PHP/MySQL] Stronicowanie
Witam
Chciałbym przedstawić Wam dosyć proste stronicowanie/podział na strony wyników pobranych z bazy danych. Całość jest dosyć krótka i mam nadzieję, że przyda się szczególnie początkującym programistom Smile

Najpierw wkleję cały kod, a później go omówię:
Kod PHP:
$perPage 20;
if (
is_numeric($_REQUEST['page'])) {
$page = (int) $_REQUEST['page'];
if (
$page 1) {
$page 1;
}
} else {
$page 1;
}
$start = ($page 1) * $perPage;
$query 'SELECT [fields] FROM [table] ' 
"WHERE [condition] LIMIT $start, $perPage"
$result mysql_query($query);
while (
$record mysql_fetch_srray($result)) {
// wyswietlanie wpisow
}
$prev $page 1;
$next $page 1;
$prevLink $_SERVER['PHP_SELF'] . '?page=' $prev;
$nextLink $_SERVER['PHP_SELF'] . '?page=' $next;
echo 
"<p align='center'>"
"<a href='$prevLink'>";
"Previous Page</a> | "
"<a href='$nextLink'>",
"Next Page</a></p>"

I to już wszystko! Cały kod. Właściwie wystarczy go wkleić i zmienić ze 3 rzeczy i działa nam dzielenie wyników z bazy danych na strony. Poniżej krótkie omowienie:

Kod:
$perPage = 10;
Ta część odpowiada za ilość wyświetlanych wyników

Kod:
if (is_numeric($_REQUEST['page'])) {
$page = (int) $_REQUEST['page'];
if ($page < 1) {
$page = 1;
}
} else {
$page = 1;
}
Ta część odpowiada za odebranie numeru strony. Jeżeli nie ma nic, to znaczy, że jest 1. jesli jest poniżej 1, to też jest 1. To tak dosyć łopatologicznie Smile

Kod:
$start = ($page - 1) * $perPage;
Ta część odpowiada za to, od ktorego wpisu będą pobierane rekordy z bazy danych. Poniżej wstawimy tą zmienną przy pobieraniu wpisów z bazy danych. W tym przypadku od numeru strony odejmujemy 1. Czyli gdy strona = 1, to mnożymy 0 razy ilość wyświetlanych rekordów czyli w tym przypadku 10. 0*10 = 0, czyli pobieramy wpisy od id=0. Gdy jesteśmy na stronie 2, wtedy równianie wygląda tak: (2 - 1) * 10 = 10, czyli pobieramy wpisy od id=10. Chyba zrozumiałe Smile

Kod:
$query = 'SELECT [fields] FROM [table] ' . "WHERE [condition] LIMIT $start, $perPage";
$result = mysql_query($query);
while ($record = mysql_fetch_srray($result)) {
// wyswietlanie wpisow
}
Pobieranie wpisów, z tabeli [table], pod jakimś warunkiem. To modyfikujemy do woli. natomiast dalsza część (LIMIT $start, $perPage) jest związana z poprzednią linijką. $start oznacza od którego wpisu zaczynamy pobieranie rekordów. $perPage oznacza ile rekordów pobieramy.
Dla page=2 pobieramy 10 wpisów od dziesiątego zaczynając. Czyli pobieramy wpis 11, 12, 13, 14...20.
Dalej mamy wyświetlanie wpisów. I to miejsce też modyfikujemy na swoje potrzeby.

Kod:
$prev = $page - 1;
$next = $page + 1;
Zmienne, dodające lub odejmujące 1 od aktualnej strony. Wykorzystywane przy odnośnikach, które są niżej:
Kod:
$prevLink = $_SERVER['PHP_SELF'] . '?page=' . $prev;
$nextLink = $_SERVER['PHP_SELF'] . '?page=' . $next;
gdzie $_SERVER['PHP_SELF'] to adres strony. Linki mogą wyglądać tak:
Kod:
<a href=\"index.php?page=".$prev."\">Poprzednia</a>
<a href=\"index.php?page=".$next."\">Nastepna</a>
Na końcu adresu dostawiamy ?page= i tutaj odejmujemy lub dodajemy 1, przechodząc na stronę następną lub poprzednią. To zaś spowoduję zmiane wartości page na początku działania kodu i dzięki temu będziemy wyświetlali inną porcję wpisów Smile

PS.Tutorial umieściłem też na innym forum. Żeby nie było, że kopiowany Smile
(Ten post był ostatnio modyfikowany: 31-03-2008 16:23 przez kmd.)
26-03-2008 20:29
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
DoGeR Offline
.:: DoGeR ::.
****

Liczba postów: 291
Dołączył: 18-12-2007
Reputacja: 9
Post: #2
RE: [PHP/MySQL] Stronicowanie
Poniżej jeszcze jedna opcja stronicowania.

Kod PHP:
$start $_GET['start'];
$na_stronie 20;

$wykonaj=mysql_query("SELECT * FROM tabela");
$znaleziono=mysql_num_rows($wykonaj);
if(
$znaleziono>$na_stronie) {
    print 
'<center>Strona ';
for(
$i=0$i<ceil($znaleziono/$na_stronie); $i++)
  print 
'<a href="index.php?start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
}  
print 
'</center>';

$query "SELECT * FROM tabela LIMIT ".($start).",".$na_stronie."";
$result mysql_query ($query);
        while (
$row mysql_fetch_array($result))
        {
//Wyświetlamy wpisy


Teraz po kolei:
Kod:
$na_stronie = 20;
Ilość wpisów wyświetlonych na jednej stronie

Kod:
$wykonaj=mysql_query("SELECT * FROM tabela");
$znaleziono=mysql_num_rows($wykonaj);
if($znaleziono>$na_stronie) {
    print '<center>Strona ';
for($i=0; $i<ceil($znaleziono/$na_stronie); $i++)
  print '<a href="index.php?start='.($i*$na_stronie).'">'.($i+1).'</a> | ';
}
Sprawdza ilość wpisów w tabeli, następnie porównuje ich ilość ze zmienną $na_stronie, jeżeli w bazie istnieje więcej wpisów niż w zmiennej wykonuje pętle w której oblicza i wyświetla numery stron.

Kod:
$query = "SELECT * FROM tabela LIMIT ".($start).",".$na_stronie."";
$result = mysql_query ($query);
        while ($row = mysql_fetch_array($result))
        {
//Wyświetlamy wpisy
}
Wybieramy z bazy dane do wyświetlenia z limitem od zmiennej $start(przez GET) z limitem $na_stronie

Forum Sony Ericsson Forum ZTE
02-05-2008 02:28
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
rogero Offline
Junior Member
**

Liczba postów: 2
Dołączył: 10-09-2008
Reputacja: 0
Post: #3
RE: [PHP/MySQL] Stronicowanie
Da się to zastosować w księdze gości opartej na bazie tekstowej?
10-09-2008 19:51
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Marcin Offline
Administrator
*******

Liczba postów: 814
Dołączył: 17-12-2007
Reputacja: 12
Post: #4
RE: [PHP/MySQL] Stronicowanie
Nie bardzo, powyżej opisane techniki dotyczą zastosowania z MySQL. Trzeba by się trochę pobawić aby zadziałało to z txt, zasada jest ogólnie podobna.

Zapraszam na NBA Forum oraz PS2 Forum.
10-09-2008 19:59
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
rogero Offline
Junior Member
**

Liczba postów: 2
Dołączył: 10-09-2008
Reputacja: 0
Post: #5
RE: [PHP/MySQL] Stronicowanie
ehhh Sad przerąbane nigdzie nie moge znalezc Stronicowania w txt
(Ten post był ostatnio modyfikowany: 10-09-2008 20:18 przez rogero.)
10-09-2008 20:17
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
DoGeR Offline
.:: DoGeR ::.
****

Liczba postów: 291
Dołączył: 18-12-2007
Reputacja: 9
Post: #6
RE: [PHP/MySQL] Stronicowanie
Rogero po prostu musisz zliczyć liczbę wierszy w pliku txt, a potem zamiast pobierać z bazy z limitem to pobierasz z pliku odpowiednie wiersze. Ogólnie działa podobnie

Forum Sony Ericsson Forum ZTE
11-09-2008 00:52
Odwiedź stronę użytkownika Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
przemo91r Offline
Junior Member
**

Liczba postów: 2
Dołączył: 06-01-2010
Reputacja: 0
Post: #7
RE: [PHP/MySQL] Stronicowanie
robie sobie wg. pierwszego sposobu jest prosty i zrozumiały nie mogę jednak ułożyć poprawnej składni w mysqlu Proszę o pomoc mam w bazie tabele newsy a pola id,tutul,tresc. Jak powinna być napisana taka składnia. Próbowałem na różne sposoby ale nic nie wychodzi cały czas wyskakuje blad mysql_fetch_assoc() który wiąże się wlaśnie z błędnie napisaną składnią prosze o pomoc. Z góry THX
06-01-2010 02:59
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
KowR Offline
Boos
*****

Liczba postów: 1,035
Dołączył: 28-05-2009
Reputacja: 21
Post: #8
RE: [PHP/MySQL] Stronicowanie
$query = "SELECT * FROM newsy ORDER BY id DESC LIMIT ".($start).",".$na_stronie."";

NIE DAJĘ NUMERU GG ale kto szuka nie błądzi Nie pomagam via PW, GG, Skype etc. - pomagam tylko i wyłącznie na TYM forum (ew. jak najdzie mnie ochota to także na blogu)
06-01-2010 03:11
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
przemo91r Offline
Junior Member
**

Liczba postów: 2
Dołączył: 06-01-2010
Reputacja: 0
Post: #9
RE: [PHP/MySQL] Stronicowanie
(06-01-2010 03:11)rodi napisał(a):  $query = "SELECT * FROM newsy ORDER BY id DESC LIMIT ".($start).",".$na_stronie."";


Jak mam poprostu SELECT * FROM newsy ORDER BY id DESC to wyswietla poprawnie tyle że na jedej stronie. Gdy robie tak jak podałeś to wyswietla błąd
Kod:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/skrypt/function.php on line 48
/////////////////////////////////////////////////////////////////////////////////////////////////
dałem rade Smile z zapytaniem ale jeszcze coś jest nie tak z wyświetlaniem ale myślę że teraz to już dam rade Smile
(Ten post był ostatnio modyfikowany: 07-01-2010 02:25 przez przemo91r.)
06-01-2010 03:25
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
michal_86 Offline
Junior Member
**

Liczba postów: 2
Dołączył: 26-02-2010
Reputacja: 0
Post: #10
RE: [PHP/MySQL] Stronicowanie
przeniesione!
(Ten post był ostatnio modyfikowany: 27-02-2010 00:47 przez michal_86.)
26-02-2010 23:14
Znajdź wszystkie posty użytkownika Odpowiedz cytując ten post
Odpowiedz 


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [PHP]Obsługa MySQL w php koko 0 1,335 26-07-2011 18:53
Ostatni post: koko

Skocz do:
Polecamy
SEO Hosting SEO Hosting Tworzenie sklepów
Sponsorzy forum


Opieka i sponsoring: Internet Wizard - profesjonalne projektowanie stron www
SEOLINE.PL to tani hosting pod każde zastosowanie. Hosting SEO najlepszy pod zaplecze!
Przyjaciele forum
Targi - Apartament Kołobrzeg - Koder xHTML/CSS - Darmowe Szablony Stron