Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Notice: Undefined index
Forum PHP.pl > Forum > Przedszkole
IIFF
Każdy zna chyba ten błąd, ja aż za dobrze... Jaka zasada powoduje że on się pokazuje/nie pokazuje. Jak zdefiniować index raz a dobrze?!

Cytat
Notice: Undefined index: wyslane in x:\xampp\htdocs\xxx\xxx\xxx.php on line 13

  1. if ($_POST["wyslane"]) { // jeżeli formularz został wysłany, to wykonuje się poniższy skrypt


Nie chodzi mi o to co gdzie tam dopisać, ale jak definiować index w ogóle gdzie jest zawsze błąd gdy wyskakuje ten błąd? smile.gif

nospor
Ty nie masz definiować tylko masz sprawdzać czy jest zdefiniowane

NIe: if ($_POST["wyslane"])
a: if (isset($_POST["wyslane"]))

I pisz proszę w dziale przedszkole - przenosze
IIFF
Ok, dzięki, ale zmiana tego:

  1. if ($blad == 0) {


Daje kolejny błąd, jak rozpoznać kiedy dajemy isset, a kiedy co innego, w ogóle od czego to zależy?
peter13135
  1. $a=1;
  2. echo $a;

tutaj błędu nie będzie, bo przed wyświetleniem zmiennej, jest ona zawsze zdefiniowana

  1. echo $_GET['a'];

tutaj nie mamy pewności, że adres ma postać ?a=jakas_wartosc
więc musimy kod przerobić na:
  1. if(isset($_GET['a']))
  2. echo $_GET['a'];



[/php]
IIFF
A jak w TYM KONKRETNYM przypadku to zrobić, bo podajesz mi jakieś GETY których nie ma w moim kodzie, czy proponujesz przerobić to całkiem w taki sposób jak podałeś?

Proszę o tłumaczenie jak krowie na rowie - nie każdy siedzi w tym od lat. wink.gif
melkorm
Jeżeli zmienną sobie bierzesz za przeproszeniem z `dupy` to dostaniesz NOTICE, zmienna / indeks itp muszą być zadeklarowane przed jakimkolwiek wykorzystaniem, po to jest metoda isset która informuje Ciebie czy zmienna w ogóle istnieje - i nic więcej o niej nie mówi.

w skrócie :
  1. isset($a); // false
  2. echo $a; // NOTICE
  3.  
  4. $a = 'foo';
  5. isset($a); // true
  6. echo $a; // ok
  7.  
  8. $bar = array();
  9. isset($bar['foo']); // false
  10. echo $bar['foo']; // NOTICE
  11.  
  12. $bar = array( 'foo' => 1 );
  13. isset($bar['foo']); // true
  14. echo $bar['foo']; // ok
peter13135
jakbyś dokladnie przeczytał, to pewnie byś zrozumiał.. no ale może masz rację, nie pamięta wół jak cielęciem był. Postaram się napisać inacczej.

undefined variable jest wywalane, gdy próbujesz użyć zmiennej która nie istnieje
undefined index jest wywalane, gdy próbujesz użyć elementu tablicy który nie istnieje.

Za dużo kodu nie podałeś, więc ciężko mi na jego przykładzie coś mówić. Napiszę więc po swojemu.
  1.  
  2. if(jakas_funkcja()==false)
  3. $error=1;


Jeśli jakas_funkcja zwróci false, to $error będzie zdefiniowana i jej użycie np. takie:
  1. if($error=2)
nie będzie wywalało błędu.
w przeciwnym wypadku, zmienna nie będzie zdefiniowana, interpreter nie będzie znał tej zmiennej i dlatego wywali błąd.

Rozwiązaniem uprzednie sprawdzenie czy zmienna została zdefiniowanaq, czyli np:
  1. if(isset($error))



drugim sposób, który byś znał, gdybyś znał jakikolwiek język kompilowany to zdeiniowanie od razu tej zmiennej, aby mieć zawsze pewność, że ona istnieje. np.
  1.  
  2. $error=0;
  3. if(jakas_funkcja()==false)
  4. $error=1;
  5. if($error=1)
  6. {
  7. echo 'błąd';
  8. }

IIFF
Ok, dzięki, pogłówkowałem sam, dodałem na początku:
  1. $blad = isset($blad);

Błędu nie wywala, ale co to robi właściwie? smile.gif Sprawdza że zmienna nie istnieje i to wszystko? Nie ma to jakiś "ukrytych działań" i niepożądanych skutków?
peter13135
ojej, nie wiem jak inaczej mam Ci to wytłumaczyć :/
IIFF
A co? ŹLE? blink.gif
peter13135
Po prostu bez sensu wink.gif

tak trudno zrozumieć, że błąd undefined variable jest wywalany wtedy gdy chcesz użyć niezdefiniowanej zmiennej, a funkcja isset sprawdza czy dana zmienna jest zdefiniowana questionmark.gif
cycofiasz
Już chyba krowa szybciej by to ogarnęła wink.gif

Daj na początku taki kod:

  1. $_POST["wyslane"] = isset($_POST["wyslane"]) ? $_POST["wyslane"] : '';
konole
Cytat(cycofiasz @ 25.08.2011, 19:22:45 ) *
Już chyba krowa szybciej by to ogarnęła wink.gif

Daj na początku taki kod:

  1. $_POST["wyslane"] = isset($_POST["wyslane"]) ? $_POST["wyslane"] : '';

Używając operatora "?" do konstrukcji warunkowych jeszcze bardziej mu zmącisz w głowie. ;D
IIFF
Cytat(peter13135 @ 25.08.2011, 21:18:33 ) *
tak trudno zrozumieć, że błąd undefined variable jest wywalany wtedy gdy chcesz użyć niezdefiniowanej zmiennej, a funkcja isset sprawdza czy dana zmienna jest zdefiniowana questionmark.gif

Dlatego ją zdefiniowałem, by poprostu sprawdzała czy istnieje, a jeśli istnieje to: KONIEC. Poprostu by nie wywalałóo błędu...

Jaki jest lepszy sposób by: nie wywalało błędu?!

Jeśli ktoś chce więcej: o tej zmiennej, może sprawdzić od razu i mi doradzić, może jest lepszy sposób na zrobienie tego niż ten?
nospor
Ale durny poradnik na tych webskrypty. Zeby z takimi błędami pisać :/

$blad = 0;
To powinno być na samym początku i po sprawie. Skoro $blad jest zwiększana o 1 to trzeba jej ustawić początkową wartość, w typ przypadku 0.
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.