Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Nie zdefiniowany index $_GET
uki0008
post
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 19.02.2007

Ostrzeżenie: (0%)
-----


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.

Ten post edytował uki0008 27.05.2010, 20:24:25
Go to the top of the page
+Quote Post
djgrin
post
Post #2





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 13.05.2007

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
zend
post
Post #3





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Fifi209
post
Post #4





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
djgrin
post
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 13.05.2007

Ostrzeżenie: (0%)
-----


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

Automatycznie, ale nie przypadkiem (IMG:style_emoticons/default/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...
Go to the top of the page
+Quote Post
zend
post
Post #6





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


Faktycznie, rzutuje (IMG:style_emoticons/default/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
Go to the top of the page
+Quote Post
djgrin
post
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 13.05.2007

Ostrzeżenie: (0%)
-----


Rzutowanie na int może i tak, ale na string już nie (IMG:style_emoticons/default/smile.gif) .
Wejście zawsze musi być filtrowane, wyjście escapowane - ja radzę się trzymać tego.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 11:57