<?php Ming_setScale(1.0); $string = "Ming"; $f = new SWFFont("ComicSansMS.fdb"); $m = new SWFMovie(); $m->setrate(24.0); $m->setdimension(2400, 1600); $m->setbackground(0xff, 0xff, 0xff); PHP i Bazy Danych function text($r, $g, $b, $a) { global $f, $m; $t = new SWFText(); $t->setfont($f); $t->setcolor($r, $g, $b, $a); $t->setheight(960); $t->moveto(-($t->getwidth($string))/2, 220); $t->addstring($string); $i = $m->add($t); $i->x = $x; $i->y = $y; $i->rot = $rot; $i->s = $scale; $i->rotateto($rot); Michał Dudkiewicz jaymz@mat.umk.pl
pętla for pętla for instrukcja sterująca, przy pomocy której skrypt może wykonad fragment kodu ustaloną z góry ilośd razy. Ilośd wykonao (iteracji) kontrolowana jest zmienną pełniącą rolę licznika. Przykład 1 for ($i=1;$i<10;$i++) { echo $i. <br> ; } Rolę licznika pełni zmienna $i wartośd początkowa wynosi 1, zakooczenie pętli nastąpi kiedy zmienna osiągnie wartośd równą 10, licznik zwiększa swoją wartośd o 1. Jako wynik wypisane zostaną wartości zmiennej $i od 1 do 9. 2
pętla for Przykład 2 for ($k=20;$k>10;$k=$k-2) { echo $i. <br> ; } *Przykład 3 $proba=false; for ($i=0; $proba==false; $i=$i+0.6) { if ($i>3) $proba=true; komunikat("\$i=".$i); } 3
pętla for Należy zwracad uwagę na to aby nie manipulowad wartością licznika wewnątrz pętli, gdyż może to doprowadzid do działania pętli innego niż planowaliśmy. Wyjątkiem jest sytuacja, kiedy celowo wykonujemy takie działanie. Przykład 4 for ($i=1;$i<10;$i++) { $i=4; echo $i. <br> ; } Powstała pętla nieskooczona! 4
pętla while pętla while instrukcja sterująca, przy pomocy której skrypt może wykonad fragment kodu wiele razy. Ilośd wykonao (iteracji) kontrolowana jest warunkiem wykonania pętli. Pętla nie ma określonej z góry ilości wykonao. Może nie wykonad się ani razu, jeśli warunek wykonania pętli nie będzie spełniony. Za pomocą pętli while można symulowad pętlę for. Przykład 5 $i=5; while ($i>10) { $i--; echo $i. <br> ; } Pętla nie wykona się ani razu! 5
pętla do while pętla do while instrukcja sterująca, podobna do pętli while. Pętla wykona się zawsze co najmniej raz gdyż warunek wykonania pętli sprawdzany jest na jej koocu (a nie na początku jak w przypadku pętli while). Ta pętla także może symulowad pętlę for. Przykład 6 $i=5; do { $i--; echo $i. <br> ; } while($i>10); Pętla wykona się raz! 6
instrukcja wielowarunkowa case case instrukcja warunkowa podobna do if, jednak w odróżnieniu od if może sprawdzad wiele wartości dla danego warunku (najczęściej warunkiem jest wartośd zmiennej) i w zależności od wartości warunku, wykonywad określone instrukcje. Pozwala zastąpid kilka warunków if. Ważnym elementem jest brake. Przykład 7 switch ($a) { case jeden : include( jeden.php ); break; case trzy : include( trzy.php ); break; default: include( dwa.php ); } 7
obsługa formularza po stronie serwera $_POST zmienna tablicowa zawierająca dane z naszego formularza wysłanego metodą POST. Takie zmienne należy ze względów bezpieczeostwa bezwzględnie przetworzyd! Istnieją proste sposoby, które pozwalają włamad się na strony, czy też wyrządzid spore szkody w bazach danych. Jedną z prostych i bardzo skutecznych (kiedy nie ma zabezpieczeo) technik jest SQLInjection i PHPInjection 8
SQLInjection SQLInjection (z ang., dosłownie zastrzyk SQL) luka w zabezpieczeniach aplikacji internetowych polegająca na nieodpowiednim filtrowaniu lub niedostatecznym typowaniu i późniejszym wykonaniu danych przesyłanych w postaci zapytao SQL do bazy danych. Podatne są na niego systemy złożone z warstwy programistycznej (przykładowo skrypt w PHP itp.) dynamicznie generującej zapytania do bazy danych (MySQL, PostgreSQL itp.). Wynika on zwykle z braku doświadczenia lub wyobraźni programisty. Podstawowym sposobem zabezpieczania przed SQLInjection jest niedopuszczenie do nieuprawnionej zmiany wykonywanego zapytania. http://www.poradnik-webmastera.com/artykuly/bazy_danych/sql_injection.php (źródło Wikipedia) 9
PHPInjection PHPInjection PHP Injection polega na dopisywaniu przez złośliwych użytkowników fragmentów kodu do przesyłanych zmiennych m.in. za pośrednictwem formularzy znajdujących się na stronach WWW. Przed PHP Injection można zabezpieczyd się filtrowaniem przekazywanych parametrów - wygląda to dokładnie tak samo, jak w przypadku SQL Injection, jednak atak nie ma bezpośredniego (lub nie ma w ogóle) wpływu na bazę danych. (źródło Wikipedia) 10
wyrażenia regularne Wyrażenie regularne w PHP są to pewne wyrażenia, opisujące w sposób ogólny jak ma wyglądad łaocuch znaków (napis). Mając taki opis (wzorzec) można testowad czy dany łaocuch spełnia nasze wymagania np.: czy jest poprawnym składniowo adresem email. Wyrażenia regularne konstruuje się w oparciu o: zwykłe znaki alfanumeryczne (litery, cyfry) kwantyfikatory powtórzeo wyrażenia logiczne (negacja, alternatywa) zakresy 11
kwantyfikatory powtórzeń. - jeden jakikolwiek znak (wyjątkiem jest znak nowej linii). Czyli pojedyncza litera, cyfra, przecinek, spacja, czy jakikolwiek inny znak będzie pasował do tego wzorca * - zero, jedno lub więcej wystąpieo? - zero lub jedno wystąpienie + - jedno lub więcej wystąpieo {n} - dokładnie n wystąpieo {n,} - co najmniej n wystąpieo {,m} - co najwyżej m wystąpieo {n,m} - co najmniej n i nie więcej niż m wystąpieo 12
znaki specjalne We wzorcach można również stosowad specjalne litery poprzedzone znakiem odwrotnego ukośnika (ang. backslash), które mają specjalne znaczenie. Na przykład \d oznacza dowolną cyfrę (znak z zakresu od 0-9), a \s to spacja. Oczywiście w tym przypadku również można wykorzystad kwantyfikatory powtórzeo. Najprostszy wzorzec (nie uwzględniający znaczenia analizowanych danych) dla jednej z form zapisu numeru identyfikacji podatkowej może wyglądad następująco: \d{3}-\d{2}-\d{2}-\d{3} Odwrotny ukośnik może również służyd do usunięcia specjalnego znaczenia niektórym znakom. 13
zakresy Możliwe jest również definiowanie zestawów dopuszczalnych znaków. Wykorzystuje się do tego nawiasy kwadratowe - [ i ]. Dla przykładu, dla określenia wzorca dla liczby w systemie szesnastkowym (wykorzystującej jako cyfry wszystkie cyfry oraz wielkie litery od A do F) wystarczy użyd: 0x[0123456789ABCDEF]+ Wypisywanie wszystkich możliwości jest nieco żmudne. Można skorzystad z zakresów. I tak, ten sam przykład można zapisad jako: 0x[0-9A-F]+ 14
negacja, alternatywa W pewnych przypadkach lepiej jest określid znaki, które nie mogą się pojawid niż znaki, które mogą się pojawid, chociażby z powodu ilości pozycji do wpisania. Do zdefiniowania zestawu znaków, które wystąpid nie mogą służy znak ^ (ale tylko gdy rozpoczyna definicję zestawu znaków). Przykładowo, poprawnie zapisanego hiperłącza to: <a\shref="[^\n">]+">[^>]+</a> Alternatywa to możliwośd zdefiniowania kilku wzorców dla tego samego miejsca w analizowanym ciągu znaków. Na przykład słowo cztero lub ośmioliterowe to: [a-za-z]{4} [a-za-z]{8} Wykorzystywany jest tutaj znak. 15
początek i koniec linii Istnieje również możliwośd oznaczenia początku i kooca linii. Początek linii jest oznaczany znanym już symbolem ^, jednak aby był traktowany jako początek linii, to musi on występowad na początku wzorca, a koniec to $, analogicznie, powinien występowad na koocu wzorca. Wzorzec opisujący poprawny składniowo adres email: ^[a-za-z0-9.\-_]+@[a-za-z0-9\-.]+\.[a-za-z]{2,4}$ 16
funkcje sprawdzania preg_match, preg_match_all Przykład 8 (sprawdzanie czy podany email jest poprawny) $wzorzec = '/^[a-za-z0-9.\-_]+@[a-za-z0-9\-.]+\.[a-za-z]{2,4}$/'; $dane = $_POST['email']; if(preg_match($wzorzec,$dane)) echo("e-mail prawidłowy"); else echo("e-mail nieprawidłowy"); Funkcja preg_match_all różni się od funkcji preg_match tym, że wyszukuje wszystkie ciągi pasujące do wzorca i nie poprzestaje na znalezieniu tylko pierwszego. Wynik zwraca w postaci tablicy. 17
funkcja preg_replace preg_replace - funkcja potrafi zamienid w tekście wystąpienie jednego łaocucha znaków (napisu) na inny łaocuch znaków (napis). Napis do wymiany opisany jest wyrażeniem regularnym. Zamiana adresu strony na działający link: 1) Musimy opisad protokół. Ustalamy, że interesują nas tylko najpopularniejsze: http, https, ftp czy nntp. (wszystkie tutaj wymienione protokoły mają w środku litery t i p, niektóre z nich mogą zostad rozszerzone o literę s). Dlatego początek adresu możemy zapisad jako: [a-za-z]{1,2}tps?:\/\/ 18
funkcja preg_replace 2) Opis domeny (podobnie jak przy wzorcu na adres email), rozszerzymy o numer portu TCP na którym ma zostad nawiązane połączenie: [a-za-z0-9\-.]+\.[a-za-z]{2,4}(:[0-9]{1,5})?\/ W nawiasach okrągłych jest opisany numer portu, potem jest znak? określający, że wyrażenie może wystąpid co najwyżej raz. Nawiasy okrągłe powodują utworzenie podwyrażenia i znak? będzie miał zastosowanie tylko do tego podwyrażenia. 19
funkcja preg_replace Przykład 9 (zamiana tekstu na link) $wzorzec = '/[a-za-z]{1,2}tps?:\/\/[a-za-z0-9\-.]+\.[a-za-z]{2,4}(:[0-9]{1,5})?\/[^\n\s]*/'; $zamiana = '<a href="\0">\0</a>'; $wynik = preg_replace($wzorzec, $zamiana, $tresc); W zmiennej zamiana występuje wyrażenie \0 oznaczające ciąg, który został dopasowany do całego wyrażenia. 20
funkcja preg_replace Przykład 10 (zamiana wg tablicy z wzorcami) $usmiechy = array( '/:?\)/', '/:?\(/', '/:?\-/', '/:?\[/'); $zamiana = array( '<img src="usmiech.png">', '<img src="smutek.png">', '<img src="zastanowienie.png">, '<img src="oczko.png">'); $tresc = preg_replace($usmiechy, $zamiana, $tresc); Każde wystąpienie :), :(, :/, ;) w tekście reprezentowanym przez zmienną $tresc zostanie zastąpione odpowiednim obrazkiem. 21
funkcje explode i implode funkcja explode - funkcja pozwalająca utworzyd z ciągu znaków oddzielonych jakimś ustalonym znakiem (separatorem) tablicę. Przykład 10 (tablica z wszystkich elementów) $text = 14/09/2009;19:23:33;Internet Explorer;192.168.1.1 $tablica = explode( ;,$text); Przykład 11 (tablica tylko z 2 pierwszych elementów) $text = jeden dwa trzy cztery ; $tab = explode(' ', $str, 2); 22
funkcje explode i implode Przykład 12 (tablica z wszystkich elementów oprócz ostatniego) $text = jeden dwa trzy cztery ; $tab = explode(' ', $str, -1); funkcja implode - funkcja pozwalająca utworzyd z tablicy ciąg znaków oddzielonych jakimś ustalonym znakiem (separatorem. Przykład 13 $tablica = array( kowalski', jan.kowalski@xyz.pl', 123456789'); $napis = implode(",", $array); 23
PHP i MING Zakończenie cdn 24