ZSEiO w Krośnie
|
TECHNIK INFORMATYK
|
|||
|
|
||||
Lekcja nr:
|
6
|
Nazwa
przedmiotu:
|
||
Temat:
Połączenie skryptu z bazą danych MySQL
|
Czas trwanie 45 min |
|||
|
Autor materiałów:
dr Marcin Skuba |
||||
1.
Treści programowe:
Język PHP, baza
danych MySQL, łączenie z bazą, tworzenie zapytań SQL, odbieranie i
przetwarzanie odpowiedzi
2.
Cel zajęć:
Celem zajęć jest
nabycie umiejętności programowania skryptów łączących się z bazą danych MySQL,
wyciąganie wybranych danych oraz przetwarzanie ich w skrypcie PHP.
3.
Materiały dydaktyczne
Poniższy przykład przedstawia program, który pobiera
dane użytkownika z bazy danych na podstawie numeru ID wprowadzonego w
formularzu. Użyjemy do tego proceduralnego interfejsu MySQLi, który często pojawia się w materiałach
dydaktycznych technikum. Cała logika (formularz i skrypt PHP) będzie znajdować
się w jednym pliku.
Widok strony z formularzem:

Krok 1: Struktura bazy danych
Załóżmy, że mamy bazę danych o nazwie szkola i tabelę uczniowie z następującymi kolumnami:
Krok 2: Kod
programu w jednym pliku
W tym przykładnie nazwa pliku nie ma większego
znaczenia. Musi być utworzony wg obowiązujących zasad nazywania plików.
Ten przykład przedstawia pobieranie jednego rekordu.


Opis działania powyższego kodu:
1.
Formularz HTML: Użytkownik wprowadza numer ID w polu <input
type="number">.
Po naciśnięciu przycisku "Wyszukaj", formularz wysyła dane metodą
POST do tego samego pliku (action=””). Jeśli chcemy przekierować do konkretnego pliku w
atrybucie action piszemy nazwę pliku.
2.
Sprawdzenie wysłania danych: Linia if (isset($_POST['id_ucznia'])) sprawdza, czy formularz został wysłany i czy w
zmiennej $_POST istnieje klucz id_ucznia. Cały kod PHP jest
wykonywany tylko wtedy, gdy ten warunek jest spełniony. Znaczy to że przy
pierwszym uruchomieniu strony skrypt się nie wykona ponieważ dane z formularza
jeszcze nie będą znane.
3.
Połączenie z bazą danych: Funkcja mysqli_connect() próbuje nawiązać połączenie.
Jej argumenty to kolejno: serwer, użytkownik, hasło i nazwa bazy danych. Jeśli połączenie się
nie uda, skrypt zostanie przerwany.
4.
mysqli_query():
Ta funkcja jest używana do wykonania całego, już
sformułowanego zapytania SQL. Pobiera dwa argumenty: obiekt połączenia i
ciąg zapytania.
5.
mysqli_num_rows(): Po wykonaniu zapytania, ta funkcja zlicza, ile
rekordów zostało zwróconych.
6.
mysqli_fetch_assoc():
Jeśli liczba rekordów jest większa od zera, ta
funkcja pobiera pierwszy rekord z wyników i zwraca go jako
tablicę asocjacyjną (tylko nazwy kolumn jako klucze)..
Inne
funkcje zwracające tablice z zapytania ze zmiennej reprezentującej wynik:
· mysqli_fetch_array() –
zwraca wiersz wyniku jako tablicę, w której dane są dostępne zarówno po nazwach kolumn, jak
i indeksach numerycznych.
· mysqli_fetch_row() –
zwraca wiersz jako tablicę numeryczną (tylko
indeksy liczbowe).
7.
Zwolnienie zasobów:
mysqli_free_result($wynik)
- zwalnia z pamięci zasoby zajmowane
przez wynik zapytania SQL, który został pobrany np. przez mysqli_query(),
mysqli_close() - kończy połączenie utworzone wcześniej przez mysqli_connect(), zwalniając zasoby serwera i pamięci.
Funkcja die(String text); - wyświetla
komunikat oraz przerywa wykonanie skryptu. W powyższym programie wyświetla
komunikat o błędzie i kończy skrypt:
![]()
Uwaga użycie funkcji mysqli_query
jest dopuszczalne na egzaminie ale należy wiedzieć kilka szczegółów o tej
funkcji.
Bezpośrednie wstawienie danych: W
linii $zapytanie_sql = "SELECT ... WHERE id = '$id_ucznia'", wartość zmiennej $id_ucznia jest
wstawiana bezpośrednio do zapytania SQL. Właśnie to sprawia, że ten kod jest niebezpieczny. Jeśli
użytkownik wpisze 5 OR 1=1, zapytanie zostanie zmienione na SELECT...WHERE id =
'5 OR 1=1', a baza danych może wykonać złośliwy kod. Nazywa się to
wstrzykiwanie SQL-a.
PONIŻSZY PRZYKŁAD PRZEDSTAWIA BEZPIECZNE POBIERANIE
DANYCH Z BAZY. NA EGZAMINIE NIE MUSISZ KORZYSTAĆ Z PRZEDSTAWIONYCH FUNKCJI.
MOŻESZ UŻYWAĆ SPOSOBU PRZESTAWIONEGO W PRZYKŁADZIE PIERWSZYM.

W przypadku pobieranie większej ilości rekordów
zalecane jest użycie pętli w celu wydobycia wszystkich zapisanych
rekordów w zmiennej tablicowej zwróconej w zmiennej $wynik.


Obsługa wyjątków
- Fatal error – bez obsługi błędów


Błąd natychmiast przerywa
skrypt w linii 25 nie tworząc połączenia.
- Fatal error (błąd
krytyczny)– z obsługą błędów


Obsłużony błąd sprawia, iż skrypt jest wyłączony w
kodzie w sposób kontrolowany funkcją die().
- Warning (ostrzeżenie) z wyświetleniem
informacji o błędzie


- Warning (ostrzeżenie) bez wyświetleniem
informacji o błędzie - @


Zmiana trybu raportowania
błędów
Funkcja mysqli_report()
|
Nazwa |
Opis |
|
Wyłącza raportowanie |
|
|
Zgłaszaj błędy wywołań funkcji MySQL |
|
|
Zamiast
ostrzeżeń zgłaszaj wyjątek mysqli_sql_exception w przypadku błędów |
|
|
Raportuj, jeśli w
zapytaniu nie użyto żadnego indeksu lub użyto nieprawidłowego indeksu |
|
|
Ustaw wszystkie opcje
(zgłoś wszystko) |
--------------------------------------------------------------------------------------------------------------------------------------------------
Przykład aplikacji zapisującej dane z formularza do
bazy danych


4.
Zadania
Zadanie 1:
System zarządzania książkami
Utwórz system do zarządzania listą książek. Będzie
on składał się z dwóch części:
Krok 1: Stworzenie bazy danych i tabeli
W programie do zarządzania bazami danych (np. phpMyAdmin) stwórz nową bazę danych o nazwie
biblioteka. Następnie, w tej bazie danych, utwórz tabelę o nazwie ksiazki z następującymi kolumnami:
Po utworzeniu tabeli, wprowadź do niej przynajmniej
3-4 przykładowe rekordy (książki).
Krok 2: Skrypt PHP
Napisz skrypt PHP o nazwie pokaz_ksiazki.php,
który:
Pamiętaj, aby do łączenia z bazą danych użyć
bezpiecznej metody, takiej jak rozszerzenie MySQLi.
Zadanie 2:
System zarządzania książkami cz2
Napisz skrypt PHP o dowolnej nazwie, w którym
pobierz dane o książkach z roku pobranego z formularza HTML.
Dane wyświetl w postaci tabeli.
Zadanie 3:
Wyświetlanie informacji o miastach
Twoim zadaniem jest stworzenie prostego systemu,
który wyświetli dane o miastach na podstawie wyboru z listy rozwijanej. Całość,
czyli formularz HTML i skrypt PHP, będzie w jednym pliku.
Krok 1: Baza danych
Utwórz bazę danych o nazwie miasta, gdzie istnieją
kolumny do wprowadzania takich danych jak: nazwa, populacja, wazny_zabytek
Krok 2: Formularz HTML
Utwórz formularz HTML zawierający:
Krok 3: Logika PHP
W tym samym pliku, poniżej formularza:
Zadanie 4:
Serwis samochodowy
Napisz aplikację internetową realizującą zadanie dotyczące
wyświetlanie zamówień klientów serwisu samochodowego.
Po uruchomieniu strony wyświetlana jest lista
rozwijana z danymi pobranymi z bazy danych z tabeli klienci zawierająca listę
wszystkich klientów.
Wybieranie klienta i naciśniecie przycisku powinno
spowodować pobranie i wyświetlenie wszystkich jego zamówień z tabeli naprawy.
Na samym dole wyświetlana jest również suma
wszystkich wydatków danego klienta.
W pliku serwis.sql
znajduje się wyeksportowana baza „serwis” danych zawierająca wszystkie
niezbędne dane.

Zadanie domowe
Zaprojektuj system składający się z bazy danych i
aplikacji webowej napisanej w języku php realizujący
zadanie dotyczące obsługi ankiety, gdzie użytkownik będzie musiał odpowiedzieć
na pytania dotyczące zajęć lekcyjnych z przedmiotu Aplikacje internetowe. W
ankiecie należy użyć różnych typów formularzy.
Na ocenę najwyższą należy uwzględnić jeszcze jeden
skrypt, który pozwoli wyświetlić informacje o wynikach ankiety, np. policzyć
ile było odpowiedzi na poszczególne pytanie oraz dla odpowiedzi wprowadzanych
jako tekst wyświetlić odpowiedzi od różnych ankietowanych.
Należy również uwzględnić estetykę wyświetlanych
danych poprzez odpowiednie wystylizowanie strony.