Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php + mysql]Stronicowanie
Forum PHP.pl > Forum > Przedszkole
hinduseek
Witam serdecznie
Udało mi się napisać mały skrypcik stronicowania wyników. Wszystko ładnie, pięknie gra tylko jest mały szkopuł.

Mianowicie, gdy ustawiam, żeby na stronie było np. 25wyników i wynik dzielenia ilość rekordów z bazy / ilość wyników na stronie wyjdzie równe 25 - tworzy mi się na końcu pusta podstrona. I nie wiem jak się tego pozbyć.

Załączam treść skryptu
  1. <?php
  2. // porcjowanie rekordów mysql na podstrony
  3. include_once'dane.php';
  4. include_once'funkcje.php';
  5. $ile = 8; // ile rekordów na stronę
  6. $page=$_GET['page']; // id strony
  7. $od = $page * $ile; // obliczanie od którego ma wyświetlacz
  8. $pobieranie=mysql_query("SELECT * FROM `newsy` ORDER BY id DESC LIMIT ".$od.", ".$ile."");
  9. while ($rekord=mysql_fetch_array ($pobieranie)) {
  10. $wyraz=$rekord['tytul'];
  11. $aa=adres($wyraz);
  12. echo'<h2 class="News_nag" style="font-size:12px; margin:0;">'.$rekord[tytul].'</h2>';}
  13. $aaa=mysql_query("SELECT id FROM `newsy`");
  14. $id=mysql_num_rows($aaa); // ilość id z bazy
  15. $strony = $id / $ile; // ilosc stron
  16. $strony=floor($strony); // zaokrogl
  17. for ($i=0; $i<=$strony; $i++) {
  18. $dd = $i + 1;
  19. if($page==$i) {
  20. echo ' [<b>'.$dd.'</b>] '; // aktualna strona
  21. } else {
  22. echo' [<a href="news,archiwum,strona,'.$i.'.html" class="text_a">'.$dd.'</a>] ';}
  23. }
  24. ?>
Krzasz
  1. <?php
  2. $strony=floor($strony);
  3. for ($i=0; $i<=$strony; $i++) {
  4. ?>

zamień na:
  1. <?php
  2. $strony=ceil($strony);
  3. for ($i=0; $i<$strony; $i++) {
  4. ?>
hinduseek
Niestety ceil() dodaje dodatkowo jeszcze jedną pustą stronę :/
Krzasz
a to
  1. <?php
  2. $i<=$strony
  3. ?>

zmieniłeś na nierówność ostrą?
hinduseek
Zwracam honor mój błąd. Patrzyłem na Twoje for i nie dopatrzyłem się tej zmiany - mój błąd dry.gif
Ale teraz jest ok.

Dzięki za pomoc.
Cinkowy
  1. <?php
  2. echo' [<a href="news,archiwum,strona,'.$i.'.html" class="text_a">'.$dd.'</a>] ';}
  3. ?>


Jak zmienić ten link? żeby działo pod news.php questionmark.gif
mrjozo
Ten link dlatego tak wygląda, gdyż prawdopodobnie użytkownik ma włączony mod rewrite i link na zamieniany przez serwer na coś w stylu:

news.php?co=archiwum&strona=3

możesz zrobić tak samo jeśli napiszesz własne reguły dla rewrite, aby uzyskać efekt podobny do powyższego w pliku .htaccess należy umieścić:

Kod
RewriteEngine On
RewriteRule ^news,([0-9]+),([0-9]+),(.*)\.html$ news.php?opcja=$1&$2=$3 [QSA]
Cinkowy
tymaczasowo nie moge tego zrobic :/
a jak przerobic pętle żeby link byl "normalny" ?

  1. <?php
  2. $aaa=mysql_query("SELECT nr FROM `news`");
  3. $id=mysql_num_rows($aaa); // ilość id z bazy
  4. $strony = $id / $ile; // ilosc stron
  5. $strony=ceil($strony); // zaokrogl
  6. for ($i=0; $i<$strony; $i++) {
  7. $dd = $i + 1;
  8. if($page==$i) {
  9. echo ' [<b>'.$dd.'</b>] '; // aktualna strona
  10. } else {
  11. echo' [<a href="='.$i.'">'.$dd.'</a>] ';}
  12. }
  13. ?>


troche to dziwne mi sie wydaje a zarazem proste rozwiazanei, zna ktos moze lepsze?
mrjozo
  1. <?php
  2. echo' [<a href="news.php?co=archiwum&strona='.$i.'">'.$dd.'</a>] ';}
  3. ?>


potem możesz sprawdzić,która strona za pomocą:

  1. <?php
  2. echo $_GET['strona'];
  3. ?>
Cinkowy
hmm nadal nie działa...

a takie pytanie... co=archiwum&strona skad to sie bierze? nie nawidze robic linkow w php :/ czemu "co archiwum strona" jak to sie tworzy?
mrjozo
ale o co dokładnie Ci chodzi co Ci nie działa?

co=archiwum&strona napisałem jako przykład stworzenia linku podobnego do tego co chciałeś

jeśli wpiszesz news.php?co=archiwum&strona=5

to potem w pliku news.php możesz sprawdzić jakie argumenty zostały przesłane:

np
  1. <?php
  2. $co = $_GET['co'];
  3. $strona = $_GET['strona'];
  4. ?>

mozesz wykorzystac te zmienne gdzie będą Ci potrzebne lub stworzyć sobie inne, poczytaj o metodzie GET
zmienna $strona wykorzystujesz do sprawdzenia na której stronie jesteś, a $co to np informacja, że ma być otawrte archiwum, oczywiście może być samo strona:

news.php?strona=5

i napisz co tak naprawde chcesz zrobić
Cinkowy
dry.gif nie rozumiem niekotrych rzeczy :/ co jest tutaj nei tak :/

  1. <?php
  2. $limit = 4; //Liczba newsów na jednej stronie
  3.  
  4. $strona = $_GET['strona'];
  5.  
  6.  
  7. if (!isset($strona)) {
  8. $limit1 = 0;
  9. $limit2 = $limit;
  10. } else {
  11. $limit1 = $limit * $strona - $limit;
  12. $limit2 = $limit * $strona;
  13. }
  14.  
  15.  
  16.  
  17. $wynik = mysql_query ("SELECT * FROM news order by nr desc LIMIT ".$limit1.",".$limit2."");
  18.  
  19. //tutaj while
  20.  
  21. echo "<center>Wybierz stronę:";
  22. list($ile)=mysql_fetch_row(mysql_query("SELECT nr FROM `news`"));
  23.  
  24. $liczba_stron = $ile / $limit;
  25. $liczba_stron = ceil($liczba_stron);
  26.  
  27. for ($v = 1; $v <= $liczba_stron; $v++) {
  28.  
  29. if ($liczba_stron == 1) {
  30. echo " [<span class=i>".$v."</span>]";
  31. } else {
  32. echo " <b>[<a href="?strona=$v"><span class=i>".$v."</span></a>]</b>";
  33. }
  34. ?>


cos nei tak w kodzie? cos to stronicownei mi nei dziala nie ma bledu poprostu nie wyswietla starszych newsow ;/
-Lucas-
Niestety, siedzę już ze 3 godziny i nie działa mi to. Mogę Was prosić o pomoc?
Może to dlatego, że już późno jest?
Efekt działania kodu jest taki, że pojawia mi się linki do kolejnych porcji:
[1][2][3]
ale na co bym nie klikał zawsze pojawiają mi się pierwsze 4 wpisy z bazy sad.gif

  1. <?php
  2. $ile = 4; // ile rekordów na stronę
  3. $str = $_GET['str'];
  4. $page=$_GET['page']; // id strony
  5. $od = $page * $ile; // obliczanie od którego ma wyświetlać
  6. $wynik = mysql_query ("SELECT * FROM dzialki ORDER BY numer LIMIT ".$od.", ".$ile."") or
  7. die ("blad w pytaniu");
  8. print "<table cellpadding=3 cellspacing=2 border=0 align=left width=100% bgcolor=#EEEEEE>";
  9. while ($rekord = mysql_fetch_array ($wynik)) {
  10. $numer = $rekord[0];
  11. $foto = $rekord[1];
  12. $opis = $rekord[2];
  13. $cena = $rekord[3];
  14. $s_numer = substr("$numer", 0, 4);
  15.  
  16. print "<tr><td width=120 bgcolor=#FFFFFF class=txt><b><center>$numer</center></b><a href=dzialki.php?dzialka=$s_numer><img src=$foto border=0></td><td bgcolor=#FFFFFF class=txt>$opis</td><td width=75 bgcolor=#FFFFFF class=txt><font color=#DA251E><b>$cena</b></font></td></tr>\n";
  17. }
  18. print"</table>";
  19.  
  20. $aaa=mysql_query("SELECT numer FROM dzialki");
  21. $id=mysql_num_rows($aaa); // ilość id z bazy
  22. $strony = $id / $ile; // ilosc stron
  23. $strony=ceil($strony); // zaokrogl
  24. for ($i=0; $i<$strony; $i++) {
  25. $dd = $i + 1;
  26. if($page==$i) {
  27. echo ' [<b>'.$dd.'</b>] '; // aktualna strona
  28. } else {
  29. echo' [<a href="index.php?id=oferty&n=dzialki&str='.$i.'">'.$dd.'</a>]';}
  30. }
  31. ?>
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.