Zaawansowane Bazy Danych PHP - wprowadzenie PHP jest językiem skryptowym interpretowanym po stronie serwera WWW. Skrypty napisane z wykorzystaniem PHP umożliwiają między innymi dostęp do systemu plikowego na serwerze, a także sprawne połączenie z wieloma popularnymi systemami zarządzania baz danych, m.in. PostgreSQL. PHP staje się standardem przy korzystaniu z baz danych w sieci WWW, zwłaszcza dla serwerów pracujących pod nadzorem systemu opearcyjnego Linux, dla którego najbardziej popularnych serwerem WWW jest Apache. Skrypty PHP umieszcza się w dokumencie HTML. Przy żądaniu otwarcia strony następuje interpretacja kodu przez serwer i tworzona jest dynamiczna strona WWW. Po utworzeniu strona ta jest przesyłana do przeglądarki. Informacje o języku PHP 1. komentarze – jak w C (// oraz /* ... */) 2. zmienne – nazwy zmiennych zaczynają się od $ następnie litera lub znak podkreślenia dalej dowolne litery lub cyfry. Wielkość liter jest uwzględniana (np. $i, $licznik, $_TMP, $polaczenie). Użycie zmiennych nie wymaga wcześniejszych deklaracji 3. typy danych: liczby całkowite, liczby zmiennoprzecinkowe, łańcuchy znaków, tablice, obiekty. 4. operatory, wyrażenia, instrukcje – podobnie jak w C++. echo "tekst"; - wyświetla tekst na ekranie przeglądarki echo 'ciąg znaków'; - wyświetla ciąg znaków na ekranie przeglądarki z podstawieniem wartości zmiennych. print "tekst"; - działa podobnie jak echo, tj. umożliwia wysłanie tekstu do przeglądarki Najważniejsze funkcje umożliwiającw dostęp do baz danych zarządzanych prze PostgreSQL Składnia funkcji Typ wyniku bool pg_connect ([string łańcuch połaczenia] | [string host], string port, [string opcje], string nazwa bazy) pg_pconnect ([string łańcuch połaczenia] | [string host] , string port, [string opcje], string nazwa bazy) pg_close ([int id_połączenia]) string int array pg_errormessage ([int id_połączenia]) pgexec ([int id_połączenia,] string zapytanie) pg_fetch_array (int id_wyników, int wiersz) array pg_fetch_row (int id_wyników, int wiersz) int G_freeresult (int id_wyników) int int int string pg_numrows (int id_wyników) pg_options (int id_połączenia) Opis działania Otwiera połączenie z bazą danych PostgreSQL Tworzy trwałe połączenie z bazą danych PostgreSQL Zamyka połączenie z bazą danych PostgreSQL Zwraca łańcuch znaków opisujący błąd Wykonuje zapytanie Pobiera wiersz ze zbioru wyników i zwraca go w postaci tablicy asocjacyjnej Pobiera wiersz ze zbioru wyników i zwraca go w postaci tablicy indeksowanej liczbami Zwalnia pamięć służącą do zapamiętania zbioru wyników Zwraca ilość wierszy znajdujących się w zbiorze wyników Zwraca opcje skojarzone z danym połączeniem Zadanie 1 Niśmiertelny program Hello World. Utworzyć plik ASCII (np. przy pomocy edytora pico, vi lub mc | F4) zawierający elemntarny skrypt PHP wpleciony do kodu HTML. Zwrócić uwagę na rozszerzenie php. Plik zapisać w katalogu public_html. Zamiast funkcji echo można uzyć funkcji print. plik hello.php <html> <body> <? echo "Hello, echo "Hello, echo "Hello, ?> <h3>Tutaj zwykły world!!!"; world!!!<br>"; world!!!"; znacznik HTML</h3> </body> </html> Uruchomić teraz przeglądarkę i jako adres URL podać: venus.wsb-nlu.edu.pl/~swojekonto/hello.php Po obejrzeniu wyników w oknie przeglądarki, kliknąć prawym przyciskiem w oknie i obejrzeć źródło strony. Czy widać tam teraz komendy języka PHP? Jeżeli nie, to dlaczego? Zadanie 2 Utworzyć stronę WWW z formularzem do przeglądania danych z tabeli pracownicy (Nazwisko, Stanowisko, id_dz). plik dopisz_prac_form.html: <html> <head> <title>Formularz</title> </head> <body> <form method=”Post” action=”dopisz_pracownika.php”> <table> <tr><td>Numer pracownika: </td> <td><INPUT TYPE="text" NAME="ID_PRAC" SIZE=3 MAXLENGTH=3></td> <tr><td>Nazwisko: </td> <td><INPUT TYPE="text" NAME="NAZWISKO" VALUE="" SIZE=20 MAXLENGTH=20> <tr><td>Stanowisko: </td> <td><INPUT TYPE="text" NAME="STANOWISKO" SIZE=30 MAXLENGTH=30> <tr><td>Data zatrudnienia: </td> <td><INPUT TYPE="text" NAME="DATA_ZATR" SIZE=10 MAXLENGTH=10> <tr><td>Zarobki: </td> <td><INPUT TYPE="text" NAME="ZAROBKI" SIZE=10 MAXLENGTH=10> <tr><td>Premia: </td> <td><INPUT TYPE="text" NAME="PREMIA" SIZE=10 MAXLENGTH=10> <tr><td>Numer dzialu: </td> <td><INPUT TYPE="text" NAME="ID_DZ" SIZE=3 MAXLENGTH=3> <tr><td><input type=SUBMIT name=SUBMIT value="Przeslij dane"></td> <td><input type=RESET value=”Kasuj dane”></td> </table> </form> </body> </html> plik dopisz_pracownika.php ze skryptem PHP: <?PHP // Dopisanie danych z formularza do bazy if ((!$NAZWISKO) or (!$ID_PRAC)) { echo ”<center><b>”; echo ”Nazwisko i Numer pracownika musza byc podane!”; Echo ”</b></center><br>”; exit; } // Dodanie znaków backslash przed: ' " \ (apostrof, cudzysłów, ukośnik) $ID_PRAC = addslashes($ID_PRAC); $NAZWISKO = addslashes($NAZWISKO); $STANOWISKO = addslashes($STANOWISKO); $DATA_ZATR = addslashes($DATA_ZATR); $ZAROBKI = addslashes($ZAROBKI); $PREMIA = addslashes($PREMIA); $ID_DZ = addslashes($ID_DZ); // zapisanie danych w tabeli // otworzenie bazy danych $polaczenie = pg_pconnect("dbname=nazwa_bazy user=jkowalski"); if (!$polaczenie) { echo " Brak połączenia z bazą.<br>"; exit; } // wstawienie nowego rekordu do tabeli $wynik = pg_exec($polaczenie, "insert into pracownicy (Id_prac, Nazwisko, Stanowisko, Data_zatr, Zarobki, Premia, Id_dz) VALUES('$ID_PRAC','$NAZWISKO' , '$STANOWISKO', '$DATA_ZATR', '$ZAROBKI', '$PREMIA', '$ID_DZ')"); if (!$wynik) { echo "Błąd podczas aktualizacji bazy"; exit; } if ($wynik): echo "Pracownik $NAZWISKO zostal dopisany do bazy"; exit; endif; ?> <!-- Koniec skryptu PHP --> Zadanie 3 Utworzyć stronę WWW z formularzem do wyszukiwania pracowników podając fragment nazwiska. Plik ze skryptem php: <?PHP if ( strlen($NAZWISKO)>0 ): $NAZWISKO = addslashes($NAZWISKO); // połączenie z bazą $polaczenie = pg_Connect("dbname=yyy user=yyy port=5432"); if (!$polaczenie){ echo "Brak połączenia z bazą.<br>"; exit; } // szukanie w bazie $wynik = pg_Exec($polaczenie, "SELECT * FROM pracownicy WHERE nazwisko Like '%$NAZWISKO%' "); if (pg_NumRows($wynik)==0) { //Jeśli liczba wierszy jest zero echo "Nie znaleziono odpowiadajacych rekordow w bazie.<BR>"; echo "<p><a href='szukaj.php3'>Ponowne wyszukiwanie</a>"; exit; } // wyświetlenie odnalezionych rekordów $liczba_rekordow = pg_NumRows($wynik); for ( $i=0; $i < $liczba_rekordow; $i++ ){ $ID_PRAC = pg_Result($wynik, $i, "id_prac"); // Zwróć uwagę na to, że $imie to zmienna PHP a imie to pole w tabeli $NAZWISKO = pg_Result($wynik, $i, "nazwisko"); $STANOWISKO = pg_Result($wynik, $i, "stanowisko"); $DATA_ZATR = pg_Result($wynik, $i, "data_zatr"); $ZAROBKI = pg_Result($wynik, $i, "zarobki"); echo "<P>$ID_PRAC $NAZWISKO $STANOWISKO <br>"; echo "Data zatrudnienia: $DATA_ZATR; <br>Zarobki: $ZAROBKI <br>"; } // koniec pętli for // Ponowne wyszukiwanie: echo "<p><a href='str7.htm'>Ponowne wyszukiwanie</a>"; exit; endif; ?>