Autor Zpráva
Broněk
Profil *
Zdravím,
nějak nechápu chování php.... Mám dva různé kousky kódu, logisky jsou úplně stejné, přitom druhý mě vytváří na serveru smyčku :(

v php mám:

//tohle je fukční kod
if($_GET['GET_A']=="ovoce"){
} else {
header("Location: http://domain.ltd/ovoce/");
exit;
}



//tohle udělá smyčku a nechápu proč
if($_GET['GET_A']!="ovoce"){
header("Location: http://domain.ltd/ovoce/");
exit;
}


Chápe to někdo? Mám tam něco špatně? Děkuji za případné vysvětlení B.
pcmanik
Profil
Broněk:
Zrejme tam mas nejaku dalsiu podmienku, ktora overuje ine udaje. A stale sposobuje potom presmerovanie. A to sa nasledne zacykli.
Broněk
Profil *
pcmanik:
Zrejme tam mas nejaku dalsiu podmienku, ktora overuje ine udaje. A stale sposobuje potom presmerovanie. A to sa nasledne zacykli.
Tak to by nefungovalo ani v prvním případě, ne?
pcmanik
Profil
Broněk:
Inak mas pravdu, az teraz som si to poriadne pozrel. Je to skutocne cudne.
YoSarin
Profil
Broněk:
Není tam někde nějaký netisknutelný/nezobrazovatelný paznak?
Broněk
Profil *
Jsem vůl!

špatně jsem to napsal, omlouvám se, tak ještě jednou

//tohle je fukční kod
if($_GET['GET_A']=="ovoce" OR $_GET['GET_A']=="zelenina" OR $_GET['GET_A']=="pecivo"){
} else {
header("Location: http://domain.ltd/ovoce/");
exit;
}




//tohle udělá smyčku a nechápu proč
if($_GET['GET_A']!="ovoce" OR $_GET['GET_A']!="zelenina" OR $_GET['GET_A']!="pecivo"){
header("Location: http://domain.ltd/ovoce/");
exit;
}


ještě jednou se omlouvám! Doufám, že teď už tam bude nějaký zakopaný pes ;)
Tori
Profil
Broněk:
nemá v druhém případě být AND místo OR?
Broněk
Profil *
Tori:
nemá v druhém případě být AND místo OR?
No s AND to funguje, ale to přece nedává smysl, ne?
Tori
Profil
Broněk:
No mně dává - pokud by se mělo něco dostat za tu podmínku, tak by se to muselo rovnat zároveň všem třem hodnotám. :)
YoSarin
Profil
Broněk:
Tori má pravdu - pokud budeš mít v GET_A ovoce, tak to selže na porovnání se zeleninou a redirectne tě to znova na ovoce... a tak pořád dokola...
Broněk
Profil *
Tori:
Tak ja nevim, přesměruj stranku pokud url neobsahuje text: ovoce nebo zelenina nebo pecivo, ne?

Přesměruj stranku pokud url neobsahuje text: ovoce a zelenina a pecivo mi příjde více než divné ;)
YoSarin
Profil
Broněk:
pokud url = ovoce, pak to vypadá takhle:
Přesměruj pokud:
url je různá od ovoce (false, protože ovoce je ovoce)
nebo
url je různá od zelenina (true, protože ovoce není zelenina)
// podmínka splněna

To co tam máš lze přepsat jako:
if($_GET['GET_A']!="ovoce") {
  header("Location: http://domain.ltd/ovoce/");
  exit;
} else if ($_GET['GET_A']!="zelenina") {
  header("Location: http://domain.ltd/ovoce/");
  exit;
} else if($_GET['GET_A']!="pecivo") {
  header("Location: http://domain.ltd/ovoce/");
  exit;
}

A schválně si to zkus projít s libovolnou hodnotou v $_GET['GET_A'];
Tori
Profil
Broněk:
No ale říkáte to se závorkama: "url neobsahuje text: (ovoce nebo zelenina nebo pecivo)". Ergo ekvivalentní zápis je
if (! in_array($url, array('ovoce', 'zelenina', 'pecivo')))
tj. url se nerovná ani jedné z těch hodnot, tj.
(url != ovoce) a zároveň (url != zelenina) a zároveň (url != pecivo)
petr 6
Profil
Broněk:
Nastuduj si práci s výrokovou logikou, Tori a YoSarin mají pravdu.

!(A | B) je totéž jako !A & !B

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0