Programowanie PHP Materiały: 1. PHP5, Apache i MySQL. Od podstaw, Helion 2005 2. PHP5. Tworzenie stron WWW. Ćwiczenia praktyczne, Helion 2004 3. PHP w mgnieniu oka, Helion 2005 4. http://www.leon.w-wa.pl/texts/kurs/index.php 5. http://php.webhelp.pl/kursy/php/index.php?roz=php 6. http://kursy.skryptoteka.pl/kurs.php?kurs=php&strona=0 Temat 1. Przygotowanie środowiska, prezentacja możliwości PHP Ćwiczenie 1 instalacja środowiska wytwórczego 1. Proszę zainstalować Easy PHP - http://www.easyphp.org/ - jest to zestaw aplikacji: - Baza danych MySQL - Serwer WWW Apacze - Parser php 2. Proszę zainstalować program HTML-Kit - http://www.chami.com/html-kit/download/ - umożliwiający tworzenie stron internetowych. 3. Proszę sprawdzić możliwości aplikacji. Ćwiczenie 2 utworzenie prostych stron php 1. Proszę utworzyć przykładową stronę php <html> <head><title>pierwsza strona w PHP</title></head> <body> <b> php print "Strona w PHP działa!"; </b> </body> </html> 2. Otwórz stronę za pomocą przeglądarki czy wyświetla się poprawnie? 3. Umieść stronę w katalogu www programu EasyPhp (Apacha). 4. Wpisując w przeglądarkę http://localhostścieżkadostrony sprawdź działanie strony 5. Analogicznie utwórz i sprawdź działanie strony
<html> <head> <title>moja druga strona w PHP</title> </head> <body> Bieżąca data: print (Date("l F d, Y")); </body> </html> 6. Zapisz wyświetloną stronę (jako html), sprawdź czy kod jest identyczny z poprzednim. Ćwiczenie 3 prezentacja możliwości PHP 1. Dodaj stronę powodującą wyświetlenie formularza <form > Twoje imie: <input type="text" name="osoba"> <br/> <input type="submit" value="powitanie"> </form> 2. Sprawdź, co następuje po kliknięciu na przycisk Powitanie. 3. Przekształć pierwszą linie na <form method="post" action="witaj.php"> Sprawdź, co następuje po kiknięciu na przycisk Powitanie. 4. Dodaj kod w odpowiednim skrypcie php php print "Witaj, "; print $_POST['osoba']; print "!"; 5. Sprawdź działanie strony. 6. Spróbuj zmodyfikować stronę i skrypt tak, aby możliwe było wyświetlanie imienia i nazwiska podawanych w 2 różnych polach tekstowych.
Temat 2. Praca z tekstem, liczbami i zmiennymi Ćwiczenie 1 literały i zmienne 1. Sprawdź działanie poniższych literałów dla cudzysłowu podwójnego odpowiednio wstawiając je w kod. Literał Znaczenie \n Nowa linia \r Powrót karetki \t Tabulator \\ \ \$ $ \" " 2. Wykorzystując literały utwórz stronę wyświetlającą Twoje dane: imię, nazwisko, adres, zainteresowania w kolejnych wierszach z odpowiednim odstępem pomiędzy etykietami a danymi. W cudzysłowie pojedynczym umieść wytłuszczonym drukiem (<b>tekst</b>) swoje motto życiowe. 3. Spowoduj niewyświetlenie tekstu motta poprzez użycie komentarza - // (dla jednej linii) lub /* tekst */ (blokowy). 4. Dodaj deklarację zmiennej $osoba = Adam ; Dodaj instrukcję wyświetlenia tekstu Mam na imię z identyfikatorem zmiennej w nawiasie zarówno pojedynczym jak i podwójnym. Jaka jest różnica? 5. Dodaj do wcześniejszego tekstu tekst a nazwisko Kostrzycki przy użyciu operatora łączenia napisów. Ćwiczenie 2 wyświetlanie dokumentów 1. Utwórz dokument poprzez instrukcję drukowania print <<<blokdokumentu <html> <head><title>menu</title></head> <body bgcolor="#fffed9"> <h1>śniadanie</h1> <ul> <li> Jajecznica na boczku <li> Sałatka warzywna <li> Zupa mleczna </ul> </body> </html> blokdokumentu;
2. Zmodyfikuj dokument, aby wyświetlał listę egzaminów, które będziesz mieć w bieżącym semestrze. Ćwiczenie 3 manipulacja na operatorach Operatory arytmetyczne Przykład Nazwa Wynik $a + $b Dodawanie Suma $a i $b. $a - $b Odejmowanie Różnica $a i $b. $a * $b Mnożenie Iloczyn $a i $b. $a / $b Dzielenie Iloraz $a i $b. $a % $b Modulo Reszta z dzielenia $a przez $b. Operator przypisania - Podstawowym operatorem przypisania jest symbol '='. - Wyrażenie $b = 5 oznacza, że zmienna $b przyjmuje wartość równą 5. - Zmiennej można przypisać także wartość innej zmiennej: $b = 5; $a = $b; - zmienna $a przyjmie wartość 5. - Zmiennym można przypisywać nie tylko konkretne wartości, ale też wartości innych zmiennych, np.: $nazwa = $inna_nazwa = $trzecia_nazwa = 5; - Operator przypisania można łączyć z operatorami arytmetycznymi i operatorem łączenia ciągów: Przykład Wynik $a += 2 Do zmiennej $a dodane zostanie 2 $a -= 2 Od zmiennej $a odjęte zostanie 2 $a *= 2 Zmienna $a zostanie pomnożona przez 2 $a /= 2 Zmienna $a dodane podzielona przez 2 $a %= 2 Zmienna $a przyjmie wartość reszty z dzielenia $a przez 2 $a.= " dalszy ciąg" Do zmiennej $a na końcu dodany zostanie ciąg " dalszy ciąg"
Operatory porównania - Operatory porównania są niezbędne do korzystania z instrukcji warunkowych - Jeśli wyrażenie jest spełnione zwracana jest wartość TRUE (prawda - 1) lub FALSE (fałsz - 0). Przykład Nazwa Wynik $a == $b Równy Prawda jeśli $a jest równe $b. $a === $b Identyczny Prawda jeśli $a jest równe $b i są tego samego typu. (tylko PHP4) $a!= $b Nie równe Prawda jeśli $a nie jest równe $b. $a!== $b Nie identyczny Prawda jeśli $a nie jest równe $b lub nie są tego samego typu. (tylko PHP4) $a < $b Mniejsze Prawda jeśli $a jest mniejsze niż $b. $a > $b Większe Prawda jeśli $a jest większe niż $b. $a <= $b Mniejsze lub Prawda jeśli $a jest mniejsze lub równe $b. równe $a >= $b Większe lub równe Prawda jeśli $a jest większe lub równe $b. Operator kontroli błędów - Operator kontroli błędów ('@') powoduje, że wyrażenie, przed którym postawiono ten znak nie spowoduje wyświetlenia się jakiegokolwiek błędu lub ostrzeżenia. /* Jeden z najczęstszych błędów SQL (za dużo o jeden apostrof) */ $res = @mysql_query ("select nazwa, kod from 'lista") or die ("Zapytanie się nie powiodło: błąd to ''"); Operator wywołania - Operator ten służy do uruchamiania zewnętrznych programów lub poleceń powłoki. Wystarczy wpisać polecenie pomiędzy znaki odwróconego apostrofu ('`') aby zostało ono wykonane, np. $wynik = `ls -l /home/`; echo $wynik; Po uruchomieniu tego skryptu na komputerze o systemie operacyjnym Linux wyświetlona zostanie zawartość katalogu /home na serwerze.
Operatory inkrementacji i dekrementacji - Służą one do zmniejszenia lub zwiększenia wartości danej zmiennej o 1. - Każdy operator można stosować na 2 sposoby: preinkrementacja/predekrementacja - najpierw wartość zmiennej zostanie zmieniona, a później zwrócona, lub postinkrementacji/postdekrementacji - najpierw zostanie zwrócona wartość zmiennej, a następnie wartość zmiennej zostanie zmieniona. Przykład Nazwa Wynik ++$a Preinkrementacja Zwiększa $a o jeden, a następnie zwraca $a. $a++ Postinkrementacja Zwraca $a, a następnie zwiększa $a o jeden. --$a Predekrementacja Zmniejsza $a o jeden, po czym zwraca $a. $a-- Postdekrementacja Zwraca $a, po czym zmniejsza $a o jeden. Przykład: echo "<h3>postinkrementacja</h3>"; $a = 5; echo "Powinno być 5: ". $a++. "<br>\n"; echo "Powinno być 6: ". $a. "<br>\n"; echo "<h3>preinkrementacja</h3>"; $a = 5; echo "Powinno być 6: ". ++$a. "<br>\n"; echo "Powinno być 6: ". $a. "<br>\n"; echo "<h3>postdekrementacja</h3>"; $a = 5; echo "Powinno być 5: ". $a--. "<br>\n"; echo "Powinno być 4: ". $a. "<br>\n"; echo "<h3>predekrementacja</h3>;"; $a = 5; echo "Powinno być 4: ". --$a. "<br>\n"; echo "Powinno być 4: ". $a. "<br>;\n"; Operatory logiczne - Operatory logiczne służą do budowania bardziej skomplikowanych instrukcji warunkowych - do łączenia kilku warunków w jednej instrukcji. Przykład Nazwa Wynik $a && $b AND Prawda, jeśli $a i $b są prawdą $a $b OR Prawda, jeśli $a lub $b są prawdą! $a NOT Prawda, jeśli $a nie jest prawdą
Operator ciągu - Operator ciągu ('.' - kropka) służy do łączenia kilku ciągów w jedną całość. $zmienna1 = "Wartość zmiennej \"zmienna2\" to"; $zmienna2 = 5; echo $zmienna1." ".$zmienna2; // Powinno się wyświetlić: // "Wartość zmiennej "zmienna2" to 5" 1. Proszę sprawdzić działanie kodu poniżej $wynik = `cmd`; echo $wynik; 2. Wykorzystując polecenie dir wyświetl informacje o bieżącym katalogu. 3. Proszę sprawdzić działanie kodu dla operatorów inkrementacji i dekrementacji. 4. Proszę napisać kod, który będzie wyliczał przykładowa średnia ocen i ją wypisywał dla listy kilku przedmiotów. 5. Napisz skrypt powodujący wyświetlenie reszt dzielenia liczby 30 przez kolejne liczby od 10 do 15. 6. Dodaj kod powodujący wyliczenie i wyświetlenie delty dla równania y= 2x 2 + 3x + 5 Zgodnie z równaniem delta = b 2 4ac. Ćwiczenie 4 manipulacja na napisach FUNKCJA OPIS PRZYKŁAD strlen Oblicza długość napisu $NIP_długość = strlen($nip); Trim Zwraca napis bez spacji z przodu i $NIP = trim($_post['nip']); końca napisu strcasecmp Pomija wielkość znaków napisu strcasecmp($_post['email'] printf Umożliwia wyświetlanie przeformatowanego tekstu $cena = 4; $podatek = 0.075 printf(koszt dania Zł%.2f', $price * (1 + $tax)); - Jeśli jest użyty w formatowaniu napisu za pomocą instrukcji powyżej powoduje wyrównanie tekstu do prawej strtolower Konwertuje napisy na małe litery print strtolower('audi, VOLVO, MERceDES'); strtoupper Konwertuje napisy na duże litery substr Umożliwia pobranie fragmentu napisu print substr($_post['login'], 0, 10); str_replace ucwords Umożliwia zamianę fragmentu napisu Umożliwia przeformatowanie tekstu do pisania pierwszych liter $nowyemail = 'wzr.pl'; print str_replace('univ.gda.pl',$nowyemail, 'kowalski@univ.gda.pl ); print ucwords(strtolower('michał KUCIAPSKI'));
strstr strpos ereg eregi explode split napisów z dużej a pozostałych z małej Sprawdza, czy jeden ciąg znajduje się wewnątrz drugiego i zwraca ciąg od momentu wystąpienia szukanego ciągu. Zwraca pozycję występowania jednego ciągu w drugim Sprawdzania, czy ciąg tekstowy pasuje do wyrażenia regularnego Ignoruje wielkość znaków. Zwraca tablicę napisów podzieloną względem podanego jako pierwszy znak parametru. Rozbija tekst za pomocą wyrażeń regularnych $email = "prezydent@polska.pl"; if(strstr($email, "polska")!==false) echo "Email ma w sobie słowo 'polska'"; if(ereg(".*", $ciag)) echo "Znalazłem!"; $data = "1992/11/19"; $tablica = explode("/", $data); $tekst = "19/11/1982 01:43:12.10"; $tablica = split("[ /:.]", $tekst); 1. Utwórz stronę walidującą, że wpisany NIP składa się z jedenastu znaków i wypisujący odpowiedni tekst, wiedząc, że instrukcja sprawdzająca ma postać. Skorzystaj z funkcji strlen if (wyrażenie_logiczne) { instrukcje 2. Zmodyfikuj kod powyżej dodając funkcję trim. 3. Zmodyfikuj stronę dodając pole tekstowe do wpisywania e-mailu. Dodaj kod do skryptu sprawdzający jego poprawność czy występuje @ - funkcja strstr. 4. Dodaj kod do skryptu powodujący wyświetlenie nazwy loginu i adresu serwera, np.: Login: alin Serwer: test.pl Funkcje: strpos, substr 5. Dodaj sprawdzanie czy występuje tekst przed małpą i po niej funkcja explode. Zmodyfikuj kod tak, aby wyniki wyeliminować funkcje użyte w punkcie wcześniejszym (strpos, substr). 6. Dodaj na wstępie strony pole dane osobowe. Zmodyfikuj kod skryptu php tak, aby dane były wyświetlane zgodnie z konwencją imion i nazwisk użyj funkcji ucwords.
Ćwiczenie 5 zmienne - Nazwy zmiennych zawsze zaczynają się od znaku $. - Nie jest konieczne deklarowanie zmiennych, tak jak ma to miejsce w wielu innych językach. Aby stworzyć zmienną wystarczy nadać jej jakąś wartość, np: $a=7; $b="jakiś tekst"; $c=2.654; $d=0.0 - PHP obecnie obsługuje następujące typy zmiennych: integer - liczba całkowita double - liczba rzeczywista string - tekst array - tablica object - złożone zmienne definiowane przez użytkownika pdfdoc (Tylko przy włączonej obsłudze dokumentów PDF) pdfinfo (Tylko przy włączonej obsłudze dokumentów PDF) - Typ zmiennej jest określany automatycznie na podstawie przypisywanej wartości. I tak w powyższym przykładzie $a ma typ integer, $b ma typ string a $c i $d mają typ double (0 jest co prawda liczbą całkowitą, ale każda liczba zawierająca kropkę jest traktowana jako rzeczywista). $a=3; $b="jakaś wartość"; $c="$a, $b"; - Zmienna $c będzie miała wartość "3, Jakaś wartość". Stałe - Mogą być definiowane przez użytkownika za pomocą funkcji define(), która przyjmuje 2 parametry: nazwę stałej i wartość do niej przypisaną define("stala", "Hello world."); echo STALA; // Wyświetla "Hello world."
Rzutowanie - Odbywa się przez podanie nowego typu w nawiasie przed zmienną lub wartością, której typ chcemy zmienić. Na przykład: $liczba_calkowita = 10; $liczba_rzeczywista = (real) $liczba_calkowita; Dozwolone typy rzutowań: (int), (integer) - rzutuj do typu całkowitego (real), (double), (float) - rzutuj do typu rzeczywistego (string) - rzutuj do ciągu (array) - rzutuj do tablicy (object) - rzutuj do obiektu Ustawienie typu - Sposobem, trwałym, na ustawienie typu zmiennej jest użycie funkcji settype. Funkcja ta pobiera 2 argumenty. Pierwszym jest nazwa zmiennej do ustalenia typu, a drugim ciąg określający nowy typ zmiennej. Te typy to: "integer" "double" "string" "array" "object" - Funkcja zwraca wartość "true, gdy wszystko poszło pomyślnie. W przeciwnym razie zwracana jest wartość "false". $zmienna = 10.3; echo " <br> $zmienna"; // Wyświetlona wartość to "10.3" settype($zmienna, "integer"); echo " <br> $zmienna"; // Wyświetlona wartość to "10" 1. Do strony tworzonej wcześniej dodaj kod powodujący wyświetlenie jej tytułu Tytuł pobrany ze zmiennej (tag <title>) przechowywanego w odpowiedniej zmiennej.
2. Napisz program, który wylicza i odpowiednio wyświetla koszt posiłku w restauracji: 2 Ryby z frytkami po 18 zł, 5 lampek wina czerwonego po 6 zł, VAT na rybę 7% a na wino 22%, napiwek 10% całości. 3. Przekonwertuj program na stronę z formularzem, w którą są wpisywane poszczególne wartości i skrypt wyliczający i wypisujący poszczególne składniki.
Temat 3 Sterowanie przebiegiem programu Ćwiczenie 1 instrukcja warunkowa - Używa się jej do wykonania pewnej instrukcji (lub bloku instrukcji), ale tylko w pewnych okolicznościach - zostanie spełniony określony warunek lub cały zestaw warunków. - Składnia instrukcji warunkowej: if(wyrażenie_warunkowe) instrukcja wykonywana jeśli spełniony zostanie warunek else if(inne_wyrażenie_warunkowe) instrukcja wykonywana jeśli spełniony zostanie drugi warunek, a pierwszy nie else instrukcja wykonywana jeśli nie zostanie spełniony żaden z warunków - Wyrażeniem warunkowym jest dowolne wyrażenie, które zwraca wartość, czyli wszystkie zmienne, wyrażenia logiczne, funkcje itp. Za spełniony warunek uznawana jest wartość większa od zera. $a = 2; $b = 5; $c = 1; if($a > $b) echo "$a jest większe od $b"; else if($b > $c) echo "$b jest większe od $c"; else echo "$c jest większe od $a i $b"; if($a) echo "Zmienna $a ma wartość większą od zera"; - Jeśli chcemy, aby po sprawdzeniu warunku wykonane zostało nie jedno, ale kilka poleceń, to te polecenia trzeba ująć w nawiasy klamrowe. Bez tego warunkiem objęta by była tylko jedna instrukcja po instrukcji if. - Instrukcje warunkowe mogą być zagnieżdżane wewnątrz siebie:
$a = 6; $b = 5; $c = 1; if($a > $b){ echo "$a jest większe od $b"; if($a > $c) echo " i od $c"; // Powinien zostać wyświetlony napis "6 jest większe od 5 i od 1" - Instrukcje warunkowe mogą być złożone dzięki wykorzystaniu operatorów logicznych $a = 6; $b = 5; $c = 7; $d = 6; $e = 6; if( ($a > $b $a > $c) && // Nawiasy klamrowe nie są potrzebne - to $d == $e ) // 2 linie ale jedna instrukcja echo 'Zmienna $a jest większa od $b a zmienna $d jest równa $e, '. 'więc ten tekst pokaże się.'; // Taka konstrukcja jest dozwolona 1. Przekształć skrypt dla średniej ocen, aby w zależności od jej wartości wypisywał, jakiej wysokości należy się stypendium. 2. Dodaj kod do skryptu wyliczającego deltę, aby w zależności od warunków wypisywane było ile rozwiązań posiada równanie: Warunki a 0 >0 a 0 =0 a 0 <0 Ilość rozwiązań 2 rozwiązania 1 rozwiązanie 0 rozwiązań 3. Dodaj stronę, która będzie posiadała odpowiednie pola do wpisania wartości przy współczynnikach i zmodyfikuj skrypt, aby obsługiwał tą stronę. 4. Przekształć skrypt odnoszący się do wyliczania ceny za obiad, tak, aby dla zamówień powyżej 50 złotych rabat wynosił 3% a napiwek 8%.
Ćwiczenie 2 instrukcja wyboru - Składnia switch jest instrukcją warunkową, ale jedną zmienną można porównać nie z jedną wartością, ale z kilkoma - Nie można konstruować złożonych warunków - możliwe jest tylko proste porównywanie - Składnia: switch($zmienna){ case 'wartość1': instrukcje break; case 'wartość2': instrukcje break; default: instrukcje - Instrukcje zawarte po identyfikatorze "default" wykonywane są jeśli zmienna $zmienna nie przyjęła wartości "wartość1" i "wartość2" (dla tego przykładu). - Instrukcje są przetwarzane linia po linii. Parser przechodzi do pierwszej linii "case" pasującej do zmiennej. Następnie przetwarzane są wszystkie linie wewnątrz nawiasów klamrowych aż do napotkania instrukcji break - nawet, jeśli po drodze znajdują się instrukcje "case". $i = 3; switch($i){ case 0: case 1: case 2: case 3: echo "Zmienna $i jest mniejsza bądź równa od trzech\n"; break; case 4: echo "Zmienna $i jest równa cztery\n"; break; default: echo "Zmienna $i jest większa od czterech\n";
1. Napisz program zawierający pole do wpisania komendy i skrypt, który powoduje wyświetlenie tekstu, że jeśli odpowiednio wpisane zostało: 1 Wprowadzenie zamówienia 2 - Realizacja zamówienia 3 - Modyfikacja zamówienia 4 Usuniecie zamówienia inne - Brak takiego polecenia Ćwiczenie 3 Pętle Pętla FOR - Umożliwia wielokrotne wykonanie określonych instrukcji - Składnia: for( inicjalizacja zmiennych ; sprawdzenie warunku ; modyfikacja zmiennych) { blok wyrażeń - 3 wyrażenia jako parametry: inicjalizacja zmiennych, czyli ustawienie początkowych wartości dla zmiennych kontrolujących pętlę, sprawdzenie warunku, czyli wyrażenie logiczne kontrolujące pętlę - pętla będzie wykonywana dopóki ten warunek jest prawdziwy, modyfikacja zmiennych kontrolujących pętlę - bez tego pętla będzie wykonywała się w nieskończoność. for( $x = 1; $x <= 10; $x++ ) echo $x."<br>"; Pętla while - Jest wykorzystywana w sytuacjach, kiedy niezbędne jest wykonywanie jakiejś operacji dopóki nie zostanie spełniony warunek. - Składnia: while( warunek ){
instrukcje - Dla wcześniejszego przykładu z pętlą for równoważne zapisanie pętli: $x=1; while($x <= 10){ echo $x."<br>"; $x++; Pętla dowhile - Odmiana pętli while. - Różni się tym, że polecenia zawarte w pętli będą przynajmniej raz wykonane - w przypadku pętli while tak być nie musi. - Składnia: do{ instrukcje while( warunek ); Przerywanie wykonań pętli - Czasem zachodzi potrzeba przerwania danej iteracji (powtórzenia) pętli i przejścia do następnej iteracji. Z pomocą wtedy przychodzi instrukcja continue. Wystarczy wstawić ją w odpowiednie miejsce wewnątrz pętli. - Przykład : for($x = 1; $x<=100; $x++) { if($x % 2!= 0) continue; echo $x." "; Po uruchomieniu powyższego przykładu powinniśmy zobaczyć liczby parzyste od 1 do 100. Równoważny zapis bez continue:
for($x = 1; $x<=100; $x++) { if($x%2==0) echo $x." "; - Istnieje też polecenie, które powoduje całkowite wyjście z pętli - nie tylko z bieżącej iteracji. To polecenie to brake. Załóżmy, że zmienna $nazwa to zmienna podana z formularza: for($x = 0; $x<10; $x++) { if($x%2==0) echo $x." "; if($nazwa == "Test1") break; 1. Za pomocą skryptu php utwórz 10-elementową listę wyboru: Samochód 1, Samochód 2, itd. 2. Napisz program, który wypisuje tabele temperatur dla temperatur od -30 do 30, zwiększając, co 3 wartości dla Fahrenheita i Celsiusza użyj pętli for Celciusz = (Fahrenheit 32) * 5 / 9 3. Przekształć program na pętlę while. 4. Napisz konwersję w drugą stronę.