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” > </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” > </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” > </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” > </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