NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Isset OR a AND

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Jan Štrobl
Člen
Avatar
Jan Štrobl:19.9.2017 12:10

Ahoj, mám formulář ve kterém ošetřuji checkboxy.

Mám následující kód

if (!isset($_POST['Obchod1']) || !isset($_POST['Obchod2']) && !isset($_POST['pecivo'], $_POST['ovoce'], $_POST['zelenina']))
{
    echo "<script>alert('Nejsou vyplněna všechna pole!')</script>";
}

Potřebuji aby dotazovaný vybral buď obchod1 nebo obchod2 ale aby vybral alespoň jeden (respektive, musí se odeslat jeden z těch záznamů ale nemusí oba) a potom musí odeslat alespoň jeden záznam ze zboží.
A nejsem si jist jestli tam mám překlep který nevidím. Nebo jestli se pokouším o nesmysl.
Předem díky.

 
Odpovědět
19.9.2017 12:10
Avatar
dez1nd
Člen
Avatar
Odpovídá na Jan Štrobl
dez1nd:19.9.2017 12:59

zřejmě ti chybí závorky které spojí obchod1 a obchod 2
takže takhle

if ((!isset($_POST['Obchod1']) || !isset($_POST['Obchod2'])) && !isset($_POST['pecivo'], $_POST['ovoce'], $_POST['zelenina']))

tak jak to máš ty se ten AND počítá až s obchodem2

 
Nahoru Odpovědět
19.9.2017 12:59
Avatar
Odpovídá na Jan Štrobl
Neaktivní uživatel:19.9.2017 15:09

Jak říká dez1nd - protože v php má and přednost před or

Nahoru Odpovědět
19.9.2017 15:09
Neaktivní uživatelský účet
Avatar
Jan Štrobl
Člen
Avatar
Jan Štrobl:26.9.2017 8:47

Super, to pomohlo.. na chvilku. Přidal jsem podmínku $existuje, která mi má zjistit že se v databázi neobjevuje zákazník se stejným emailem. Tahle podmínka funguje ale tu první (tu validaci checkboxů) to zcela ignoruje.

if ($_POST) {
if ((!isset($_POST['obchod1']) || !isset($_POST['obchod2'])) && !isset($_POST['pecivo'], $_POST['ovoce'], $_POST['zelenina']) && (!isset($_POST['po']) || !isset($_POST['ut']) || !isset($_POST['st']) || !isset($_POST['ct']) || !isset($_POST['pa'])))
{
    echo "<script>alert('Nejsou vyplněna všechna pole!')</script>";
}
elseif
        ($existuje)
                 echo "<script>alert('Tento email je již registrován.')</script>";

else
{
    Db::query(' ...

Nehází mi to žádnou chybu.. prostě to tu podmínku ignoruje. A nemůžu přijít na to proč.

 
Nahoru Odpovědět
26.9.2017 8:47
Avatar
dez1nd
Člen
Avatar
Odpovídá na Jan Štrobl
dez1nd:26.9.2017 9:18

Projdi si pořádně větvění programů a hlavně podmínky.
ty teď kontroluješ pole nebo email takže se ti splní jen jedna z nich. Ty zřejmě potřebuješ kontrolovat zároveň, tzn zkontrolovat vyplněnost a potom zkontrolovat jestli ten email existuje.

Rozházej to do více ifů. (samostatný if pro pole a samostatný if pro email)

 
Nahoru Odpovědět
26.9.2017 9:18
Avatar
Odpovídá na Jan Štrobl
Michal Štěpánek:26.9.2017 10:03

Projdi si pořádně ještě jednou tu podmínku a dej si do pořádku ty závorky. Podle mě je máš napsané dost chaoticky...

Nahoru Odpovědět
26.9.2017 10:03
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Jan Štrobl
Michal Štěpánek:26.9.2017 10:09

proč máš toto

!isset($_POST['pecivo'], $_POST['ovoce'], $_POST['zelenina'])

takto dohromady a toto

(!isset($_POST['po']) || !isset($_POST['ut']) || !isset($_POST['st']) || !isset($_POST['ct']) || !isset($_POST['pa'])

rozdělené?

Nahoru Odpovědět
26.9.2017 10:09
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Jan Štrobl
Člen
Avatar
Odpovídá na Michal Štěpánek
Jan Štrobl:26.9.2017 10:32

u toho prvního potřebuji aby bylo vybráno ve všech třech kategoriích ale u toho druhého potřebuji byl vybrán ale stačí jen jeden den.

 
Nahoru Odpovědět
26.9.2017 10:32
Avatar
Odpovídá na Jan Štrobl
Michal Štěpánek:26.9.2017 10:34

A nemůže být problém právě toto? Neměl bys to rozdělit a "oANDovat"?

Nahoru Odpovědět
26.9.2017 10:34
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Odpovídá na Jan Štrobl
Uživatel sítě :26.9.2017 16:13
!isset($_POST['pecivo'], $_POST['ovoce'], $_POST['zelenina'])

nahraď:

(!isset($_POST['pecivo']) AND !isset($_POST['ovoce']) AND !isset($_POST['zelenina']))
Nahoru Odpovědět
26.9.2017 16:13
Chybami se člověk učí, běžte se učit jinam!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.