PHP - WSB-NLU

advertisement
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;
?>
Download