Podstawy PHP Paweł Kasprowski pawel@kasprowski.pl
Historia PHP 1995 Personal Home Page Rasmus Lerdorf, prosty jęsyk oparty na Perlu 1998 PHP3 Andi Gutmans, Zeev Suraski modularność i rozszerzenia (extensions) 2000 PHP4 wsparcie dla róznych serwerów WWW, obsługa sesji, większa szybkość działania aktualnie 20% domen internetowych uzywa PHP4! 2004 PHP5 programowanie obiektowe
Instalacja i konfiguracja Serwer WWW najczęściej Apache Moduł PHP Konfiguracja serwera pliki z rozszerzeniem.php są wysyłane do interpretera php interpreter zamienia kod php na html serwer wysyła gotową stronę do klienta
Gotowe pakiety Standardowa zawartość: LAMP Linux Apache MySQL PHP lub WAMP Windows Apache MySQL PHP Najpopularniejszy w Polsce: Krasnal Serv
Konfiguracja Apache Plik httpd.conf Instalacja jako serwis apache k install n "nazwa" f "plik konfig" Konfiguracja dla PHP: LoadModule php4_module "ścieżka" AddModule mod_php4.c DirectoryIndex index.php index.html Dla Apache2 i innych wersji PHP inne nazwy plików
Konfiguracja PHP Plik php.ini Obsługa błędów error_reporting = E_ALL display_errors = On display_startup_errors = Off log_errors = On error_log = "ścieżka" Inne register_globals = Off post_max_size = 8M extensions mail
Najprostszy skrypt <html> <body> <?php echo "<p>hello world!</p>";?> </body> </html>
Sprawdzenie konfiguracji <html> <body> <?php phpinfo();?> </body> </html>
Podstawowe elementy Zmienne Ciągi znakowe - zmienne tekstowe Instrukcje sterujące Tworzenie funkcji Tablice numeryczne i asocjacyjne
Zmienne Typ jest nadawany w momencie przypisania wartości (nie trzeba deklaracji) Automatyczna konwersja do typu, który jest potrzebny Zawsze nazwa zaczyna się od $
Ciągi znakowe Łączenie (konkatenacja) znakiem kropki '.' echo $imie.' '.$nazwisko; Można używać cudzysłowia (") i apostrofu (') $imie = 'Paweł'; $nazwisko = "Kasprowski"; Znaki specjalne w tekście oznacza się przez \ $tytul = "Restauracja \"Oleńka\" zaprasza"; Można użyć heredoc $tekst = <<<DOKUMENT...treść dokumentu... DOKUMENT;
Instrukcje sterujące if(warunek) { } [[elseif { }] else { }] używaj == zamiast = (podobnie jak w C)! switch(zmienna) { case wartosc: kod; break;... default: kod; break; } while(warunek) {...} for(inicjalizacja; warunek; inkrementacja) {...} foreach(tablica as klucz => wartość) {...}
Tworzenie funkcji Słowo kluczowe function Może dostawać parametry i function powitaj($imie) { echo "Hello ".$imie; } Może zwracać wynik function maxof($a, $b) { if($a>$b) return $a; else return $a; }
Tablice Tablice numeryczne $tab[0] = "aaa" $tab[1] = 65 wygodne do przeglądania w pętlach inna inicjalizacja: $tab = array("aaa","bbb","ccc") Tablice asocjacyjne $tab2["adam"] = "piłkarz" $tab2["grzes"] = "filatelista" $imie="olek"; $tab2[$imie]="hokeista"; dla nich najczęściej używane foreach
Foreach i tablice Tablica $samochody["fiat Brava"] = 2000; $samochody["citroen Xsara"] = 2003;... Przeglądanie całej tablicy: foreach( $samochody as $key => $value) { echo "MARKA: $key, ROCZNIK: $value <br />"; }
Zasięg zmiennych Zmienne globalne nie są domyślnie widziane w funkcjach! $imie = "paweł"; function pokazimie() { echo "Imie: ".$imie; // nic się nie pokaże! } function pokazimie2() { global $imie; echo "Imie: ".$imie; // teraz się pokaże echo $GLOBALS["imie"]; // teraz też }
Zmienne statyczne Widziane tylko w funkcji ale zachowujące wartość Kolejne wywołania używają tej samej zmiennej function Test() { static $a = 0; echo $a; $a++; }
Zmienne zmienne Wartości zmiennych mogą być także użyte jako identyfikatory! $a = "imie"; $$a = "Olek"; echo $imie; // wypisuje Olek ${$a."_nazwisko"} = "Adam Kowalski"; echo $imie_nazwisko;
Referencje Dwie zmienne mogą wskazywać na tą samą wartość Przykład 1 $a = 10; $b = $a; $a = 20; echo "a=$a b=$b"; //a=20, b=10 Przykład 2 $a = 10; $b = & $a; $a = 20; echo "a=$a b=$b"; //a=20, b=20
Łączenie plików Dzielenie wspólnej logiki przez skrypty Dołączanie pliku: include("xyz.php") Dołączanie pliku i zatrzymanie jeśli go nie ma: require("xyz.php")
Tablice superglobalne $_REQUEST $_POST $_GET $_SERVER $_COOKIE $_SESSION $_FILES $_ENV
Wczytywanie parametrów $_REQUEST[ ] $_POST[ ] $_GET[ ]
Tworzenie formularza Znaczniki <FORM> i </FORM> Wewnątrz wszystkie pola i przynajmniej jeden przycisk typu submit Parametry znacznika FORM action method onsubmit Może być więcej niż jeden formularz na stronie! Częsty błąd mieszanie pól w różnych formularzach
Przykładowy formularz <form action= http://adres.pl/zarejestruj method="get">... Imię: <input type= text name= imie ><br>... <input type= submit value= Wyślij > </form>
Pobranie danych GET Wywołanie: http://localhost/powitanie.php?imie=paweł Skrypt pobierający daną <h1>witaj <?=$_GET["imie"]?></h1> <p> <?php $imie = $_GET["imie"]; if($imie = = "Paweł") echo Ja też mam na imię Paweł! ;?> </p>
Kalkulator kredytowy Obliczenie wysokości miesięcznej raty spłaty kredytu na podstawie jego kwoty, oprocentowania rocznego i liczby rat miesięcznych rata = kwota* 1 1+ oproc /12 1 ( oproc /12) liczba _ rat
Funkcja licząca ratę function liczrate($kwota, $procent, $lat) { $rata = $kwota * ($procent/12.0) / (1 - (1 / pow( 1.0 + $procent / 12.0, $lat * 12))); return $rata; }
Wyświetlanie kredytu $kwota = 10000; $procent = 0.02; $lat = 2; echo "Dla kredytu $kwota i oprocentowania $procent". " rata przy kredycie na $lat lat wynosi:". liczrate($kwota,$procent,$lat);
Parametryzacja <form action="rata.jsp"> kwota: <input type="text" name="kwota"><br/> procent: <input type="text" name="procent"><br/> ile lat: <input type="text" name="lat"><br/> <input type="submit"/> </form>
Wyświetlanie kredytu $kwota = $_POST["kwota"]; $procent = $_POST["procent"]; $lat = $_POST["lat"]; echo "Dla kredytu $kwota i oprocentowania $procent". " rata przy kredycie na $lat lat wynosi:". liczrate($kwota,$procent,$lat);
Liczenie różnych kredytów Rezygnujemy z przekazywania liczby lat kredytowania Obliczamy jaka będzie rata w zależności od ilości lat Użycie pętli for: $N = 10; for($i=1;$i<$n;$i++){ echo liczrate($kwota, $procent, $i). "<br/>"; }
Wyświetlenie tabelki echo "<table>"; for($i=1;$i<$n;$i++){ echo "<tr>". "<td>lata: ".$i."</td>". "<td>rata: ".liczrate(10000,0.02,$i)."</td>". "</tr>"; } echo "</table>";
Ile kosztuje kredyt? Koszt kredytu to różnica między kwotą do zapłaty a kwotą kredytu Kwota do zapłaty: $dozaplaty = liczrate($kwota, $procent, $lat) * $lat * 12; Różnica: $koszt = $dozapplaty - $kwota Dodajemy funkcję: function doplata($kwota, $procent, $lat) { $sumasplat = liczrate($kwota, $procent, $lat) * $lat * 12; return $sumasplat - $kwota; }
Wyświetlenie tabelki for($i=1;$i<$n;$i++){ echo "<tr>". "<td>lata: ".$i."</td>". "<td>rata: ".liczrate($kwota,$procent,$i)."</td>". "<td>dopłata: ". doplata($kwota,$procent,$i)."</td>". "</tr>"; }
Formatowanie rezultatu for($i=1;$i<$n;$i++){ echo "<tr>". "<td>lata: ".$i."</td>". "<td>rata: ". number_format(liczrate($kwota,$procent,$i),2)."</td>". "<td>doplata:". number_format(doplata($kwota,$procent,$i),2)."</td>". "</tr>"; }
Formatowanie tekstu strlen($txt) długość tekstu strpos($txt1, $txt2[, $start]) wyszukuje txt1 w txt2 i zwraca indeks str_replace($txt1, $txt2, $txt3) zamienia txt1 na txt2 w ciągu txt3 np. str_replace("wojtek","wojciech", $lista_imion) można uzyć dwóch tablic substr($txt[,start[,length]]) zwraca podciąg, gdy start<0 liczy się od końca strtoupper, strtolower, ucwords zmiana wielkości liter implode, explode zmiana w tabelę