PHP

Transkrypt

PHP
Wydział Elektrotechniki, Informatyki i Telekomunikacji
Instytut Informatyki i Elektroniki
Instrukcja do zajęć laboratoryjnych
Przetwarzanie i organizowanie danych : bazy danych
Nr ćwiczenia
Temat
Cel ćwiczenia
Wymagane teoretyczne przygotowanie
Sposób zaliczenia
Prowadzący
10
Aplikacje internetowe z zastosowaniem
języka PHP
Zapoznanie się z podstawami tworzenia
skryptów PHP umożliwiających połączenia z
bazą danych, tworzenie bazy danych oraz jej
komponentów oraz przetwarzania danych tj.
realizacja zapytań i aktualizacja bazy danych
Podstawy języka C lub PHP oraz html
a) Wstęp
1.1. Oprogramowanie
Baza MySQL jest jedną z najpopularniejszych baz danych, z jakimi współpracują skrypty
PHP. Jest to oprogramowanie dystrybuowane na zasadach open source. PHP (Hypertext
Preprocessor) jest językiem skryptowym przeznaczonym przede wszystkim do tworzenia
dynamicznych aplikacji internetowych.
1.2. Cel ćwiczeń
Celem ćwiczeń zawartych w instrukcji jest przedstawienie możliwości komunikacji pomiędzy
wykonywanymi skryptami oraz bazą danych (MySQL), która zawiera informacje
wykorzystywane przez aplikację WWW.
1.3. Metoda osadzania skryptów PHP w stronie internetowej.
Do osadzenia skryptu PHP w stronie służą znaczniki <?php oraz ?>. Treść skryptu należy
umieścić pomiędzy tymi znacznikami. Podczas przesłania żądania od klienta do serwera z
prośbą o udostępnienie zasobu zawierającego skrypt PHP, skrypt ten jest wykonywany przez
serwer, a wyniki zwrócone przez skrypt zastępują treść strony ograniczoną znacznikami
skryptu. Aplikacja kliencka otrzymuje zatem stronę zawierającą jedynie wyniki, a nie źródła
skryptu.
Prosty przykład
Aby uruchomić poniższy przykład należy zalogować się do serwera i utworzyć plik php. W
tym celu:\
a) uruchomić program putty.exe.\
b) W polu Host name podać adres IP serwera (dendrit.issi.uz.zgora.pl) i kliknąć
przycisk Open.
c) Przy zapytaniu o nazwę użytkownika (login as) podać podyplom i wcisnąć enter.
d) Przy zapytaniu o hasło (password) podać podyplom i wcisnąć enter (podczas
wprowadzania hasła nie pokazują się żadne znaki).
e) Po zalogowaniu się uruchomić program mc (komenda mc i enter)
f) Przejść do katalogu public_html.
g) Utworzyć nowy plik (Shift+F4)
h) Wprowadzić treść poniższego skryptu
<html>
<head>
<title>Przykład</title>
</head>
<body>
<?php
echo "Cześć! Jestem skryptem PHP!";
?>
</body>
</html>
i) Zapisać plik (klawisz F2) pod nazwą nazwisko.php
i) Uruchomić przeglądarkę (Internet Explorer) i wprowadzić adres:
http://dendrit.issi.uz.zgora.pl/~podyplom/nazwisko.php
2. Tworzenie połączenia z bazą danych z poziomu PHP
Gdy interpreter PHP poprawnie ładuje rozszerzenia skryptom komunikowanie się z
wybranymi bazami danych, możemy rozpocząć tworzenie skryptów, które operują na bazach
danych.
2.1 Połączenie z serwerem MySQL
Nawiązanie połączenia z serwerem bazy danych MySQL umożliwia funkcja: mysql_connect:
<? php
$id = mysql_connect (‘127.0.0.1’, ‘user’, ‘haslo’);
echo ($id);
?>
Serwerem bazy danych jest host o numerze 127.0.0.1 (localhost). Użytkownik bazy danych to
user, a jego hasło to haslo.
W przeglądarce WWW powinien pojawić się napis: resource id # 1.
Jeżeli użyjemy ponownie instrukcji mysql_connect (‘127.0.0.1’, ‘user’, ‘haslo’); to
interpreter nie utworzy nowego połączenia, lecz zwróci identyfikator połączenia, które już
istnieje, dzięki czemu oszczędzane są zasoby komputera.
Po nawiązaniu połączenia z serwerem bazy danych, będzie ono trwało dopóki nie zostanie
zakończony skrypt, który zainicjował połączenie, lub jeśli nie zostanie zamknięty funkcją
mysql_close().
<? php
bool mysql_close ([resource identyfikator]);
?>
Jeżeli argument funkcji mysql_close() nie zostanie podany, funkcja zamyka ostatnie
utworzone połączenie.
Jeżeli interpreter PHP nie będzie mógł nawiązać połączenia z serwerem bazy danych to
pojawi się komunikat o błędzie:
Warning: mysql_connect () [function mysql_connect ()] : Can’t connect to MySQL serwer on
‘127.0.0.1’ in skrypt. php on line 1
Dodatkowo funkcja zwróci wartość false zamiast identyfikatora połączeń.
2.2. Przesyłanie zapytań do bazy danych
Jeśli skrypt PHP uzyska połączenie z serwerem bazy danych, można rozpocząć komunikacje
z serwerem za pomocą języka SQL. W PHP do wykonania zapytań języka SQL służy funkcja
mysql_query()
<? php
resource mysql_query(string query [. resource identyfikator] );
?>
Metoda mysql_query() wysyła zapytanie SQL podane jako argument query do serwera
MySQL, w którym połączenie jest identyfikowane przez argument identyfikator.
Jeśli brakuje identyfikatora, wykonanie funkcji mysql_query() dotyczy ostatnio otwartego
połączenia.
2.3. Tworzenie nowej bazy danych i tabel
<? php
if (!mysql_query (‘create database moja_baza ‘)) {
exit (‘Wystapil blad numer (‘.mysql_errno(). ‘): <b> ‘ .mysql_error(). </b>’);
}
?>
Usunięcie bazy danych
<? php
if (!mysql_query (‘ drop database moja_baza ‘)) {
exit (‘Wystapil blad numer (‘.mysql_errno(). ‘): <b> ‘ .mysql_error(). </b>’);
}
?>
Tworzenie bazy danych z tworzeniem tabel
Zdefiniujmy funkcje wykonującą zapytania SQL do bazy MySQL:
<? Php
// Funkcja wykonującą zapytania SQL do bazy MySQL:
function zapytanie ($string_zapytania)
{
if (!mysql_query ($string_zapytania)) {
exit (‘Wystapil blad numer (‘.mysql_errno(). ‘): <b> ‘ .mysql_error(). </b>’);
}
}
?>
Nawiązanie połączenia z serwerem bazy danych MySQL umożliwia funkcja: mysql_connect:
<? php
$id = mysql_connect (‘127.0.0.1’, ‘user’, ‘’);
echo ($id);
?>
Utworzenie bazy
<? php
zapytanie (‘create database moja_baza ‘);
?>
Wybranie bazy ‘moja baza’ jako bieżącej bazy danych
<? php
zapytanie (‘use moja_baza ‘);
?>
Utworzenie tabel:
marka_sam (id int PRIMARY KEY, nazwa varchar(20) NOT NULL, kraj varchar(35) NOT
NULL, data_zal char(4))’
model ( id int PRIMARY KEY, nazwa varchar(20) NOT NULL, moc int NOT NULL,
moment int NOT NULL, t yp varchar(20) NOT NULL, id_marki int )
<? php
zapytanie (‘Create table marka_sam (id int PRIMARY KEY, nazwa varchar(20) NOT NULL,
kraj varchar(35) NOT NULL, data_zal char (4))’);
?>
<? php
zapytanie (‘Create table model ( id int PRIMARY KEY, nazwa varchar(20) NOT NULL,
moc int NOT NULL, moment int NOT NULL, t yp varchar(20) NOT NULL, id_marki int
references marka_sam (id))’);
);
?>
2.4. Wprowadzenie danych do tabeli marka_sam
<? php
zapytanie (” Insert into marka_sam (id , nazwa, kraj, data_zal ) values (1, ‘AUDI’, ‘Niemcy’,
‘1960’)” );
zapytanie (” Insert into marka_sam (id , nazwa, kraj, data_zal ) values (2, ‘BMW’, ‘Niemcy’,
‘1930’)” );
zapytanie (” Insert into marka_sam (id , nazwa, kraj, data_zal ) values (3, ‘Fiat’, ‘Włochy’,
‘1920’)” );
?>
2.5. Pobieranie informacji z bazy danych MySQL
Funkcja mysql_query() może zwrócić obiekt typu resorce, gdy wynikiem zapytania SQL (np.
zapytanie typu select będzie zbiór rekordów, które zwróci serwer MySQL. Aby uzyskać
dostęp do informacji należy skorzystać z funkcji z grupy mysql_fetach
Zdefiniujmy skrypt wyświetlające informacje pobrane z bazy MySQL
<html>
<head>
<title > Skrypt </title>
<head>
<body>
<? php
// Funkcja wykonującą zapytania SQL do bazy MySQL i zwracająca wynik:
function zapytanie_wynik($string_zapytania)
{
if (!$rezultat = mysql_query ($string_zapytania)) {
exit (‘Wystapil blad numer (‘.mysql_errno(). ‘): <b> ‘ .mysql_error(). </b>’);
}
return $rezultat;
}
?>
zapytanie_wynik(‘use moja_baza);
//wybor bazy danych dla dalszych operacji
$wynik_sql = zapytanie_wynik(‘Select * From marka_sam’ );
// *** Tutaj należy wstawiać kolejno różne postacie funkcji mysql_fetch_...( ) określone
w następnych punktach
</body>
</html>
Wyświetlanie wyników zapytania z zastosowaniem funkcji mysql_fetch_row( )
<? php
echo (‘ table border =”0”>’);
echo (‘<tr> <td colspan = “2” > <b> Wyniki </b> </td> < /tr>’);
while ($row = mysql_fetch_row( $wynik_sql)) {
echo (‘<tr> <td> align = ”right” > Id : </td> <td>’ .$row[0]. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Nazwa : </td> <td>’ .$row[1]. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Kraj : </td> <td>’ .$row[2]. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Data_zalozenia : </td> <td>’ .$row[3]. ‘</td> </tr>’);
echo (‘<tr> <td colspan = “2” > &nbsp; </td> < /tr>’);
}
echo (‘</table>’);
?>
W miejsce *** wstaw powyższy kod aby zobaczyć działanie funkcji mysql_fetch_row( )
Wyświetlanie wyników zapytania z zastosowaniem funkcji mysql_fetch_assoc( )
<? php
echo (‘ table border =”0”>’);
echo (‘<tr> <td colspan = “2” > <b> Wyniki </b> </td> < /tr>’);
while ($row = mysql_fetch_assoc( $wynik_sql)) {
echo (‘<tr> <td> align = ”right” > Id : </td> <td>’ .$row[‘id’]. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Nazwa : </td> <td>’ .$row[‘Nazwa’]. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Kraj : </td> <td>’ .$row[‘kraj’]. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Data_zalozenia : </td> <td>’ .$row[‘data_zal’]. ‘</td>
</tr>’);
echo (‘<tr> <td colspan = “2” > &nbsp; </td> < /tr>’);
}
echo (‘</table>’);
?>
W miejsce *** wstaw powyższy kod aby zobaczyć działanie funkcji mysql_fetch_assoc( )
Wyświetlanie wyników zapytania z zastosowaniem funkcji mysql_fetch_array( )
<? php
echo (‘ table border =”0”>’);
echo (‘<tr> <td colspan = “2” > <b> Wyniki </b> </td> < /tr>’);
while ($row = mysql_fetch_array( $wynik_sql, MySQL_ASSOC)) {
echo (‘<tr> <td> align = ”right” > Id : </td> <td>’ .$row[‘id’]. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Nazwa : </td> <td>’ .$row[‘Nazwa’]. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Kraj : </td> <td>’ .$row[‘kraj’]. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Data_zalozenia : </td> <td>’ .$row[‘data_zal’]. ‘</td>
</tr>’);
echo (‘<tr> <td colspan = “2” > &nbsp; </td> < /tr>’);
}
echo (‘</table>’);
?>
W miejsce *** wstaw powyższy kod aby zobaczyć działanie funkcji mysql_fetch_array( )
Wyświetlanie wyników zapytania z zastosowaniem funkcji mysql_fetch_object( )
<? php
echo (‘ table border =”0”>’);
echo (‘<tr> <td colspan = “2” > <b> Wyniki </b> </td> < /tr>’);
while ($row = mysql_fetch_object( $wynik_sql)) {
echo (‘<tr> <td> align = ”right” > Id : </td> <td>’ .$row->id. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Nazwa : </td> <td>’ .$row->Nazwa. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Kraj : </td> <td>’ .$row->kraj. ‘</td> </tr>’);
echo (‘<tr> <td> align = ”right” > Data_zalozenia : </td> <td>’ .$row->data_zal. ‘</td>
</tr>’);
echo (‘<tr> <td colspan = “2” > &nbsp; </td> < /tr>’);
}
echo (‘</table>’);
?>
W miejsce *** wstaw powyższy kod aby zobaczyć działanie funkcji mysql_fetch_object( )
Dodatkowe informacje o uzyskiwanych danych
Funkcja:
mysql_num_row() – określa liczbę zawartą w wyniku zapytania
<? php
mysql_connect (‘127.0.0.1’, ‘user’, ‘haslo’);
mysql_query (‘use moja_baza ‘);
$wynik_sql = mysql_query(‘Select * From marka_sam’);
ech(‘ Zwrócono ’. mysql_num_rows ($wynik_sql). ’rekordy/krotki’ );
?>
Wynikiem wykonania skryptu jest tekst – Zwrócono 3 rekordy/krotki
Funkcja:
mysql_num_fields() – określa liczbę pól zawartą w rekordach będących wynikiem zapytania
<? php
mysql_connect (‘127.0.0.1’, ‘user’, ‘haslo’);
mysql_query (‘use moja_baza ‘);
$wynik_sql = mysql_query(‘Select * From marka_sam’);
ech(‘ Rekord danych zawiera ’. mysql_num_fields ($wynik_sql). ’pola’ );
?>
Wynikiem wykonania skryptu jest tekst – Rekord danych zawiera 4 pola
Funkcja:
mysql_num_name() – określa nazwę pola rekordu danych będących wynikiem zapytania
<? php
mysql_connect (‘127.0.0.1’, ‘user’, ‘haslo’);
mysql_query (‘use moja_baza ‘);
$wynik_sql = mysql_query(‘Select * From marka_sam’);
ech(‘ Nazwa pola o indeksie 1 to ” ’. mysql_num_name ($wynik_sql, 1). ’ ” ’ );
?>
Wynikiem wykonania skryptu jest tekst – Nazwa pola o indeksie 1 to ”nazwa”
Funkcja:
mysql_num_type() – określa typ pola rekordu danych będących wynikiem zapytania
<? php
mysql_connect (‘127.0.0.1’, ‘user’, ‘haslo’);
mysql_query (‘use moja_baza ‘);
$wynik_sql = mysql_query(‘Select * From marka_sam’);
ech(‘ Typ pola o indeksie 1 to ” ’. mysql_num_type ($wynik_sql, 1). ’ ” ’ );
?>
Wynikiem wykonania skryptu jest tekst – Typ pola o indeksie 1 to string
3. Tworzenie formularza
marka_sam
umożliwjającego
dodawanie
danych
do
relacji
<?php
if (isset($HTTP_POST_VARS['tekst1'])) {
$con = mysql_connect("localhost","podyplom","podyplom");
mysql_select_db("db_podyplom");
$result = mysql_query("insert into marka_sam (id, nazwa, kraj, data_zal) values
('".$HTTP_POST_VARS['tekst1']."', '".$HTTP_POST_VARS['tekst2']."',
'".$HTTP_POST_VARS['tekst3']."','".$HTTP_POST_VARS['tekst4']."')");
mysql_close($con);
}
?><html>
<body>
<?php
$con = mysql_connect("localhost","podyplom","podyplom");
mysql_select_db("db_podyplom");
$result = mysql_query("select * from testowa");
while (($linia = mysql_fetch_array($result))) {
echo "id: ".$linia['id'].". ".$linia['tekst']."</br>\n";
}
?>
<form method=POST>
Id: <input type=text name=tekst1>
Nazwa: <input type=text name=tekst2>
Kraj : <input type=text name=tekst3>
Rok założenia : <input type=text name=tekst4> <input type=submit value="dodaj">
</form>
</body>
</html>
Literatura:
[1] Lis M., PHP i MySQL. Dla każdego, Wydawnictwo Helion 2005
[2] Hugh E. Williams, David Lane, PHP i MySQL. Aplikacje bazodanowe, Wydawnictwo
Helion 2005
[3] Bowman J.S., Emerson S.L., Darnovsky M., Podręcznik języka SQL, WNT Warszawa,
2001
[4] Converse T. , Park J. , PHP5 i MySQL. Biblia, Wydawnictwo Helion 2005

Podobne dokumenty