PHP w-3 Sterowanie w PHP 1
INSTRUKCE STERUJĄCE W PHP podobnie jak w innych językach programowania wykorzystuje się instrukcje sterujące: 1. Instrukcja warunkowa If-else 2. Instrukcja wyboru Switch 3. Pętla for 4. Pętla whle i do-while 2
1. Instrukcja warunkowa If-else if (warunek) blok instrukcji; blok instrukcji; ; else blok instrukcji; ; <?php echo "<br />"; $a = 12; $b = 2; echo " a = $a, b = $b"; if ($b>$a) $max=$b; printf("<br /> Maksymalna jest b: %d ", $max); else $max=$a; printf("<br />Maksymalna jest a: %d ", $max);?> 3
2. Instrukcja warunkowa else-if if (warunek) blok instrukcji; blok instrukcji; ; else if (warunek) blok instrukcji; ; else if (warunek).... <?php $liczba1 = 10; $liczba2 = 10; echo "<br />OTO LICZBY: $liczba1, $liczba2 "; if ($liczba1<$liczba2) $roznica1 = $liczba1 - $liczba2; printf("roznica jest ujemna: %.2f", $roznica1); else if ($liczba1>$liczba2) $roznica2 = $liczba1 - $liczba2; printf("roznica jest dodatnia: %.2f", $roznica2); else if($liczba1 = $liczba2) echo "Liczby sa sobie rowne<br />";?> 4
3. Instrukcja warunkowa elseif $a = 3; $b = -1; $c = 4; print(" <br />a = $a, b = $b, c = $c <br /> "); $delta = ($b*$b)-(4*$a*$c); if ($delta<0) echo "<br />Równanie nie ma pierwiastków"; // jeden blok zbędne nawiasy elseif ($delta==0) // prawdziwy jeśli argumenty są równe $x1= -$b/(2*$a); printf("<br />Równanie ma tylko jeden pierwiastek x1 = x2: %.2f",$x1); elseif ($delta>0) $x1 = (-$b-sqrt($delta))/(2*$a); $x2 = (-$b+sqrt($delta))/(2*$a); printf("<br />Równanie ma dwa pierwiastki x1 = %.2f, x2 = %.2f",$x1,$x2); echo '<br /><br /><a href="sterowanie-2.php"> Powrót do formularza</a>'; 5
Przykład: Przypisywanie wartości zmiennym dynamicznie <p> LICZY PIERWIASTKI RÓWNANIA KWADRATOWEGO TYPU: ax2 + bx + c </p> <form action="pierwiastki.php" method="post"> <p> Podaj współczynnik a: <input type="text" name="aa" /> <p> Podaj współczynnik b: <input type="text" name="bb" /> <p> Podaj współczynnik c: <input type="text" name="cc" /> <input type="submit" name="akcepruj" value="wyslij" /> </form> 6
Plik: pierwiasteki.php $a = $_POST['aa']; // przejęcie zmiennych z formularza $b = $_POST['bb']; $c = $_POST['cc']; print(" <br />a = $a, b = $b, c = $c <br /> "); $delta = ($b*$b)-(4*$a*$c); if ($delta<0) echo "<br />Równanie nie ma pierwiastków"; // jeden blok zbędne nawiasy elseif ($delta==0) // prawdziwy jeśli argumenty są równe $x1= -$b/(2*$a); printf("<br />Równanie ma tylko jeden pierwiastek x1 = x2: %.2f",$x1); elseif ($delta>0) $x1 = (-$b-sqrt($delta))/(2*$a); $x2 = (-$b+sqrt($delta))/(2*$a); printf("<br />Równanie ma dwa pierwiastki x1 = %.2f, x2 = %.2f",$x1,$x2); echo '<br /><br /><a href="sterowanie-2.php"> Powrót do formularza</a>'; 7
4. Instrukcja wyboru SWITCH Instrukcja switch wykorzystuje się do rozgałęzień. Wyrażenie może być zmienną, liczbą, ciągiem. switch (wyrażenie) case wartość_1: Instrukcja_11 instrukcja_12......; break; case wartość_2: Instrukcja_21 instrukcja_22...; break;.. case wartość_n1: Instrukcja_n2 instrukcja_nm..; break; default: instrukcja; Instrukcja oblicza wartość wyrażenia i sprawdza, czy wynik jest równy kolejnym wartościom podanym w klauzuli case. Gdy zostanie znaleziona odpowiednia wartość, wykonane zostaną kolejne instrukcje aż do napotkania instrukcji break lub zakończenia instrukcji switch. Default będzie wykonana dla wszystkich wartości wyrażenia, dla których nie ma odpowiedników 8
4.1. Przykład wykorzystania Instrukcji SWITCH do drukowania miesięcy w języku polskim $dzien = date ('d'); // można tak: $data_1= date('d.m.y'), $miesiac = date('m'); $rok = date ('Y'); switch ($miesiac) case "01": $miesiac = "styczeń"; break; case "02": $miesiac = "luty"; break; case "03": $miesiac = "marzec"; break; case "04": $miesiac = "kwiecień"; break; case "05": $miesiac = "maj"; break; case "06": $miesiac = "czerwiec"; break; case "07": $miesiac = "lipiec"; break; case "08": $miesiac = "sierpień"; break; case "09": $miesiac = "wszesień"; break; case "10": $miesiac = "październik"; break; case "11": $miesiac = "listopad"; break; case "12": $miesiac = "grudzień"; break; default: $miesiac = 'Pomyliłeś wybór';break; print " A oto dzisiejsza data: $dzien $miesiac $rok"; Bez instrukcji SWITCH 9
4.2. Przykład wykorzystania Instrukcji SWITCH do wydrukowania listy przedmiotów prowadzonych przez wykładowcę Plik : przedmioty.php <form action= " przedmioty.php" method="post"> <p> Wprowadz nazwisko wykładowcy <input type="text" name="wybor" /> 10
Dalsza część kodu pliku przedmioty.php $nazwisko = $_POST['wybor']; $przedmioty = $_POST['wybor']; // przejęcie zmiennej z formularza echo $nazwisko; switch ($przedmioty) case "Wszelak": $przedmioty="sieci komputerowe<br />Aplikacje WWW</li>.<br />"; break; case "Salwicki": $przedmioty="programowanie obiekt.<br />Matematyka dyskretna.<br />"; break; case "Śliwka": $przedmioty="programowanie JAVA,<br />Programowanie C++.<br />"; break; default: $przedmioty="źle wpisałeś prowadzącego<br />"; break; echo $przedmioty; Zmienna pozyskuje wartość z pola formularza, przekazywanie odbywa się w tym samym pliku. 11
4. Pętla for for (wyrażenie_poczatkowe; warunek_zakończenia; wyrażenie_końcowe) blok instrukcji; Ze względu na to, że nie ma deklarowania zmiennych, zmienna iteracyjna (i) musi być poprzedzona znakiem $, inaczej nie zostanie rozpoznana <?php $tablica[0] = 'Kaśka'; $tablica[1] = 'Dorota'; $tablica[2] = 'Iza'; $tablica[3] = 'Robert'; echo "Elementy tablicy: "; for ($i = 0; $i < 4; $i++) // wyświetlenie kolejnych indeksów echo" ". $tablica[$i];?> 12
4. Pętla while i do while Pętla while: Pętla do while: while (warunek) blok instrukcji do blok instrukcji while (warunek) Dopóki jest spełniony warunek, wykonaj instrukcję Wykonaj instrukcję, dopóki jest spełniony warunek Różnica tkwi w miejscu sprawdzania warunku, pierwsza sprawdza warunek przed wejściem, druga po wykonaniu bloku instrukcji w pętli. 13
4. Przykład wykorzystania pętli while Nazwisko zostało przypisane na stałe, ale nic nie stoi na przeszkodzie aby zaprogramować pole, które przymnie również kolejną zmienną (nazwisko) 14
Kod pliku wynikowego $liczba_1 = $_POST['liczba']; // przejęcie zmiennych z formularza $index = 0; while($index<$liczba_1) $index = $index+1; echo $index." Wszelak<br />"; echo '<br /><a href="sterowanie-4.php"> Powrót do formularza</a>'; 15
Zadanie <?php define ("stawka_1", 0.18); // pierwsza stawka podatkowa na 2010 define ("pierwszy_prog", 85528); // I -szy próg podatkowy define ("stawka_2", 0.32); // druga stawka podatkowa define ("kw_wolna", 556.02); // kwota wolna od podatku define ("L_pomocnicza", 14839.02); // podatek z kwoty 85528 $bazowa=100000; // przykładowa wartość przypisana zmiennej - statyczna if ($bazowa<0) print("liczba jest ujemna, nie można określić podatku na 2010 rok"); elseif(($bazowa>=0)&&($bazowa<=3089)) // zak. do kwoty zwolnionej print("liczba jest mniejsza niż kwota wolna od podatku (3089 zł)"); elseif(($bazowa>3089)&&($bazowa<=pierwszy_prog)) // zak. I-go progu podatkowego $podatek_1 = ($bazowa*stawka_1) - kw_wolna; printf('podatek za 2010 z I-go progu: %.2f',$podatek_1); elseif($bazowa>pierwszy_prog) // zak. drugiego progu podatkowego $podatek_2 = L_pomocnicza+($bazowa-pierwszy_prog)*stawka_2;?> printf("podatek za 2010 z II-go progu: %.2f",$podatek_2); 16
Zmienna dynamiczna Przypisanie zmiennej ($bazowa) formularzowi $bazowa = $_POST[ kwota_bazowa ]; kwota_bazowa to nazwa pola formularza, które przyjmie dane z zewnątrz <p> LICZY PODATEK ZA 2010 ROK </p> <form action= sterowanie-1.php" method="post"> <p> Podaj podstawę opodatkowania:<input type="text" name= kwota_bazowa" size= 6" /></p> <input type="submit" name="akcepruj" value="wyslij" /> </form> 17