Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Stronicowanie
Forum PHP.pl > Forum > Przedszkole
c00per
Cześć.

Napisałem skrypt stronicowania. Wszystko działa, jednak gdy wejdę prosto z indexu bez żadnych np. ?cmd=0 itp. to wywala błąd poniżej.

Cytat
Notice: Undefined index: cmd in C:\wamp\www\strona\index.php on line 12

Ale poniżej wszystko gra. Tylko ten błąd mnie denerwuje.
Jak go usunąć?

Kod skryptu jest taki:

  1. <?php
  2.  
  3. $cmd = $_GET['cmd'];
  4. if($cmd == FALSE)
  5. {
  6.  
  7. $cmd = 0;
  8. }
  9.  
  10. mysql_connect("localhost", "root", "") or
  11. die("Nie mozna polaczyc sie z mySQL");
  12. mysql_select_db("test") or
  13. die("Nie mozna polaczyc sie z baza");
  14.  
  15. $ile_na_stronie = 3;
  16. $query = mysql_query("SELECT * FROM news");
  17. $wszystkie = mysql_num_rows($query);
  18. $strony = ceil($wszystkie/$ile_na_stronie);
  19. $zapytanie = mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT ".$cmd.", ".$ile_na_stronie);
  20.  
  21.  
  22.  
  23. while($rows = mysql_fetch_array($zapytanie))
  24.  
  25. {
  26. $id = $rows['id'];
  27. $tytul = $rows['tytul'];
  28. $tresc_krotka = $rows['tresc_krotka'];
  29. $autor = $rows['autor'];
  30. $data = $rows['data'];
  31. echo "<font size=1><table border=0 width=500 align=center>
  32. <tr><td width=100%><b>".$tytul."</b></td></tr>
  33. <tr><td width=100% colspan=2>".$tresc_krotka."</td></tr>
  34. <tr><td width=50%>".$data."</td><td width=50%>Autor: <b>".$autor."</b></td></tr>
  35. </table><hr width=500></font>";
  36. }
  37.  
  38. echo("<center><br><BR>| ");
  39. for($i = 0; $i < $strony; $i++)
  40. {
  41. $int = $i+1;
  42. echo "<a href=index.php?cmd=".$i*$ile_na_stronie.">".$int."</a> | ";
  43. }
  44.  
  45. echo "</center>";
  46. ?>
  47.  
  48. Co jest źle? Miejcie na uwagę, że to jest jeden z pierwszych skryptów, prosiłbym o wyrozumiałość :) Proszę :))
  49.  
  50. Pozdrawiam i z góry thx za pomoc!
nospor
  1. if (isset($_GET['cmd']))
  2. $cmd = $_GET['cmd'];
  3. else
  4. $cmd = 0;
c00per
Lipa. Nie działa. Jak błąd wyskakiwał, tak wyskakuje dalej. No nie wiem co robić. A może skrypt jest źle zbudowany. Niby działa, a nie działa. Wywala błąd. Nadal ten sam. Mam nadzieję, że ktoś mi pomoże. Bo już długo męczę się z tym.

Pozdrawiam i dziękuję za pomoc!

thek
nospor, poza if i pętlami będzie problem z zasięgiem zmiennych winksmiley.jpg Jak już co to prędzej:
  1. $cmd = 0;
  2. if (isset($_GET['cmd']))
  3. $cmd = $_GET['cmd'];

Inna sprawa to tak, że chyba ma być
  1. (...)LIMIT ".($cmd*$ile_na_stronie).", ".$ile_na_stronie);
w zapytani wybierającym. Bo inaczej zadziała Ci to nieco nie tak jak trzeba. Sam sprawdź winksmiley.jpg
c00per
Cytat
nospor
?

Mógłbyś mi wyjaśnić co to jest? Gdy wstawię
Kod
$cmd = 0;
if (isset($_GET['cmd']))
    $cmd = $_GET['cmd'];
to też lipa.
Co ciekawe, jak dodam
Kod
..*$ile_na_stronie
- to nic się nie zmienia, dalej działa poprawnie, tzn.. stronicuje dobrze.
Także jak możesz... ee.. o co chodzi z tym nospor heh smile.gif

Pozdrawiam.
nospor
kod co ci podalem jest poprawny. pewnie go źle wkleiles.

Cytat
nospor, poza if i pętlami będzie problem z zasięgiem zmiennych
Mylisz się.

ps: przenosze
c00per
Mój błąd. Zwracam honor. Mówiliście dobrze. Dzięki wielkie Wam obojgu smile.gif

//thek

Mówiłeś, żeby dodać
Kod
*$ile_na_stronie


Gdy dodam, po kliknięciu np. na drugą stronę nic się nie wyświetla. Nie należy nic dodawać.
Przynajmniej wtedy działa. Tak tylko chciałem dopowiedzieć.
Thx again! smile.gif
thek
@nospor: sprawdź pętle. O ile z ifem mi to różnie działało (raz zmienna wewnątrz if była widziana poza nim, raz nie - chyba zależne od wersji php i ustawień tegoż bo nie widzę innej możliwości), tak w pętlach uzna zmienną za lokalną i poza nią na bank mi się "gubiło" ustawiając ją przy wywołaniu "pozapętlowym" na domyślny ciąg pusty lub 0, zależnie od kontekstu. Stąd wolę zawsze ustawić wartość domyślną wpierw, a potem ją ewentualnie zmienić w trakcie działania skryptu. Dla mnie bezpieczniejsze i wygodniejsze podejście niż sprawdzanie czy gdzieś nie zapomniałem w else czegoś ustawić awaryjnie.

@c00per: pierwszy parametr LIMIT oznacza offset. Jeśli wstawię tam na pałę numer strony to odczyta mi LIMIT 0,3 lub LIMIT 1,3 czy też LIMIT 2,3 co można przetłumaczyć "odczytaj 3 rekordy z tabeli zaczynając od wiersza nr X w kolejności". Zamiast więc skakać blokami (0,1,2), (3,4,5), (6,7,8) skrypt tworzy: (0,1,2), (1,2,3), (2,3,4). Chyba widzisz różnicę? Zmyłką może być dla Ciebie jedna rzecz... Popatrz JAK tworzysz link. Tam wpychasz nielogiczne wywołanie nieco gdzie pod numerkiem strony 2 masz tak naprawdę wywołanie 6
  1. echo "<a href=index.php?cmd=".$i*$ile_na_stronie.">".$int."</a> | ";
zamiast sensowniejszego
  1. echo "<a href=index.php?cmd=".$i.">".$int."</a> | ";
i przepchnięcie tego mnożenia do, podanego przeze mnie, zmienionego LIMIT. Jeśli nadal nie widzisz to popatrz jakie cmd się ustawia gdy klikniesz strony 2, 3 czy 5... Nie 2, 3 i 5 tylko 6, 9 i 15. Tak może być, ale może być nieco mylące.
c00per
No tak smile.gif Kruczek w linkach. Dzięki @thek za wyjaśnienie.
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.