Podstawy PHP i MySQL
Temat 3 - Instrukcja warunkowa if ... else ..., swith.
Operatory logiczne.

Powrót do spisu tematów


W tym rozdziale:

  1. Skóadnia instrukcji warunkowej if ... else ...
  2. Operatory porównania
  3. Operatory logiczne and i or
  4. Jak przygotować się na odebranie zmiennej, która nie zostaóa wysóana z formularza - funkcja empty() i isset()
  5. Funkcja exit();
Czym jest instrukcja warunkowa?

Nie ma józyka programowania, który nie posiadaóby w swojej strukturze instrukcji warunkowych. Piszóc jakikolwiek program przygotowujemy go na reakcje w odpowiedzi na zachowanie użytkownika. Program sprawdza, jak zachowaó sió uóytkownik, np. co wpisaó w pole tekstowe, które pole wybraó, w który przycisk kliknów, nastópnie wykonuje akcję (kod), który w zamierzeniu programisty ma się wykonać w odpowiedzi na oczekiwane zdarzenie.

Skóadnia instrukcji warunkowej if

Składnia instrukcji warunkowej if przedstawia nastópujący wzór:

if(warunek)
{
   instrukcje, które majó się wykonaó,
   gdy warunek jest spełniony;
}else{
   instrukcje, które majó się wykonać,
   gdy warunek nie jest spełniony;
};

Przeanalizujmy nastópujócy kod skryptu:


Rys. 3_1 - Przykóad instrukcji if ... else ...

Efektem dziaóania powyószego skryptu bódzie napis "Liczba większa od zera" gdyż warunek $liczba>0 został spełniony.

Operatory porównania

Bardzo czósto bódziemy porównywaó wartości zmiennych. W tym celu skorzystamy z następujących operatorów:

  • == (dwa znaki równoóci) - porównanie dwóch zmiennych, czy są równe
    np.: if ($zmienna1 == $zmienna2)
    oznacza:
    jeóeli $zmienna1 ma taką samą wartość, jak $zmienna2

  • != (wykrzyknik i znak równoóci) - porównanie dwóch zmiennych, czy nie są równe
    np.: if ($zmienna1!=$zmienna2)
    oznacza:
    jeóeli $zmienna1 nie równa sió $zmienna2

  • === (trzy znaki równoóci) - porównanie dwóch zmiennych pod wzglódem ich typów i wartoóci
    np.: if($zmienna1===$zmienna2)
    oznacza:
    jeóeli $zmienna1 i $zmienna2 są tego samego typu (np. tekst) i przechowujó te same wartoóci

  • > (znak wiókszoóci) - porównanie dwóch zmiennych, czy pierwsza jest wióksza od drugiej
    np.: if ($zmiena1>$zmienna2)
    oznacza:
    jeóeli $zmienna1 jest większa od $zmienna2

  • < (znak mniejszoóci) - podobnie, jak wyóej, lecz o przeciwnym znaczeniu

  • >= (znak wiókszoóci i znak równoóci) - porównanie dwóch zmiennych, czy pierwsza jest wióksza lub równa drugiej
    np.: if ($zmienna1>=$zmienna2)
    oznacza:
    jeóeli $zmienna1 jest wióksza lub równa $zmienna2

Jeóeli porównujemy wartość zmiennej z ciągiem tekstowym, tekst powinien być umieszczony w pomiódzy znakami cudzysóowu:
if($zmienna=="Ala") ...

Operatory logiczne

  • or (lub) - alternatywa
    np.: if ($zmienna1 ==2 or  $zmienna2 ==2)
    oznacza:
    jeóeli $zmienna1 jest równa liczbie dwa, lub $zmienna2 jest równa liczbie 2

  • and (i) - koniunkcja
    np.: if ($zmienna1==1 and $zmienna2==1)
    oznacza:
    jeóeli $zmienna1 równa sió liczbie 1 i $zmienna2 równa się liczbie 1

Odbieranie zmiennych z formularzy, funkcja empty

W zadaniu z poprzedniej części użytkownik rozwiózując test nie musiał zaznaczać (wypełniać) wszystkich pól. Jeźeli pozostawił puste pole, nie nastąpiło przekazanie zmiennej. Co się stanie, gdy będziemy próbowaó w skrypcie odwołać się do zmiennej, która nie istnieje?
Interpreter moóe wygenerowaó komunikat o bółędzie:


Rys. 3_2 - Komunikat o braku istnienia zmiennej o nazwie "zmienna"


Rys. 3_3 - Skrypt generujący powyższy komunikat

W powyószym skrypcie linia polecenia error_reporting(E_ALL); powoduje wyówietlenie wszystkich bóódów, takóe tych, które nie só krytycznymi jeóeli chodzi o dziaóanie skryptu. Jak widaó, skrypt nie przerwaó dziaóania, zostaóo wyówietlone zdanie "Wyówietlam wartoóó zmiennej".

Zmienne z formularzy będziemy odbierać w nastópujący sposób:

if(empty($_POST['nazwa_zmiennej'))
{
   $nazwa_zmiennej="";
}else{
   $zmienna=$_POST['nazwa_zmiennej'];
};

Powyósza linia kodu oznacza:
Jeóeli jest pusta (empty) zmienna o nazwie "nazwa_zmiennej" przekazywana metodó POST (czyli nie ma óadnej wartoóci),
to przypisz zmiennej o nazwie "nazwa_zmiennej" wartoóó znaku pustego "" (pole tekstowe o zerowej dóugoóci),
w przeciwnym wypadku
przypisz zmiennej o nazwie "nazwa_zmiennej" takó wartoóó, jaka zostaóa przesóana metodó POST.

Powyósze deklaruje istnienie zmiennej o nazwie "nazwa_zmiennej" bez wzglódu na to, czy została ona przesłana przez formularz, czy teó nie. Można więc odwoływać się do tej zmiennej w kaódym miejscu kodu, co nie będzie powodowało generowania komunikatu o błędzie.

W powyższym przykładzie moóe być zastosowana równieó funkcja isset();
wynikiem jej dziaóania jest "prawda", jeżeli zmienna istnieje, choóby o pustej wartoóci, "faósz", jeóeli zmienna nie istnieje.

Zaleca sió w trakcie pisania skryptów stosowania linii: error_reporting(E_ALL); dla wyówietlenia wszystkich ewentualnych bóódów. Po zakończeniu edytowania skryptu, należy powyższą linię zamienić na znaną error_reporting(0);

ówiczenie 3_1 - Przykóad prostego testu

  1. Naleóy umieóció na swoim koncie WWW plik 03_01.php i 03_01a.php (do pobrania tutaj 03_01.zip).
  2. Na podstawie analizy dostarczonego kodu i komentarzy, należy przygotowaó Zadanie 2.

Funkcja exit();

Jeóeli oczekiwany warunek nie został spełniony lub powstał przewidziany bóód, a co za tym idzie dalsze wykonywanie skryptu jest pozbawione sensu, możemy zatrzymaó dalsze analizowanie kodu poprzez użycie funkcji exit();

if($zmienna!="Ala")
{
   exit();
};

Instrukcja switch

Instrukcja ta upraszcza wielokrotne użycie instrukcji if.
Skóadnia tej instrukcji wygląda następująco:

switch ($zmienna)
{
   case "wartość porównywana 1": {polecenia, gdy spełniony warunek równści; break;}
   case "wartość porównywana 2": {polecenia, gdy spełniony warunek równoóci; break;}
   default: {polecenia, gdy nie został spełniony żaden z powyższych warunków;break;}
};

Instrukcja break; powoduje przerwanie dziaóania instrukcji, gdy zostanie speóniony warunek.

ówiczenie 3_2 - Uóycie instrukcji switch

  1. Naleóy umieścić na swoim koncie WWW plik 03_02.php i 03_02a.php (do pobrania tutaj 03_02.zip).
  2. W pliku 03_02a.php naleóy doóoóyó obsługą kilku kolejnych kolorów (informacjó o tym, jakie kolory zostały doóóczone proszę umieócić na widocznym miejscu w formularzu).

Zadanie 2 - Test z wybranego przedmiotu z podsumowaniem poprawnoóci odpowiedzi

  1. Należy wykorzystać test przygotowany w poprzednim zadaniu.
  2. Należy odebrać zmienne z formularza po uprzednim sprawdzeniu, czy zmienna została przesłana. W przeciwnym wypadku należy tej zmiennej przypisać wartośó pustego znaku.
  3. Skrypt powinien sprawdzió poprawność udzielonych odpowiedzi i wyówietlić sumó uzyskanych punktów.
  4. Skrypt powinien wystawić ocenę wedóug zaóoóonej skali.
  5. Skrypt powinien przy kaódym pytaniu udzielać informacji, czy odpowiedó na to pytanie zostaóa udzielona prawidłowo. W wypadku braku prawidóowej odpowiedzi skrypt powinien poinformowaó, jaka była oczekiwana odpowiedź.

Do zapamiótania

  1. Funkcja empty() sprawdza, czy podana zmienna jako parametr tej funkcji ma wartość pustą.
  2. Funkcja isset() sprawdza, czy istnieje zmienna podana jako parametr tej funkcji.

 


Powrót do spisu tematów