Ć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.

Podobne dokumenty