Systemy internetowe Wykład 3 PHP PHP - cechy PHP (Hypertext Preprocessor) bardzo łatwy do opanowania, prosta składnia, obsługuje wymianę danych z różnymi systemami baz danych pozwala na dynamiczne generowanie grafiki, dokumentów PDF czy animacji Flash umożliwia tworzenie aplikacji obiektowych od wersji 5 rozwijany na zasadach Open Source. http://www.php.net Wymaga interpretera i serwera HTTP. 1
Interpreter PHP Sekcje PHP <?php echo "Komunikat";?> <script language="php"> echo "Komunikat"; </script> <? echo Wynik działania 2 x 3 wynosi:?> <? =2*3;?> jednostki. <% echo "asp_tags = on.\n"; %> <%= $zmienna %> 2
Witaj.php <!DOCTYPE html> <html> <head>.. </head> <body> <h1> Powitanie1 </h1> <?php echo "Witaj! w PHP";?> <h1> Powitanie2 </h1> <?php echo <span style= color: red; > Witaj w PHP! </span> ;?> </body> </html> Zmienne i typy danych Zmienne nie muszą być deklarowane przed pierwszym użyciem typ zmiennej określany jest automatycznie. Nazwa zmiennej zaczyna się od znaku $. Cztery typy podstawowe: logiczny (bool) o wartościach true lub false), liczbowy całkowity, liczbowy zmiennoprzecinkowy, tekstowy. Dwa typy złożone: tablicowy i obiektowy. Dwa typy specjalne: typ NULL i identyfikator zasobów. 3
Typ tekstowy Łańcuchy znaków mogą być ograniczone: apostrofami (brak parsowania zmiennych, nie obowiązują sekwencje specjalne), cudzysłowami (zmienne są parsowane, obowiązują sekwencje specjalne). $wiek = 30; echo "Mam $wiek lat.\n"; echo 'Mam $wiek lat.\n'; Mam 30 lat. Mam $wiek lat.\n Operator. konkatenacja łańcuchów znaków. echo "Napis ". "długi "; Napis długi Tablice w PHP Tablice to struktury danych przechowujące zbiór danych zwykle jednego typu, dostępnych przez indeks. Dostępne są tablice: zwykłe (indeksowane kolejnymi nieujemnymi liczbami całkowitymi), asocjacyjne - indeksowane kluczem. Tablice mogą być również używane jako listy, kolejki, czy stosy. 4
Tablice.php <?php $tab1[0] = "jeden"; $tab1[1] = "dwa"; $tab1[2] = "trzy"; $tab2 = array('pierwszy' => 1, 'drugi' => 2, 'trzeci' => 3); echo "Drugi element tablicy zwykłej: ".$tab1[1]; echo "<br/> oraz asocjacyjnej: ".$tab2["drugi"];?> Operatory arytmetyczne: +, -, *, /, %, ++, --, przypisania: =, +=, -=, *= itd., porównania: ==, ===, <>,!=,!==, <, >, <=, >=, logiczne: and lub &&, or lub,!, xor, bitowe, kontroli błędów, wykonania poleceń systemowych, tekstowe tablicowe 5
Instrukcje sterujące if (warunek) instrukcja; if (warunek1) instrukcja1; else if (warunek2) instrukcja2;... else instrukcjan; switch (wyrażenie) { case wartość1: instrukcja1; break; case wartość2: instrukcja2; break;... default: instrukcjan; } Instrukcje iteracyjne for (wyr_inicjujące; wyr_warunkowe; wyr iteracyjne) instrukcja; while (wyrażenie_warunkowe) instrukcja; do instrukcja; while (warunek); foreach (wyrażenie_tablicowe as wartość) instrukcja; foreach (wyrażenie_tablicowe as klucz => wartość) instrukcja; 6
Pętla foreach <body> <h1> Elementy tablicy asocjacyjnej: </h1> <?php $tab2 = array('pierwszy' => 1, 'drugi' => 2, 'trzeci' => 3); foreach($tab2 as $klucz => $wartosc) echo "tab2[".$klucz."]=".$wartosc."<br />?> PHP funkcje (1) function nazwa (arg1, arg2,... argn) { instrukcje; return wartość_zwracana; } nazwa argumenty wartość zwracana function funkcja1($argument) function funkcja1(&$argument) 7
PHP funkcje (2) function modul($liczba) { if ($liczba < 0) $liczba = -$liczba; return $liczba; } $wynik = modul(-15); echo $wynik; include 'nazwa_pliku ; (http://www.php.net/manual/pl) form1.html <html> <body> <h2>podaj 2 liczby:</h2> <form action='mnoz.php' method= POST'> <p>liczba 1: <input type='text' name="l1 ></p> <p>liczba 2: <input type='text' name ="l2 ></p> <input type ='submit' name="wynik" value='wynik'> </form> </body> </html> 8
1. Przycisk SUBMIT (1) Sprawdzenie, czy na stronie z formularzem został wciśnięty przycisk wysyłający dane. Sprawdzenie wartości w tablicy asocjacyjnej $_POST/$_GET. PHP każdemu działającemu skryptowi udostępnia zmienne zewnętrzne - przechowywane w tablicach superglobalnych ( $_ ). Superglobalne - automatycznie dostępne w każdym zasięgu. Zwykłe zmienne globalne w PHP nie są automatycznie widoczne w funkcjach ( global ). Tablice superglobalne $GLOBALS referencje do zmiennych globalnych skryptu $_SERVER zmienne tworzone przez serwer, $_GET zmienne dostarczone do skryptu metodą GET, $_POST zmienne dostarczone do skryptu metodą POST, $_COOKIE zmienne cookies dostarczone do skryptu, $_FILES zmienne dostarczone do skryptu przez upload, $_ENV zmienne ze środowiska systemu operacyjnego, $_REQUEST zmienne z tablic $_GET, $_POST i $_COOKIE, $_SESSION zmienne sesyjne. 9
1. Przycisk SUBMIT (2) Pola formularza są dostępne w tablicy $_POST/$_GET pod indeksami odpowiadającymi ich nazwom. Czy w tablicy $_POST znajduje się pole wynik? Funkcja isset() sprawdza, czy ustawiona jest określona wartość zmiennej. if (isset($_post["wynik"])) {...} Isset, a empty isset(): sprawdza, czy zmienna istnieje i jest ustawiona true: zmienna istnieje i ma przypisaną wartość (również pusty łańcuch) empty(): sprawdza, czy zmienna jest pusta true: pusty łańcuch, false, zero, null 10
2. Walidacja Sprawdzenie czy pola w tablicy $_POST odpowiadające wymaganym polom: nie są puste empty($pole) If (empty($_post["pole1"])) mają odpowiedni format - is_numeric($pole); is_float(); is_link(); is_integer(); is_string() If (!is_numeric($_post["pole1"])) spełniają podane wyrażenie regularne preg_match(wyrazenie_regularne,$pole) if (!preg_match('/^[0-9]{2,2}-[0-9]{3,3}$/', $kod)) <html><body><h2>podaj 2 liczby:</h2> form1.php <form action='mnoz.php' method= POST'> Liczba 1: <input type='text' name="l1"> <br/> Liczba 2: <input type='text' name ="l2"> <input type ='submit' name="wynik" value='wynik'> </form></body></html> <?php mnoz.php if (isset($_post["wynik"])) { if (empty($_post["l1"]) empty($_post["l2"])!is_numeric($_post["l1"])!is_numeric($_post["l2"])) { echo "Musisz wypełnić wszystkie pola liczbami! "; echo "<p><a href= form1.php > Formularz </a></p>";} else { echo Wynik mnożenia : echo $_POST[ l1'] * $_POST[ 2'] } } else header("location: form1.php");?> 11
Formularz - dodatki header() - wysłanie surowego nagłówka HTTP. Pozwala na ustawienie parametrów nagłówka HTTP. header( nazwa_pola: wartość, zastępowanie). header( Location: form1.php, true) Instrukcja exit Post Back - przekazywanie danych z formularza realizowanego przez skrypt do tego samego skryptu $_SERVER[ PHP_SELF ] Upload plików (1) Upload przesłanie pliku z lokalnego systemu plików użytkownika na serwer za pośrednictwem formularza HTML wyświetlonego w przeglądarce. Konieczna jest aplikacja gotowa odebrać po stronie serwera plik przesłany z formularza HTML metodą POST. Zapis plików w katalogu ustawionym w opcjach PHP Informacje o plikach zostają udostępnione skryptom w tablicy superglobalnej $_FILES, np.: $_FILES['plik']['tmp_name'] nazwa na serwerze $_FILES['plik']['name ] nazwa rzeczywista 12
Upload plików (2) is_uploaded_file() sprawdza, czy plik został poprawnie przesłany na serwer move_uploaded_file() pozwala na przeniesienie plików z miejsca tymczasowego do docelowego is_uploaded_file($_files['plik']['tmp_name']) move_uploaded_file($_files['plik']['tmp_name'], [katalog]/$_files['plik']['name']) <form enctype="multipart/form-data" method="post" action="upload.php" > upload.html Wyślij plik: <input type="file" name="plik"> <input type="submit" value="wyślij > </form> <?php if (is_uploaded_file($_files['plik']['tmp_name'])) { echo "Załadowano plik {$_FILES['plik']['name']} jako {$_FILES['plik']['tmp_name']}<BR>\n ; upload.php $target= images/$_files['plik']['name']; move_uploaded_file($_files['plik']['tmp_name'], $target); }?> 13
Mechanizm sesji (1) Rozpoczęcie nowej sesji - tworzony jest klucz SESSION ID, SID zapisywany jest na serwerze oraz przesyłany do przeglądarki klienta przesyłany przez klienta do serwera z każdym nowym żądaniem (cookie, URL), Zmienne sesyjne: są zapisywane na serwerze: 1 sesja 1 plik. dla skryptu są dostępne poprzez tablicę $_SESSION. rejestracja nowej zmiennej sesyjnej - dodanie nowego klucza do tablicy sesji. PHPSESSID = 4241b82cb66569c0338b8fec21c4c2df Mechanizm sesji (2) session_start() session_name() session_id() session_destroy() kontynuacja bądź rozpoczęcie nowej sesji zwraca nazwę zmiennej cookie przechowującej SID zwraca identyfikator sesji usunięcie sesji 14
<?php session_start(); if (!isset($_session['licznik'])) $_SESSION['licznik'] = 0; else $_SESSION['licznik']++;?> <html><body> <?php echo "Liczba wizyt na stronie: "; echo "<b>".$_session['licznik']."</b>";?> </body></html> <?php session_start(); if (isset($_session['klient'])) { $_SESSION=array(); if (isset($_cookie[session_name()])) { setcookie(session_name(),'',time()-3600); } session_destroy(); }?> setcookie( nazwa zmiennej, wartość, wygaśnięcie) 15
Dziękuję za uwagę 16