Wydział Informatyki Politechnika Białostocka Zaawansowane bazy danych i hurtownie danych MySQL studia zaoczne II stopnia, sem. I Plan wykładu 1. MySQL: funkcje, procedury, wyzwalacze 2. HTML : tworzenie formularzy 3. PHP: przetwarzanie formularzy WYKŁAD 4: Agnieszka Oniśko, Małgorzata Krętowska Tworzenie procedury Tworzenie funkcji CREATE [DEFINER = { użytkownik CURRENT_USER ] PROCEDURE nazwa ([parametery[,...]]) [charakterystyka...] ciało procedury parametry: [ IN OUT INOUT ] charakterystyka: LANGUAGE SQL [NOT] DETERMINISTIC { CONTAINS SQL NO SQL READS SQL DATA MODIFIES SQL DATA SQL SECURITY { DEFINER INVOKER COMMENT CREATE [DEFINER = { użytkownik CURRENT_USER ] FUNCTION nazwa ([parametery[,...]]) RETURNS typ_danych [charakterystyka...] ciało funkcji parametry: [ IN OUT INOUT ] charakterystyka: LANGUAGE SQL [NOT] DETERMINISTIC { CONTAINS SQL NO SQL READS SQL DATA MODIFIES SQL DATA SQL SECURITY { DEFINER INVOKER COMMENT
Charakterystyka LANGUAGE SQL w jakim języku jest pisany kod (serwer ignoruje tą charakterystykę, tylko SQL jest dopuszczalny) COMMENT opis procedury lub funkcji DETERMINISTIC jeżeli, dla tych samych danych wejściowych generowany jest jednakowy wynik (np. nie zawiera funkcji now(), rand()) CONTAINS SQL gdy procedura (funkcja) nie czyta ani nie zapisuje danych NO SQL nie zawiera elementów SQL READS SQL DATA zawiera polecenia czytające dane (np. SELECT) MODIFIES SQL DATA zawiera polecenie zapisujące dane (np. INSERT, DELETE) SQL SECURITY { DEFINER INVOKER jakie uprawnienia są dostępne podczas uruchomienia procedury osoby, która ją pisała czy tej, która uruchamia. Procedura: Przykład CREATE PROCEDURE prosta_procedura (OUT parametr INT) BEGIN SELECT COUNT(*) INTO parametr FROM Kategoria; END; CALL prosta_procedura(@a); Funkcja: Przykład Wyzwalacze CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN CONCAT('Hello, ',s,'!'); SELECT hello('world'); CREATE [DEFINER = { użytkownik CURRENT_USER ] TRIGGER nazwa BEFORE AFTER INSERT UPDATE DELETE ON tabela FOR EACH ROW ciało wyzwalacza
Wyzwalacze New.nazwa_kolumny alias new. dostępny jest przy wyzwalaczu związanym z insert lub update. Dostęp do nowego wiersza Old.nazwa_kolumny dostępny przy update i delete. Dostęp do istniejącego wiersza. Wyzwalacze: Przykład I CREATE TRIGGER ustaw_date BEFORE INSERT ON Zamowienia FOR EACH ROW BEGIN SET new.data_zamowienie = now(); END; Formularze HTML Praca z formularzami sieciowymi składa się z dwóch etapów: 1. Utworzenie formularza HTML 2. Przetworzenie informacji podanych w formularzu Prosty formularz HTML <html><title><prosty formularz></title> <form> Podaj imię? <input type="text" name="myname"> <input type="submit" value="wyślij">
Metody żądania HTTP Przykład wykorzystania metody POST Metoda GET Metoda domyślna Głównie pobieranie statycznych dokumentów HTML, obrazów lub wyników zapytania do bazy danych Wysyłanie danych do serwera poprzez dołączenie ich na końcu adresu URL Ograniczona ilość przesyłanej informacji Metoda POST Wywoływana przez dodanie atrybutu METHOD do znacznika <form> Używana wówczas, gdy przetwarzanie danych z formularza ma pewne efekty uboczne np. modyfikację bazy, uaktualnienie koszyka zakupów Dane są umieszczane w nagłówku głównej wiadomości HTTP Brak ograniczeń dotyczących wielkości przesyłanej informacji <html><title><prosty formularz></title> <form METHOD="POST"> Podaj swoje imię? <input type="text" name="myname"> <input type="submit" value="wyślij"> Formularz HTML kolejne kroki Początek. Znacznik HTM <form> Akcja. Atrybut action znacznika <form> jest adresem URL skryptu PHP Metoda. Podanie metody HTTP odpowiedzialnej za przetworzenie danych wejściowych (domyślnie GET) Tworzenie. Utworzenie formularza (przyciski, pola, itp.) Wysłanie. Utworzenie przycisku wysyłającego formularz sieciowy (uruchomienie programu z atrybutu action) Koniec. Zakończenie formularza znacznikiem Przykład <html> <head> <title>pierwszy formularz HTML</title> </head> <body bgcolor=yellow> <hr /> <form action="listing10.3.php" method="get"> <b>podaj swoje imię: </b> <input type="text" name="namestring" size="50"> <p/><b>napisz kilka słów o sobie: </b> <textarea name="comments" rows="5" cols="50">urodziłem się... </textarea>
Przykład cd. <p/><b>wybierz preferowany posiłek: </b> <input type="radio" name="choice" value="burger" />Hamburger <input type="radio" name="choice" value="fish" />Ryby <input type="radio" name="choice" value="steak" />Stek <input type="radio" name="choice" value="yogurt" />Jogurt <p /> <b>gdzie chciałbyś pracować?</b> <input type="checkbox" name="place1" value="la" />Los Angeles <input type="checkbox" name="place2" value="sj" />San Jose <input type="checkbox" name="place3" value="sf" Checked>San Francisco<p/> Przykład cd. <b>gdzie chciałbyś spędzić wakacje? </b> <select name="location"> <option selected value="hawaii" /> Hawaje <option value="bali" />Bali <option value="maine" />Maine <option value="paris" />Paryż </select> <p/> <input type="submit" value="wyślij"> </p> <input type="reset" value="wyczyść"> <hr /> Przykład cd. Przycisk Wyślij powoduje utworzenie następującego ciągu tekstowego: http://dbserver.wi.pb.edu.pl/~aonisko/listing10.3.php?namestring= Jan+Kowalski&comments=Urodzilem+sie+w+Bialymstoku.&cho ice=burger&place1=la&location=paris PHP i formularze Dane przekazane z formularza do skryptu PHP są w nim dostępne poprzez tablice superglobalne: $_GET - zmienne przekazywane poprzez metodę HTTP GET $_POST zmienne przekazywane poprzez metodę HTTP POST $_REQUEST zmienne dostarczane do pliku poprzez metodę GET, POST oraz COOKIE (niezbyt bezpieczna opcja) $_SERVER[ REQUEST_METHOD ] pozwala sprawdzić, jaka metoda przesyłania danych została wykorzystana If ($_SERVER[ REQUEST_METHOD ] == GET ) {ciąg poleceń If ($_SERVER[ REQUEST_METHOD ] == POST ) {ciąg poleceń
Przykład plik HTML Przykład cd tablica $_GET <html><head><title>formularz HTML Form</title></head> <body bgcolor="#9999cc"> <font face="verdana" size="+1"> <form action="mk_plik2.php" method="get"> Proszę podać imię: <input type="text" size=50 name="your_name" /> Proszę podać numer telefonu: <input type="text" size=50 name="your_phone" /> Proszę podać adres e-mail: <input type="text" size=50 name="your_email_addr" /> <input type="submit" value="wyslij" /> <input type="reset" value="wyczysc" /> <hr /> <html><head><title>przetwarzanie formularza</title> </head> // Używane są tablice superglobalne. echo 'Nazwisko: '.$_GET['your_name'].''; echo 'Numer telefonu: '.$_GET['your_phone'].''; echo 'email: '.$_GET['your_email_addr'].''; Przykład cd. tablica $_REQUEST Przykład cd funkcja extract() <html><head><title>przetwarzanie formularza</title> </head> <h3>zawartosc tablicy $_REQUEST</h3> foreach($_request as $klucz=>$wartosc) { echo "$klucz => $wartosc "; <html><head><title>przetwarzanie formularza</title> </head> <h3>działanie funkcji extract()</h3> extract($_request); echo 'Nazwisko: '.$your_name.''; echo 'Numer telefonu: '.$your_phone.''; echo 'email: '.$your_email_addr.'';
Przykład cd. tablica $_POST Dokument HTML (zmiany) <form action="mk_plik2.php" method="post"> <input type="submit" name="send" value="wyslij" /> Skrypt PHP <html><head><title>przetwarzanie formularza</title></head> <h3>tablica $_POST()</h3> if(!empty($_get)){ //obsługa tylko metody POST die('nieprawidlowy parametr. Prosze sprobowac ponownie. '); if($_post['send']=='wyslij') { // spr czy nacisnieto przycisk Wyslij echo 'Nazwisko: '.$_POST['your_name'].''; echo 'Numer telefonu: '.$_POST['your_phone'].''; echo 'email: '.$_POST['your_email_addr'].''; Lista wyboru Formularz HTML <html><head><title>lista wyboru</title></head> <body bgcolor="aqua"> <form action="mk_plik2.php" method="post"> <b>wybierz miejsce spędzania wakacji:</b> <select name="location[]" multiple="multiple"> <option>białystok <option>kraków <option>zakopane <option>sopot </select> <input type="submit" value="wyslij" /> <input type="reset" value="wyczysc" /> Przetwarzanie listy wyboru <html><head><title>przetwarzanie listy wyboru</title></head> <body bgcolor="8cccca"> <fieldset><legend><b>wybrane miejsca na spędzanie wakacji</b></legend> if (is_array($_post['location'])){ print '<ul>'; foreach ($_POST['location'] as $key=>$value){ print "<li>$key=>$value</li>"; print '</ul>'; </fieldset> Checkbox <html><head><title>lista wyboru</title></head> <body bgcolor="aqua"> <form action="mk_plik2.php" method="post"> <b>wybierz miasto:</b> <input type="checkbox" name="place[]" value="krakow" />Kraków <input type="checkbox" name="place[]" value="warszawa" />Warszawa <input type="checkbox" name="place[]" value="bialystok" />Białystok <input type="checkbox" name="place[]" value="zakopane" />Zakopane <input type="checkbox" name="place[]" value="poznan" Checked />Poznań <input type="submit" value="wyslij" /> <input type="reset" value="wyczysc" />
Checkbox - przetwarzanie <html><head><title>checkbox - przetwarzanie</title></head> <body bgcolor="8cccca"> </fieldset> <fieldset><legend><b>wybrane miasta</b></legend> extract($_post); if (is_array($place)){ print '<ul>'; foreach ($place as $key=>$value){ print "<li>$key=>$value</li>"; print '</ul>'; </fieldset> Przetwarzanie formularzy w dokumencie HTML bool isset(zmienna, ) sprawdza, czy zmiennej jest przypisana wartość i czy nie jest NULL. $var = ''; if (isset($var)) { //TRUE echo "Napis sie pojawi. Zmienna ma przypisaną wartość"; $var1 = NULL; if(isset($var1)){ // FALSE echo "Napis sie nie pojawi. Zmienna ma wartość NULL"; $_SERVER[ PHP_SELF ] ścieżka dostępu do aktualnie wykonywanego skryptu Przykład if (isset($_post['submit'])){ // Czy formularz został wysłany? $your_name = $_POST['your_name']; $your_phone = $_POST['your_phone']; print "<b>twoje imię to $your_name"; print "Twój numer telefonu to $your_phone"; print 'Scieżka dostępu do tego pliku to: '. $_SERVER['PHP_SELF'].""; else { <html><head><title>pierwszy formularz HTML</title></head> <body bgcolor="lightblue"><font size="+1"> <form action=" echo $_SERVER['PHP_SELF']; method="post"> <p /> Proszę podać imię: <input type="text" size=50 name="your_name" /> <p /> Proszę podać numer telefonu: <input type="text" size=50 name="your_phone" /> <p /> <input type="submit" name="submit" value="wyslij teraz" /> <input type=reset value="wyczysc"> <hr />