[PHP]Niepoprawny warunek?


(Marcin E Pc) #1

Witam!

Mam taki kod:

<?php

     $ciag = $_POST['ciag'];

     $ciag2 = $_POST['ciag2'];

     if ( ($ciag!== 'xxxxx')&&($ciag2!=='yyyyyy') )

     {

     echo "zzzzz!";

     exit;

     }

?>

I jest problem, gdy $ciag jest równa xxxxx, a $ciag2 nie jest równa yyyyyy to skrypt i tak wyświetli zzzzz. Czym jest to spowodowane? Czyli wystarczy że jeden warunek jest spełniony, i instrukcja nie zostanie wykonana


(Trance) #2
<?php

     $ciag = $_POST['ciag'];

     $ciag2 = $_POST['ciag2'];

     if ( ($ciag != 'xxxxx')&&($ciag2 != 'yyyyyy') )

     {

     echo "zzzzz!";

     exit;

     }

?>

a teraz ??


(Marcin E Pc) #3

dalej nie działa. Zmienne są stringiem


(Trance) #4

sprawdź czy tekst który wysyłasz w formularzu jest tym czego oczekujesz, u mnie działa


(Marcin E Pc) #5

Nawet jak zrobiłem tak, już dla pewności:

<?php

     $ciag = 'xxxxxh';

     $ciag2 = 'yyyyyyb';

     if ( ($ciag != 'xxxxx')&&($ciag2 != 'yyyyyy') )

     {

     echo "zzzzz!";

     exit;

     }

?>

Działa pokazuję zzzzz!. Ale jak już zrobię tak:

<?php

     $ciag = 'xxxxxh';

     $ciag2 = 'yyyyyy';

     if ( ($ciag != 'xxxxx')&&($ciag2 != 'yyyyyy') )

     {

     echo "zzzzz!";

     exit;

     }

?>

To już nie wyświetli zzzzz!, a zmieniłem tylko wartość zmiennej $ciag2, na poprawny, i teraz

($ciag2 != 'yyyyyy')

Przyjmuje wartość false, i tylko jeden warunek jest spełniony, a instrukcja się nie wykonuje. Co jest nie tak?


(Trance) #6

i wszystko działa w porządku:

skoro

$ciag = 'xxxxxh';

a w warunku porównujesz z 'xxxxx', w sumie z warunku ($ciag != 'xxxxx') otrzymujesz 1 (PRAWDA)

zaś

$ciag2 = 'yyyyyy'; a w warunku porównujesz to z yyyyyy i sprawdzasz czy są różne, nie są więc tutaj otrzymujesz 0 (FaŁSZ)

podsumowując 1 && 0= 0 więc napis nie wyswietli się

czyli wszystko działa ok, moze pomyliłeś && z || :slight_smile:


(Marcin E Pc) #7

Tak, rzeczywiście w tym tkwił błąd, nie do końca to przemyślałem, i zamiast alternatywy wkradła się koniunkcja. Dzięki za pomoc, temat do zamknięcia :slight_smile: