Ćwiczenie 8 - Wykorzystanie bazy MYSQL w skrypcie PHP
Transkrypt
Ćwiczenie 8 - Wykorzystanie bazy MYSQL w skrypcie PHP
Systemy teleinformatyczne –AiR Ćwiczenie 8 - Wykorzystanie bazy MYSQL w skrypcie PHP Instrukcje PHP dostępu do danych w bazie MYSQL mysql_connect(host,user,password) Funkcja - zwraca uchwyt do zasobu, zmienna typu logicznego – tzw. resource id lub false Przykład: $connection= @mysql_connect('localhost', $user, $password) or die ("Nie udało się"); if ($connection) echo "Połączyłeś się z bazą "; Można pominąć wyświetlenie komunikatu błędu poprzedzając nazwę funkcji znakiem @ die(text) jest równoważne exit( ) ; mysql_select_db(nazwa_bazy); Wybór bazy - parametrem jest nazwa bazy Przykład: mysql_select_db('ksiegarnia'); TWORZENIE ZMIENNEJ ZAPYTANIA – łańcuch tekstowy Przykład kwerendy z klauzulą WHERE – wybór książek autora wybranego z formularza: $query="SELECT id_ks, autor, tytul, cena FROM ksiazki WHERE autor LIKE '%".$_POST['autor']."';"; mysql_query (SQLstring) - wykonanie kwerendy Funkcja - wysyła zapytanie do aktywnej bazy na serwerze skojarzonym z podanym identyfikatorem połączenia parametrem jest tekst prawidłowego zapytania MySQL (CREATE, SELECT, UPDATE, DLETE, ALTER, DROP – wyjaśnienia i przykłady w materiałach wykładowych). Funkcja mysql_query() zwraca identyfikator wyniku (lub FALSE w przypadku niepowodzenia) jedynie dla zapytań typu SELECT (także SHOW, EXPLAIN i DESCRIBE). Przykład: $query="select autor, tytul FROM ksiazki"; $wynik =mysql_query($query); mysql_num_rows($wynik) Funkcja – zwraca liczbę znalezionych rekordów zapytaniem SELECT- parametrem jest wartość zmiennej rezultatu $wynik funkcji mysql_query(). Aby pobrać ilość wierszy przetworzonych w operacjach INSERT, UPDATE lub DELETE należy użyć funkcji mysql_affected_rows(). Przykład: $ile = mysql_num_rows($wynik); echo "Rekordów: $ile <BR>"; mysql_fetch_array($wynik) Funkcja – zwraca tablicę rekordów - parametrem jest zmienna rezultatu zapytania SQL. Pobiera jeden wiersz danych z wyniku skojarzonego z podanym identyfikatorem zawartym w zmiennej $wynik zwraca tablicę zawierającą wiersz (rekord) lub FALSE (jeżeli nie ma więcej wierszy w wynik),. Wiesz zwracany jest jako tablica. Komórki są umieszczone pod indeksami numerycznymi zaczynając od 0, lub asocjacyjnymi (jak nazwy pól w tabeli bazodanowej). Kolejne wywołanie mysql_fetch_array ($wynik) zwróci następny wiersz z wyniku (lub FALSE jeżeli nie ma więcej wierszy). mysql_close ($connection) Funkcja zamykająca połączenie z bazą. Parametrem jest uchwyt połączenia – zmiennej będącej rezultatem funkcji mysql_connect. mysql_data_seek($wynik,0); Przewinięcie zasobu wyniku na początek Zarządzanie zmiennymi - konwersja $autor=trim($autor); //obcięcie spacji $cena_od=(float)$cena_od; //rzutowanie na typ rzeczywisty $cena_od=doubleval($cena_od); // tak też można Ćwiczenie 1. Utworzyć tabele w swojej bazie danych (na lokalnym serwerze tworzymy nową bazę, na serwerze zdalnym tabele w bazie studenta): KSIAZKI (id_ks, autor, tytul, id_k) KATEGORIE (id_kat, nazwa) Uwaga: Nazwy kategorii to np.: beletrystyka, historyczne, fantastyka itp. id_k w tabeli KSIAZKI to klucz obcy – typu INT – każdej książce przyporządkowujemy jeden z typów w postaci liczby będącej kluczem głównym kategorii z tabeli KATEGORIE. 2. Utworzyć formularz z wyborem autora (pole tekstowe) i rozwijanym polem SELECT, w którym po kontakcie z bazą otrzymamy spis kategorii. Schemat skryptu: <form method="POST" action="wybor.php"> <?php $db = mysql_connect('localhost','student01','S@moloty'); if (!$db) { echo "<B>Brak polaczenia z baza danych !"; exit; } mysql_select_db('student01'); //dodatkowe kwerendy – jeśli w bazie dla pól tekstowych // wybrano metodę porównywania napisów utf8_general_ci mysql_query ("SET NAMES 'utf8'"); mysql_query ("SET CHARACTER SET 'latin2'"); $query = "SELECT id_kat, nazwa from kategorie"; $wynik = mysql_query($query); $ile = mysql_num_rows($wynik); echo "<SELECT name='kategoria'>"; //pusta kategoria echo "<option value='0'></option>"; //wypełnianie kategorii for ($x=1;$x<=$ile;$x++) { $wiersz=mysql_fetch_array($wynik); echo "<option value='". $wiersz['id_kat']."'>".$wiersz['nazwa']."</option>"; } echo "</select></font>"; ?> Autor:<INPUT type='text' name='autor'> <input type="submit" value="Szukaj" name="B1"> </form> 3. Samodzielnie utworzyć plik wybor.php, w którym wypisane zostaną: a. dane wszystkich książek, b. dane książki z wybranej w formularzu kategorii, c. książki wybranego w formularzu autora (fragment nazwiska), d. książki wybranej kategorii i autora (koniunkcja warunków). Wskazówki: Wykorzystać dane przekazane w tablicy $_POST. Warunkować postać kwerendy w zależności od charakteru filtru. Kwerendę oprzeć na poniższym przykładzie: $q="SELECT id_ks, autor, tytul, cena FROM ksiazki WHERE autor like '".$_POST['autor']."' AND id_k=".$_POST['kategoria']; 4. Opracować formę wyprowadzonych wyników (ew. w tabeli, rozmiar czcionki itp.) 5. Dodać do tabeli ksiazki pole cena. Zmodyfikować skrypty o dodatkowe filtrowanie według przedziału cen. 6. Bazując na opracowanym uprzednio pliku z formularzem, w którym są umieszczone: a. Pole (SELECT) wyboru kategorii książki, wypełniane spisem kategorii z tabeli bazodanowej Kategorie z dodatkową pozycją „Wszystkie”. b. Pole (INPUT typu tekst) do wpisania frazy (fragmentu) nazwiska autora. c. Pole (INPUT typu tekst) do wpisania frazy tytułu książki. d. Przycisk (INPUT typu SUBMIT) odsyłający do pliku wybor.php utworzyć plik wybor.php, w którym wypisane zostaną: a. b. c. d. dane wszystkich książek dane książki z wybranej w formularzu kategorii, książki wybranego w formularzu autora (fragment nazwiska), książki wybranej kategorii i autora (koniunkcja warunków). Wskazówki: Wykorzystać dane przekazane w tablicy $_POST. Warunkować postać kwerendy w zależności od charakteru filtru. Kwerendę oprzeć na poniższym przykładzie: $q="SELECT id_ks, autor, tytul FROM ksiazki WHERE autor like '%".$_POST['autor']."%' AND id_k=".$_POST['kategoria']; 7. Dodać do tabeli ksiazki pole cena. Zmodyfikować skrypty o dodatkowe filtrowanie według przedziału cen. 8. Opracować odpowiednią formę wyprowadzonych wyników (ew. w tabeli, rozmiar czcionki itp.). 9. Przy wybranej na formularzu kategorii „Wszystkie” i filtrowaniu jedynie według nazwiska autora bądź tytułu, wyświetlić także nazwę kategorii przy znalezionej książce. Zastosować tu dodatkowy warunek klauzuli WHERE : SELECT autor, tytul, cena, nazwa_kat FROM ksiazki, kategorie WHERE ................................ … AND ksiazki.id_kat=kategorie.id.kat realizujący złączenie tabel. 10. Przetestować gotowy projekt pod względem prawidłowego działania wszystkich kombinacji filtrowania. 11. Wypróbować eksport bazy i plików na konto serwera Zakładu Informatyki i zabezpieczyć prawidłowe działanie projektu.