ZSEiO w Krośnie

TECHNIK INFORMATYK

 

Lekcja  nr:

6

Nazwa przedmiotu:
Aplikacje internetowe  

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:

Obraz zawierający tekst, zrzut ekranu, Czcionka, linia

Zawartość wygenerowana przez AI może być niepoprawna.

Krok 1: Struktura bazy danych

Załóżmy, że mamy bazę danych o nazwie szkola i tabelę uczniowie z następującymi kolumnami:

Obraz zawierający tekst, Czcionka, numer, zrzut ekranu

Zawartość wygenerowana przez AI może być niepoprawna..

 

 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.

 

Obraz zawierający tekst, zrzut ekranu, oprogramowanie

Zawartość wygenerowana przez AI może być niepoprawna.

Obraz zawierający tekst, zrzut ekranu, oprogramowanie

Zawartość wygenerowana przez AI może być niepoprawna.

.

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.

Obraz zawierający tekst, zrzut ekranu, Czcionka

Zawartość wygenerowana przez AI może być niepoprawna.

 

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

Obraz zawierający tekst, zrzut ekranu, oprogramowanie, Oprogramowanie multimedialne

Zawartość wygenerowana przez AI może być niepoprawna.

Obraz zawierający Czcionka, zieleń, tekst, Grafika

Zawartość wygenerowana przez AI może być niepoprawna.

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

Obraz zawierający tekst, zrzut ekranu, oprogramowanie, Czcionka

Zawartość wygenerowana przez AI może być niepoprawna.

 

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

Obraz zawierający Czcionka, zieleń, tekst, Grafika

Zawartość wygenerowana przez AI może być niepoprawna.

 

Zmiana trybu raportowania błędów

Funkcja mysqli_report()

Nazwa

Opis

MYSQLI_REPORT_OFF

Wyłącza raportowanie

MYSQLI_REPORT_ERROR

Zgłaszaj błędy wywołań funkcji MySQL

MYSQLI_REPORT_STRICT

Zamiast ostrzeżeń zgłaszaj wyjątek mysqli_sql_exception w przypadku błędów

MYSQLI_REPORT_INDEX

Raportuj, jeśli w zapytaniu nie użyto żadnego indeksu lub użyto nieprawidłowego indeksu

MYSQLI_REPORT_ALL

Ustaw wszystkie opcje (zgłoś wszystko)

 

--------------------------------------------------------------------------------------------------------------------------------------------------

Przykład aplikacji zapisującej dane z formularza do bazy danych

Obraz zawierający tekst, zrzut ekranu, oprogramowanie

Zawartość wygenerowana przez AI może być niepoprawna.

Obraz zawierający zrzut ekranu, tekst

Zawartość wygenerowana przez AI może być niepoprawna.

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:

  1. Skryptu PHP do połączenia z bazą danych.
  2. Bazy danych z przykładowymi danymi.

 

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:

  1. Nawiąże bezpieczne połączenie z bazą danych biblioteka.
  2. Wykona zapytanie SQL, które pobierze wszystkie dane z tabeli ksiazki.
  3. Za pomocą pętli while, przejdzie przez każdy rekord.
  4. Wyświetli dane każdej książki w czytelnej formie, na przykład w postaci listy (<ul>) lub prostego tekstu z nagłówkami.

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:

  1. Listę rozwijaną (<select>), która będzie pobierać nazwy miast z przygotowanej tablicy. Wartością atrybutu value każdego elementu <option> powinna być nazwa miasta. Pamiętaj o użyciu atrybutu name dla listy.
  2. Przycisk submit do wysłania formularza.

Krok 3: Logika PHP

W tym samym pliku, poniżej formularza:

  1. Sprawdź, czy formularz został przesłany, używając instrukcji if z funkcją isset() dla nazwy listy rozwijanej.
  2. Jeśli formularz został wysłany, pobierz nazwę wybranego miasta.
  3. Następnie użyj pobranej nazwy jako klucza, aby pobrać dane z tabeli  $miasta.
  4. Wyświetl w czytelnej formie informacje o wybranym mieście, np. "Populacja: ...", "Ważny zabytek: ...". Jeśli użytkownik jeszcze nic nie wybrał, wyświetl komunikat "Wybierz miasto, aby zobaczyć informacje.".

 


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.