Autor Zpráva
Milan1236000
Profil
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';
}
?>
V souboru 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
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';
Funguje úplně stejně jako ten předchozí zápis - takže po napsání do URL "filmy.php?film=nazev-filmu" se zobrazí obsah 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
Č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
Milan1236000:
if(A) {
  if(B) {
    # A && B
  }
  else {
    # A
  }
}
Takto to vetviť by sa ale oplatilo, ak by to viedlo k rôznym akciám. Inak stačí, že existuje 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";
Bohužel se nezobrazí ani 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";
Z vyššie uvedenej podmienky stačí len tá druhá, silnejšia časť:
if($_GET['info'] =="galerie") echo "galerie";
Automaticky z toho vyplýva, že $_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 *
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
anonymníí:
Už je mi to jasné, díky moc všem.

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