Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] jak użyć poprawnie operatora OR
Forum PHP.pl > Forum > Przedszkole
brychu
Cały czas się uczę PHP i sprawia mi to dużą radość. Dziś postanowiłem ugryźć taki problem.
Mam taką tabelkę. http://btr.esy.es/falanga.html
Chciałem utworzyć pola wyboru, z których użytkownik by wybierał odpowiednią kombinację. search.php
Formularzem wysyłam zmienne:
$a = $_GET["A"];
$b = $_GET["B"];
$m = $_GET["misja"];
$z = $_GET["zawroc"];

SEARCH.php
  1.  
  2. <form action="searchwynik.php" method="GET" target="wynik">
  3. <select name="A">
  4. <option value="pa">PLANETA A</option>
  5. <option value="ka">KSIĘŻYC A</option>
  6. </select>
  7. <select name="B">
  8. <option value="pb">PLANETA B</option>
  9. <option value="kb">KSIĘŻYC B</option>
  10. <option value="wp">WOLNA POZYCJA</option>
  11. <option value="pk">PRZESTRZEŃ KOSMICZNA</option>
  12. <option value="pz">POLE ZNISZCZEŃ</option>
  13. </select>
  14. <select name="misja">
  15. <option value="a">ATAKUJ</option>
  16. <option value="t">TRANSPORTUJ</option>
  17. <option value="s">STACJONUJ</option>
  18. <option value="z">ZATRZYMAJ</option>
  19. <option value="s">SZPIEGUJ</option>
  20. <option value="n">NISZCZ</option>
  21. <option value="k">KOLONIZUJ</option>
  22. <option value="e">EKSPEDYCJA</option>
  23. <option value="zb">ZBIERAJ</option>
  24. </select>
  25. <input type="checkbox" name="zawroc" value="1" />ZAWRÓĆ
  26. <input type=submit value="SZUKAJ"/>
  27. </form>
  28. </body>


Łapię je na drugą stronę i wykorzystuje tworząc ciąg znaków:

SEARCHWYNIK.php
  1. <?php
  2. $a = $_GET["A"];
  3. $b = $_GET["B"];
  4. $m = $_GET["misja"];
  5. $z = $_GET["zawroc"];
  6.  
  7. $wynik = $a.$b.$m.$z;
  8. echo $wynik;
  9.  
  10. if ($wynik == 'papbt' OR 'papbt1'){echo '<font color="red">WIDZI</font>';}
  11. else {echo '<font color="green">NIE WIDZI</font>';}
  12. ?>


Teraz chcę, żeby "system" szukał czy w tej kombinacji wynik to "WIDZI" czy "NIE WIDZI".
Problem w tym, że chciałem napisać instrukcję:
jeśli ciąg znaków to "papbt" ALBO "papbt1" to niech wyświetli "WIDZI".
  1. if ($wynik == 'papbt' OR 'papbt1'){echo '<font color="red">WIDZI</font>';}


Problem mam z tym "ALBO". Co tam mam wstawić zamiast "OR"? Kombinuję i nie wychodzi. Próbowałem |, ||, XOR. Wyświetla mi się słowo "WIDZI" za każdym razem, bez względu na kombinację znaków.
emstawicki
  1. if ($wynik == 'papbt' OR 'papbt1'){echo '<font color="red">WIDZI</font>';}

Taka łopatologiczna zasada interpretowania kodu:
Jeżeli {
1. zmianna wynik jest równa stringowi papbt
2. albo string papbt1
} Wypisz WIDZI
Mam nadzieję że kumasz.

Możliwe rozwiązania:
1. Najprostrze
  1. if ($wynik == 'papbt' || $wyniki == 'papbt1'){echo '<font color="red">WIDZI</font>';}

2. Jeżeli będzie kombinacji więcej to możesz sobie zrobić tablicę ciągów tekstowych i sprawdzać czy zmienna wynik zawiera się w tablicy
  1. $kiedy_widze = array('papbt','papbt1');
  2. if (in_array($wynik,$kiedy_widze)) echo 'Widze';

3. Jeżeli będzie to zależne od wielu rzeczy, to stwórz sobie funkcje
  1. function czy_widze($string) {
  2. ...
  3. return (rand(0, 1) == 1) ? true : false;
  4. ...
  5. }
  6.  
  7. if (czy_widze($wynik)) echo 'Widze';


IAmBoskiM
Jeżeli chcesz wstawić operator logiczny OR to użyj ||. Oznacza ten operator, że jeżeli co najmniej jeden z dwóch warunków jest prawdziwy to wyrażenie tež jest prawdziwy.

Operator logiczny XOR, czyli ^ o ile pamiętam oznacza, że jeżeli tylko jeden z dwóch warunków jest prawdziwy to wyrażenie też jest prawdziwe.

Operator bitowy OR, czyli | nie jest operatorem logicznym || i lepiej go nie stosować, aczkolwiek czasem zadziała. On służy do operacji bitowych, np:
  1. <?php
  2. echo 0b10 | 0b110; /* zwróci 0b110 czyli 6, albowiem:
  3. 010
  4. 110
  5. pierwszy bit u pierwszej wartosci: 0
  6. U drugiej: 0
  7. A zatem 0 | 0 = 0
  8. Drugi bit u pierwszej: 1
  9. Drugi u drugiej: 1
  10. A zatem 1 | 1 = 1
  11. Trzeci bit u pierwszej: 0
  12. Trzeci u drugiej: 1
  13. A zatem 0 | 1 = 1
  14. Czyli 0b110
  15. Podobnie z operatorem AND & */
  16. echo 0b10 | 0b110; // zwróci 0b10 czyli 2
  17. ?>


A co do zapisywania warunków to @emstawicki już to dobrze wytłumaczył.

Swoją drogą, naucz się chociaż podstaw CSS, albowiem znacznik <font> jest przestarzały.
kapslokk
Cytat
Operator bitowy OR, czyli | nie jest operatorem logicznym || i lepiej go nie stosować, aczkolwiek czasem zadziała.

Zaprawdę powiadam Ci, operator OR, czyli | działa zawsze, a nie tylko czasem, a co do lepiej go nie stosować - to lepiej go stosować jeśli faktycznie chcesz uzyskać bitowy OR.
brychu
Zastosowałem allay i pięknie wszystko działa. Dziękuję.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.