PHP: warunki, pętle, switch, break, continue Technologie internetowe PHP: warunki, pętle, switch, break, continue
Instrukcje warunkowe – stosuje się gdy chcemy by fragment kodu został wykonany po spełnieniu warunku if (warunek) instrukcje; Instrukcja1; else Instrukcja2; if (warunek1) { instrukcje1; } elseif (warunek2) instrukcja2; (…) instrukcja3; Przydatne uzupełnienie instrukcji warunkowej if stanowi funkcja isset(), sprawdzająca czy zmienna została ustawiona: if (isset ($submit)) // operacje po naciśnięciu przycisku submit; else // ponowne wyświetlenie formularza;
Pętle – stosuje się aby fragment kodu wykonać wiele razy Pętla while do while (warunek) { Instrukcje; } Przed każdą iteracją bloku kodu wewnątrz instrukcji while, sprawdzany jest warunek. Jeżeli wyrażenie warunkowe jest prawdziwe - blok kodu umieszczony wewnątrz instrukcji zostanie wykonany. Jeśli natomiast wyrażenie przyjmie wartość false, pętla zakończy się, a wykonanie skryptu zostanie kontynuowane od pierwszej instrukcji umieszczonej po pętli while. Sekwencja kroków pętli while: Sprawdzenie wyrażenia warunkowego Jeśli wyrażenie = false krok 5 Wykonanie bloku instrukcji Krok 1 Zakończenie pętli
Pętla do … while do { instrukcje; } while (warunek) Wyrażenie warunkowe sprawdzane jest na końcu pętli – po wykonaniu bloku instrukcji. Sekwencja kroków pętli do … while: 1. Wykonanie bloku instrukcji 2. Sprawdzenie wyrażenia warunkowego 3. Jeżeli warunek prawdziwy krok 1 4. Zakończenie pętli, wykonanie kolejnej instrukcji programu.
Pętla FOR for (wyr_startowe; wyr_warunkowe; wyr_iteracyjne) { instrukcje } wyr_startowe – jest wykonane raz gdy program dotrze do instrukcji for wyr_warunkowe – sprawdzane przed każdą iteracją pętli, jeśli warunek = false – pętla zostaje przerwana wyr_iteracyjne – jest wykonywane po każdej iteracji pętli, służy do modyfikacji zmiennych zdefiniowanych w wyrażeniu warunkowym Uwaga: wyrażenia mogą być dowolnie skomplikowane, można użyć kilku instrukcji startowych, warunków i wyr. iteracyjnych, oddzielając je przecinkami for ($x = 0, $y = -5; $x < 10 && $y < $z; $x++, $y+=3)
Sekwencja kroków pętli for: 1. Wykonanie wyrażenia startowego 2 Sekwencja kroków pętli for: 1. Wykonanie wyrażenia startowego 2. Sprawdzenie wyrażenia warunkowego 3. Jeżeli warunek jest fałszywy krok 7 4. Wykonanie bloku instrukcji pętli 5. Wykonanie wyrażenia iteracyjnego 6. krok 2 7. Zakończenie instrukcji for; wykonanie kolejnej instrukcji programu
Instrukcje break i continue Wykonanie pętli można w każdym momencie zakończyć. Służy do tego instrukcja break: $a=0; while($a<10) { $a++; echo $a; if($a==3) break; } Ta pętla nie wykona się 10 razy - gdy $a osiągnie wartość 3, wykonanie pętli zostanie przerwane.
Można też przejść do następnego powtórzenia pomijając pozostałe instrukcje ciała pętli - służy do tego instrukcja continue: $a=0; while($a<10) { $a++; if($a==3) continue; echo("aaa"); /* ta instrukcja wykona się tylko gdy $a nie jest równe 3 */ }
Instrukcja switch Czasem zmienna może mieć jedną z kilku wartości, w zależności od których należy podjąć odpowiednią akcję. Można to zrobić stosując instrukcję if: if($a==1) { echo("a jest równe 1"); } if($a==3) echo("a jest równe 3"); if($a==11) echo("a jest równe 11");
Wygodniejsze jest zastosowanie instrukcji switch: switch($a) { case 1: echo("a jest równe 1"); break; case 3: echo("a jest równe 3"); case 11: echo("a jest równe 11"); }
Wybrane funkcje matematyczne Funkcja Znaczenie abs (x) zwraca wartość bezwzględną x ceil (x) zwraca wartość x zaokrągloną w górę do najbliższej liczby całkowitej floor (x) zwraca wartość x zaokrągloną w dół do najbliższej liczby całkowitej max (x,y,...) zwraca największą wartość listy wartości min (x,y,...) zwraca najmniejszą wartość listy wartości pow (x,n) zwraca liczbę x podniesioną do potęgi n rand(min, max) generuje wartość losową z zakresu liczb sqrt (x) zwraca pierwiastek kwadratowy
Wybrane funkcje matematyczne Funkcja Znaczenie decbin(x) konwertuje liczbę dziesiętną x do postaci binarnej bindec(x) konwertuje liczbę binarną x do postaci dziesiętnej dechex(x) konwertuje liczbę dziesiętną x do postaci szesnastkowej. hexdec(x) konwertuje liczbę szesnastkową x do postaci dziesiętnej decoct(x) konwertuje liczbę dziesiętną x do postaci ósemkowej octdec(x) konwertuje liczbę ósemkową x do postaci dziesiętnej
Wybrane funkcje obsługi łańcuchów znaków Funkcja Znaczenie strlen(s) Zwraca długość łańcucha znaków strtoupper(s) Zamienia znaki łańcucha na duże litery strtolower(s) Zamienia znaki łańcucha na małe chop(s) rtrim(s) zwraca wartość s usuwając białe znaki z prawej strony. ltrim(s) zwraca wartość s usuwając białe znaki z lewej strony trim(s) zwraca wartość s usuwając białe znaki z obu stron str_repeat(s, n) powiela tekst s, n razy. strrev(s) odwraca tekst
Operator kontroli błędów: znak małpy (@) Jeśli znak ten zostanie postawiony przed dowolnym wyrażeniem w PHP, jakiekolwiek powiadomienia o błędach wygenerowane przez to wyrażenie zostaną pominięte (nie będą wyświetlone). Jeśli mechanizm track_errors został włączony, jakiekolwiek powiadomienie o błędzie zostanie zapisane do zmiennej globalnej $php_errormsg. Zawartość tej zmiennej jest nadpisywana przy każdym błędzie, więc po wystąpieniu kolejnego błędu w skrypcie, informacja o poprzednim błędzie jest tracona. Operator @ działa tylko na wyrażeniach. Jeśli da się pobrać wartość czegoś, można postawić operator @ przed tym czymś. Można postawić @ przed zmiennymi, wywołaniami funkcji, instrukcjami include(), stałymi, itp. Nie można stawiać @ przed definicjami funkcji bądź klasy, lub strukturami warunkowymi, takimi jak if lub foreach, itd. $my_file = @file ('nieistniejący_plik') or die ("Błąd przy otwieraniu pliku: treść błędu: '$php_errormsg'");
Składnia alternatywna Dla: if, while, for, foreach i switch. Podstawowa forma składni alternatywnej polega na zamianie nawiasu otwierającego na dwukropek (:), a nawiasu zamykającego na odpowiednie słowo: endif;, endwhile;, endfor;, endforeach; lub endswitch;. <?php if ($a == 5): ?> A jest równe 5 <?php endif; ?>
formularze, poczta,
Obsługa formularzy Należy najpierw odpowiednio przygotować formularz. W znaczniku FORM w parametrze ACTION należy podać adres dokumentu PHP mającego obsłużyć ten formularz. Parametr METHOD może mieć wartość POST lub GET - obie metody są obsługiwane przez PHP. Jednak należy pamiętać, że formularze wysyłane przez GET mają ograniczoną długość. Należy pamiętać o zdefiniowaniu nazw wszystkich pól formularza z których skrypt ma skorzystać. Przykład: <FORM ACTION="skrypt.php" METHOD="post"> <INPUT TYPE="text" NAME="tekst"> <input type="submit" name="x" value="Wyslij"> </FORM>
Jeśli zmienne są globalne ... UWAGA! w php.ini: register_globals = On lub Off w skrypcie od razu będą dostępne zmienne o nazwach takich jak nazwy (name) pól formularza, zawierające ich wartości: Bezpieczniej jest stosować tablicę _POST, uniezależniając się od sytuacji, czy zmienne są globalne czy nie <?php echo($_POST['tekst']); ?> W przypadku pola tekstowego wartością zmiennej będzie wpisany przez użytkownika tekst. Jeżeli pole jest typu CHECKBOX wartością będzie "on" jeżeli pole jest zaznaczone, lub zmienna będzie pusta jeżeli pole nie zostało zaznaczone. Jeżeli w polu typu CHECKBOX podamy parametr VALUE, będzie on użyty zamiast "on". Tak samo wygląda obsługa pola typu RADIO. Wartością pola SELECT będzie wartość parametru VALUE zdefiniowanego w znaczniku OPTION. Przykład: forma.html
Formularze HTML najczęściej zawierają: Metodę Akcję Pola wejściowe Pierwszy wiersz formularza w kodzie HTML może wyglądać następująco: <FORM ACTION=licz.php METHOD=POST> Post - zmienne przekazywane są z formularza z wykorzystaniem superglobalnej tablicy $_POST Get – tablica $_GET. Zapytanie jest dołączone do lokalizatora (adresu) URL Post vs. Get Metoda Post została opracowana do tworzenia nowych zasobów, np. przekazanie formularza zamówienia powoduje wstawienie nowego rekordu do tabeli bazy danych – pojawia się trwały efekt. Metoda Get jest używana gdy żądanie nie powoduje trwałych efektów ubocznych – np. operacje wyszukiwania. Należy jednak uważać: przy stosowaniu get mogą powstać długie adresy, często przekraczające limity przeglądarek czy serwerów.
Metodę POST stosuje się gdy: (Wynikiem żądania są trwałe zmiany || Dane z formularza mogą powodować powstanie długiego adresu URL przy użyciu get || Wysyłane dane nie są zapisane za pomocą siedmiobitowego ASCII.) Metodę GET stosuje się gdy: (Celem żądania jest odszukanie zasobów && W wyniku wykonania żądania nie wystąpią żadne trwałe efekty uboczne && Dane z pól <form> mają w sumie mniej niż 1024 znaki) Get – bezpieczna; Post – niebezpieczna, dokonuje trwałych modyfikacji w serwerze <FORM ACTION="licz.php" METHOD="POST"> Akcja określa skrypt do którego zostaną przesłane dane i który zostanie uruchomiony
checkbox – pole wyboru (jeden z dwu); <P>Liczba1: <INPUT TYPE="text" NAME="val2" SIZE=10></p> <INPUT TYPE="radio" NAME="calc" VALUE="add"> <INPUT TYPE=submit NAME=Calculate VALUE=Wykonaj> </FORM> Typy pól formularzy HTML: input – różne typy text – jedna linia tekstu; hidden – pole ukryte (umożliwia przesłanie dodatkowych, niewidocznych dla użytkownika danych); password - dla haseł file – do przesyłania plików (upload) submit – przycisk służący do wysyłania danych formularza textarea – wiele wierszy tekstu checkbox – pole wyboru (jeden z dwu); radio – pole wyboru (jeden z wielu); select – menu rozwijane lub lista;
Wysyłanie poczty e-mail Dla systemu Windows w pliku php.ini należy skonfigurować: [mail function] SMTP = ewa.prz.rzeszow.pl //nazwa serwera poczty wychodz. sendmail_from = ty@prz.rzeszow.pl //własny adres Można zastosować funkcję w skrypcie: ini_set('sendmail_from','ty@prz.rzeszow.pl'); Do wysyłania listu elektronicznego za pośrednictwem protokołu SMTP (standardowy protokół wykorzystywany do przesyłania poczty elektronicznej) w najprostszym przypadku wystarczy funkcja mail() : mail (odbiorca, temat, treść); Można również uwzględnić adres nadawcy, wtedy funkcja mail() będzie miała postać: mail (odbiorca, temat, treść, od); mail ("jan@kowalski.com"; "to jest temat wiadomości", "to jest treść bardzo krótkiej wiadomości", "od:franek@nowak.com")