Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Nie zdefiniowany index $_GET
Forum PHP.pl > Forum > Przedszkole
uki0008
Plik wywala mi takie błędy:

Notice: Undefined index: start in c:\usr\krasnal\www\djuki\electro.php on line 95

Notice: Undefined index: start in c:\usr\krasnal\www\djuki\electro.php on line 97

Notice: Undefined index: start in c:\usr\krasnal\www\djuki\electro.php on line 115

oto fragment kodu:
  1. $all = mysql_query("SELECT COUNT(*) FROM electro");
  2.  
  3. $ile = mysql_result($all, 0); // teraz zliczamy ile mamy wszystkich wierszy w bazie
  4.  
  5.  
  6.  
  7. $next = $_GET['start'] + $ile_na_stronie; // ustawiamy wartość dla linku następny...
  8.  
  9. $prev = $_GET['start'] - $ile_na_stronie; // ... i poprzedni
  10.  
  11.  
  12.  
  13. if($ile > $ile_na_stronie) // sprawdzamy czy zmienne $ile jest większa od ilości danych wyświetlanych
  14.  
  15. {
  16.  
  17. for($i=0 ; $i<ceil($ile/$ile_na_stronie) ; $i++) // zaokrąglamy ułamek do "góry" który otrzymaliśmy z podzielenia ilości wierszy przez ilość wyświetlanych na stronie
  18.  
  19. {
  20.  
  21. echo '<a href="electro.php?start='.($i*$ile_na_stronie).'">'.($i+1).'</a> | '; // wyświetlamy odpowiednie strony
  22.  
  23. }
  24.  
  25.  
  26.  
  27. if ($_GET['start'] == 0) // sprawdzamy jeśli strona w $_GET jest równa 0 ...
  28.  
  29. {
  30.  
  31. echo '<a href="electro.php?start='.$next.'">Następny ></a>'; // ... to wyświetlamy tylko link: Następny ...
  32.  
  33. }
  34.  
  35. elseif (($_GET['start'] > 0) && ($next < $ile)) // jeśli strona jest większa od 0 i zarazem następna stronę mniejsza od ilości...
  36.  
  37. {
  38.  
  39. echo '<a href="electro.php?start='.$prev.'">< Poprzedni</a> | '; // ... wyświetlamy linki Poprzedni i ...
  40.  
  41. echo '<a href="electro.php?start='.$next.'">Następny ></a>'; // ... Następny
  42.  
  43. }

Jest to fragment strony z includowaniem.
Jak pozbyć się tych błędów.

/PS dodam ze linijka 95 to tutaj 7 wiersz.
djgrin
Błąd oznacza, że nie podajesz skryptowi parametru 'start', którego potem używasz (właśnie w 7. linijce). Dopisz do adresu strony np. ?start=1.
Jeśli chciałbyś podać wartość domyślną (zapewne 1), to możesz napisać np.:
if(!isset($_GET['start'])) $_GET['start']=1;
albo lepiej:
if(empty($_GET['start']) || !is_numeric($_GET['start'])) $_GET['start']=1;
jeśli oczekujesz, że w 'start' będzie wartość numeryczna.
zend
Typuj dane z $_GET'a!
  1. $start = (int)$_GET['start'];
  2. //$_GET['start'] > 3 taki kod nie zadziała Ci poprawnie bo będzie porównywał string z liczbą, efekt nie będzie taki jak się tego spodziewasz
  3. //$start > 3 to zadziała bo porównuje dwie liczby
Fifi209
Cytat(zend @ 27.05.2010, 22:03:54 ) *
Typuj dane z $_GET'a!
  1. $start = (int)$_GET['start'];
  2. //$_GET['start'] > 3 taki kod nie zadziała Ci poprawnie bo będzie porównywał string z liczbą, efekt nie będzie taki jak się tego spodziewasz
  3. //$start > 3 to zadziała bo porównuje dwie liczby


A php przypadkiem automatycznie nie rzutuje na dany typ przy porównaniu?
djgrin
Cytat(fifi209 @ 27.05.2010, 22:06:14 ) *
A php przypadkiem automatycznie nie rzutuje na dany typ przy porównaniu?

Automatycznie, ale nie przypadkiem smile.gif.
"3">1 to true.
Dlatego lepiej sprawdzać czy wartość ma oczekiwany typ funkcjami, które podałem, ale chodzi tu o bezpieczeństwo...
zend
Faktycznie, rzutuje smile.gif Ale mimo wszystko uważam "własnoręczne" rzutowanie za dobrą praktykę i tego radził bym się mu trzymać, zwłaszcza że może go ochronić przed wszelakiej maści atakami na baze
djgrin
Rzutowanie na int może i tak, ale na string już nie smile.gif.
Wejście zawsze musi być filtrowane, wyjście escapowane - ja radzę się trzymać tego.
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.