Autor | Zpráva | ||
---|---|---|---|
Milan1236000 Profil |
#1 · Zasláno: 22. 12. 2015, 01:26:59
Zdravím, mám soubor
filmy.php a do něj se vypíše podle zadaných parametrů v URL další soubor. S jedním parametrem to funguje normálně, ale při zadání dalšího parametru do URL se vždy vypíše soubor slozka/filmy_polozky.php , co je tam špatně?
<?php if (!isset($_GET['film'])) include 'slozka/filmy_polozky.php'; else { if (isset($_GET['film'])) { if((isset($_GET['film'])) || (isset($_GET['film']) && isset($_GET['info']))) include 'soubor/filmy_film.php'; else include 'slozka/filmy_polozky.php'; } else include 'slozka/film_polozky.php'; } ?> filmy_film.php mám další podmínku:
<?php if(isset($_GET['info']=="galerie")) include 'slozka/filmy_film_galerie.php'; else if(isset($_GET['film']=="video")) include 'slozka/filmy_film_video.php'; ?> |
||
mimochodec Profil |
Nevím, proč se to nechová jak chceš, ale vím, že tohle je špatně:
<?php if (!isset($_GET['film'])) include 'slozka/filmy_polozky.php'; else { if (isset($_GET['film'])) { if((isset($_GET['film'])) || (isset($_GET['film']) && isset($_GET['info']))) Podmínka je buď splněna, nebo nesplněna. Druhý, třetí a čtvrtý test stejného GETu je nadbytečný. |
||
Milan1236000 Profil |
#3 · Zasláno: 22. 12. 2015, 03:17:58
mimochodec:
To je taky pravda, toto je zjednodušeně: if (isset($_GET['film'])) { if((isset($_GET['film'])) || (isset($_GET['film']) && isset($_GET['info']))) include 'slozka/filmy_film.php'; else include 'slozka/filmy_polozky.php'; } else include 'slozka/filmy_polozky.php'; filmy_film.php , ale po napsání "filmy.php?film=nazev-filmu?info=galerie" se zobrazí obsah filmy_polozky.php .
|
||
mimochodec Profil |
Milan1236000:
A ten druhý a třetí test $_GET['film'] tam je teď k čemu? První řádek je jasný. Jak přesně má ten isset ovlivnit výsledek podmínky na třetím a čtvrtém řádku? |
||
Milan1236000 Profil |
mimochodec:
Ano, je to, jak píšeš. Podmínka na druhém řádku je tam proto, aby se do stránky připojil soubor filmy_film.php ale jen za podmínky, že v URL bude .../filmy.php?film=nazev-filmu nebo .../filmy.php?film=nazev-filmu?info=neco , pokud by tam bylo jen .../filmy.php?info=neco , tak se zobrazí filmy_polozky.php . Mám tam schválně ještě ošetření, aby to neházelo chyby, když URL neexistuje:
if (isset($_GET['film'])) { $getURL=$_GET['film']; //---------------------------------------------- $vysledek_kontrola = $vysledek_kontrola->query(" SELECT * FROM `filmy` WHERE Url=\"$getURL\" "); $zaznam_kontrola = $vysledek_kontrola->fetch_object(); //----------------------------------------------- if((isset($zaznam_kontrola->Url)) || (isset($zaznam_kontrola->Url) && isset($_GET['info']))) include 'slozka/filmy_film.php'; else include 'slozka/filmy_polozky.php'; } else include 'slozka/filmy_polozky.php'; |
||
Alphard Profil |
Tady se neustále opakuje vzor
A || (A && B) , což je ekvivalentní k A . Část B se nikdy nevyhodnotí, na její hodnotě tudíž nezáleží.
|
||
tiso Profil |
#7 · Zasláno: 22. 12. 2015, 12:41:19
Čo sa týka url, tak tam máš menšiu chybičku:
/filmy.php?film=nazev-filmu&info=neco |
||
Milan1236000 Profil |
tiso:
Jasně, takhle to má být, díky. Alphard: Jak tedy napsat podmínku, aby se ta stránka zobrazila jen pokud je zadaný první parametr nebo první a zároveň druhý? Ten první tam také potřebuji, podle něho se vypisuje z databáze. Nechce se mi to řešit přes session. |
||
mimochodec Profil |
Milan1236000:
„jen pokud je zadaný první parametr nebo první a zároveň druhý“ Koupím si auto, jestli bude mít dost velký kufr, nebo jestli bude mít dost velký kufr a zároveň bude žluté. Vyjádři, jaký vliv na můj nákup bude mít barva auta. |
||
Tomáš123 Profil |
#10 · Zasláno: 22. 12. 2015, 13:53:25
Milan1236000:
if(A) { if(B) { # A && B } else { # A } } |
||
Milan1236000 Profil |
mimochodec:
Jasně chápu, barva rozhodující není, takže ještě jinak: if (isset($_GET['film'])) { $getURL=$_GET['film']; //---------------------------------------------- $vysledek_kontrola = $vysledek_kontrola->query(" SELECT * FROM `filmy` WHERE Url=\"$getURL\" "); $zaznam_kontrola = $vysledek_kontrola->fetch_object(); //----------------------------------------------- if((isset($zaznam_kontrola->Url)) include 'slozka/filmy_film.php'; else include 'slozka/filmy_polozky.php'; } else include 'slozka/filmy_polozky.php'; V filmy_film.php mám podmínku na ověření:
if(isset($_GET['info']=="galerie")) echo "galerie"; else echo "něco"; galerie ani něco , i když mám v URL /filmy.php?film=nazev-filmu&info=neco , jak to?
|
||
Tomáš123 Profil |
Milan1236000:
„jak to?“ Kvôli nesprávnej syntaxi. Nedáva to význam, neviem si predstaviť, čo by mala funkcia isset() vrátiť. Vracia syntaktickú chybu.
if(isset($_GET['info']) && $_GET['info'] =="galerie") echo "galerie";
$_GET['info'] is set.ÚPRAVA: [#14] anonymníí vysvetľuje prečo preškrtnuté tvrdenia neplatia. |
||
Milan1236000 Profil |
Tomáš123:
Ano, to je ono, díky moc. Pořád mě to ale mate, proč tam nemůže být isset nebo u těch ostatních kontrol jen if bez isset .
|
||
anonymníí Profil * |
#14 · Zasláno: 22. 12. 2015, 17:32:15
Tomáš123:
„Automaticky z toho vyplýva, že $_GET['info'] is set.“ To není pravda. Snaha použít klíč, o němž nevím, zda skutečně existuje, bude vyhazovat warning undefined key .
Samozřejmě záleží na kontextu, pokud je testování existence proměnné/klíče již výše, není třeba jej duplikovat. Zde ale není zřejmé, jak vypadá kód předtím, a proto nelze obecně říci, že Automaticky z toho vyplýva, že $_GET['info'] is set.. Milan1236000: Motáš dohromady 2 věci: isset , tedy jakoukoliv existenci proměnné/klíče, a její konkrétní hodnotu. Zkrátit to do jednoho zápisu nejde, musíš tu podmínku rozepsat na dvě části, nejprve zjistit, že ta proměnná/klíč existuje, tedy isset() , a pokud ano (&& ), otestovat její hodnotu ($array['key'] == 'value' ).
|
||
Milan1236000 Profil |
#15 · Zasláno: 22. 12. 2015, 18:45:45
anonymníí:
Už je mi to jasné, díky moc všem. |
||
Časová prodleva: 9 let
|
0