Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Instalacja pakietu XAMPP

Do zrealizowania współpracy witryny internetowej z bazą danych konieczny jest dostęp do serwera HTTP – najpopularniejsze obecnie oprogramowanie serwerowe używane przez firmy hostingowe to Apache2 oraz Nginx.

Na potrzeby projektowania nowej strony lub nauki tworzenia aplikacji internetowych postępujemy nieco inaczej – instalujemy tzw. serwer lokalny, czyli taki, który widoczny jest tylko dla naszej karty sieciowej pod adresem: http://127.0.0.1 lub jego aliasem słownym: http://localhost

Istnieje wiele gotowych pakietów, zapewniających możliwość łatwej instalacji zarówno serwera lokalnego, jak również interpretera PHP współpracującego z bazami danych MySQL – do najpopularniejszych rozwiązań tego typu należy pakiet XAMPP (wieloplatformowy) oraz WAMPServer (tylko na Windows). W naszych lekcjach używać będziemy pierwszego rozwiązania.

Proces instalacji, konfiguracji oraz instrukcję użycia pakietu pobranego z witryny fundacji Apache Friends przedstawiono w tutorialu:

Rb5vwfMk0fQae1
Film przedstawiający instalację oprogramowania XAMPP

Język komunikacji witryny z bazą danych

Pierwszym językiem programowania, z którym będziemy mieli styczność w kontekście zapewnienia współpracy strony internetowej z bazą danych, jest PHP. Jest to pełnoprawny, skryptowy język programowania stworzony przez Rasmusa Lerdorfa. Twórca PHP wykorzystał w jego składni mnóstwo elementów znanych już wcześniej w językach C/C++ oraz BASH (skrypty powłoki systemowej Unix/Linux).

Ciekawostka

To właśnie zapożyczenie z języka BASH sprawiło, iż w zmiennych tworzonych w PHP pojawia się charakterystyczny operator $ poprzedzający nazwę pojemnika na dane:

Linia 1. $imie znak równości cudzysłów Rasmus cudzysłów średnik. Linia 2. $nazwisko znak równości cudzysłów Lerdorf cudzysłów średnik.

Jeżeli podczas dotychczasowych zajęć w szkole poznałeś już konstrukcje językowe oraz składnię języków C/C++, to bardzo komfortowo i szybko odnajdziesz się także w PHP. Najważniejsza różnica pomiędzy pisaniem programów wykonywalnych i skryptów polega na tym, iż kod PHP wykonywany jest tylko przez procesor serwera, a nie lokalnego komputera.

Rasmus Lerdorf
Rasmus Lerdorf

Nie stworzyłem języka PHP, który znamy dzisiaj. To dziesiątki, jeśli nie setki ludzi opracowało PHP. Ja zwyczajnie byłem pierwszą osobą na świecie, która nad nim pracowała.

Wszystkie pliki PHP (w tym zawierające instrukcje komunikowania się z bazą danych i wykonywania zapytań SQL) znajdują się tylko na serwerze. Gdy się nad tym głębiej zastanowimy, jest to logiczne – skoro baza danych zawiera dane osobowe internautów (np. historię zamówień dokonanych w sklepie internetowym), to takie wrażliwe informacje muszą być przechowywane jedynie po stronie serwera. Wszystkie technologie webowe, które realizowane są zdalnie, określamy mianem back‑enduback‑endback‑endu.

RFbAswNzGCT9E1
Ilustracja przedstawia diagram połączeń pomiędzy klientem, serwerem a systemem bazodanowym. Klient łączy się z serwerem poprzez HTTP, serwer wysyła klientowi HTML, CSS i JS. Serwer łączy się z systemem bazodanowym poprzez php.exe. 1. Klient wpisuje adres witryny w przeglądarce, generując tzw. żądanie (ang. HTTP request), 2. Na dysku serwera znajduje się żądany przez klienta skrypt - kod źródłowy PHP znajdujący się w dokumencie zostaje przetworzony przez program php.exe znajdujący się również na dysku twardym serwera, 3. W razie potrzeby skrypt PHP komunikuje się z bazą danych, która również znajduje się na dysku serwera, 4. Po przetworzeniu całego kodu PHP wysłana zostaje odpowiedź (ang. HTTP response), jako pliki HTML, CSS i JS, które odpowiednio wyrenderuje przeglądarka na komputerze klienta
Komunikacja w architekturze klient‑serwer
Źródło: Contentplus.pl Sp. z o.o., licencja: CC BY-SA 3.0.

Mianem front‑endufront‑endfront‑endu określa się zaś technologie webowe, których kody źródłowe wykonywane są przez procesor na komputerze użytkownika witryny (czyli w praktyce przez jego przeglądarkę internetową). Pliki te muszą trafić do klienta przed ich wykonaniem, co w praktyce określimy jako proces wczytywania się witryny.

Rozszerzenia PHP

W celu połączenia witryny z bazą danych z użyciem PHP możemy skorzystać z trzech dostępnych w tym języku rozszerzeń (bibliotek) komunikacyjnych. Taką dedykowaną konkretnemu zadaniu bibliotekę, w nomenklaturze programistów określamy mianem interfejsu APIAPIinterfejsu API. Taki interfejs może być proceduralny albo obiektowy.

Jeżeli mamy interfejs proceduralny, to oznacza to, że operacje bazodanowe realizowane są przez odpowiednio przygotowane i wywołane funkcje. Każda funkcja wykonuje unikalne, dające się jednoznacznie wyróżnić działanie związane z bazą danych (np. ustanawia połączenie, wykonuje kwerendę).

Jeśli zaś interfejs API jest obiektowy, to oznacza to, że operacje bazodanowe realizowane są przez skonstruowane z użyciem klas obiekty oraz metody (czyli funkcje wewnątrz klas), wywoływane na rzecz tychże stworzonych obiektów.

Dostępne interfejsy API dedykowane komunikacji PHP z bazą danych MySQL:

  • mysql – stara biblioteka istniejąca w PHP już od wersji 2.0, obecnie nie zaleca się jej stosowania. Od wersji PHP 5.5 to rozszerzenie jest zdeprecjonowane (jego użycie wygeneruje ostrzeżenie), zaś od wersji PHP 7.0 zostało całkowicie wycofane ze standardu języka. Jest to API proceduralne, brak interfejsu obiektowego;

  • mysqli – nowoczesna i w pełni funkcjonalna biblioteka - litera i w nazwie pochodzi od słowa improved, co znaczy: ulepszona, poprawiona. API w pełni aktualne, współczesne, zalecane do użycia w nowych projektach. Oferuje do dyspozycji zarówno interfejs proceduralny, jak i obiektowy;

  • PDO – akronim od PHP Data Objects - w pełni obiektowa biblioteka obsługująca komunikację z bazą danych. Największą zaletą PDO jest obsługa innych silników bazodanowych aniżeli MySQL.

Przyjrzyjmy się także porównaniu tych rozszerzeń w postaci tabelarycznej:

Rozszerzenie (API)

mysql

mysqli

PDO

Wprowadzono w wersji PHP

2.0

5.0

5.0

Wsparcie dla rozszerzenia

zdeprecjonowane od PHP 5.5, usunięte od PHP 7.0

aktywnie wspierane

aktywnie wspierane

Zalecane dla nowych projektów

nie

tak

tak

Interfejs proceduralny

tak

tak

nie

Interfejs obiektowy

nie

tak

tak

Użycie różnych silników SQL

nie

nie

tak

Nawiązanie połączenia z bazą danych

W naszych pierwszych skryptach PHP użyjemy rozszerzenia mysqli w wersji proceduralnej. Połączenie z bazą danych nawiązujemy w następujący sposób:

Linia 1. $c znak równości mysqli podkreślnik connect otwórz nawias okrągły cudzysłów localhost cudzysłów przecinek cudzysłów root cudzysłów przecinek cudzysłów cudzysłów przecinek cudzysłów nazwa podkreślnik bazy cudzysłów zamknij nawias okrągły or die otwórz nawias okrągły cudzysłów Błąd połączenia wykrzyknik cudzysłów zamknij nawias okrągły średnik.

Wewnątrz funkcji użyto kolejno czterech parametrów:

  • host (adres komputera przechowujący bazę), na serwerze lokalnym jest to adres 127.0.0.1 albo localhost;

  • login użytkownika MySQL (musi posiadać stosowne uprawnienia), na serwerze lokalnym jest to użytkownik o nazwie root;

  • hasło dostępowe użytkownika MySQL (na serwerze lokalnym jest one puste);

  • nazwa bazy danych, z którą chcemy nawiązać połączenie.

Ponieważ nawiązanie połączenia może się zwyczajnie nie udać (chociażby dlatego, że podany użytkownik lub jego hasło jest niepoprawne lub baza danych nie istnieje), to pojawił się na końcu funkcji dodatkowy zapis or die(). Tłumaczymy taki zapis wprost jako: lub zabij skrypt. W razie wykrycia błędu połączenia dalsze wykonanie skryptu PHP zostanie wstrzymane, zaś w witrynie pojawi się komunikat umieszczony w nawiasie.

Ważne!

Połączenie z bazą danych musiało zostać nazwane – u nas jest to zmienna PHP o nazwie $c – od słowa: connection. Identyfikator połączenia jest niezbędny, ponieważ w skrypcie może zostać zdefiniowane więcej niż jedno połączenie!

Poprawna obsługa polskich znaków

Już po nawiązaniu połączenia, włączamy obsługę standardu UTF‑8 dla przesyłanych danych, używając poniższej funkcji:

Linia 1. mysqli podkreślnik set podkreślnik charset otwórz nawias okrągły $c przecinek cudzysłów utf8 cudzysłów zamknij nawias okrągły średnik.

Argumentami tej funkcji są kolejno:

  • identyfikator połączenia, które musi zostać powyżej tej linii poprawnie nawiązane i pozostawać aktualnie aktywne (niezamknięte),

  • nazwa zestawu znaków, współcześnie używamy standardu UTF‑8.

Ważne!

Nazwę standardu wewnątrz funkcji zapisujemy bez myślnika: utf8, inaczej niż to ma miejsce w języku HTML, gdzie zazwyczaj stosujemy zapis: utf‑8.

Dodatkowo, aby zapewnić w całej witrynie poprawne kodowanie polskich znaków (w tym również tekstów wyjmowanych z bazy bądź wkładanych do niej) należy:

  • użyć w kodzie źródłowym witryny, wewnątrz znacznika <html> atrybutu: <html lang="pl">;

  • użyć w kodzie źródłowym witryny, w sekcji <head>, ponad tytułem <title> znacznika <meta charset="utf‑8">;

  • ustawić kodowanie pliku z rozszerzeniem .php na standard UTF‑8. Na przykład w edytorze Notepad++ zmiany sposobu kodowania dokumentu dokonujemy wybierając z menu głównego: Format (Encoding) | Koduj w UTF‑8;

  • upewnić się, iż wszystkie pola typu tekstowego (znajdujące się w strukturze tabeli) bazy danych posiadają ustawioną metodę porównywania napisów utf8_bin albo utf8_polish_ci.

Wykonanie zapytania SQL

Kolejnym krokiem jest zdefiniowanie treści zapytania SQL, które mamy zamiar wykonać na naszej bazie danych. Treść kwerendy zostaje umieszczona w pomocniczej zmiennej, tutaj noszącej nazwę $q nawiązującej do angielskiego słowa query. Jednakże rzeczywiste wykonanie kwerendy odbywa się dopiero w momencie wywołania funkcji mysqli_query():

Linia 1. $q znak równości cudzysłów UPDATE nazwa podkreślnik tabeli SET nazwa podkreślnik kolumny znak równości apostrof nowa wartość apostrof cudzysłów średnik. Linia 2. mysqli podkreślnik query otwórz nawias okrągły $c przecinek $q zamknij nawias okrągły średnik.

Argumentami tej funkcji są kolejno:

  • identyfikator połączenia, które musi zostać powyżej tej linii poprawnie nawiązane oraz pozostawać aktualnie aktywne (niezamknięte);

  • treść zapytania, tutaj przechowywana w pomocniczej zmiennej $q.

Ważne!

Cała treść zapytania została zapisana w cudzysłowie, zaś nowa wartość będąca łańcuchem ograniczona jest apostrofami – użycie cudzysłowu spowodowałoby przedwczesne zakończenie treści całego zapytania i błąd składni!

Zamknięcie aktywnego połączenia

Po zakończeniu wszystkich działań dokonanych w skrypcie na bazie danych, wskazane jest zakończenie połączenia poniższą funkcją – jej jedynym parametrem jest identyfikator zamykanego połączenia:

Linia 1. mysqli podkreślnik close otwórz nawias okrągły $c zamknij nawias okrągły średnik.

Słownik

front‑end
front‑end

ogół technologii webowych (w tym HTML, CSS oraz w wielu zastosowaniach JavaScript), których pliki źródłowe wykonywane są przez przeglądarkę internetową klienta witryny; kody źródłowe zrealizowane w tych technologiach są jawne – każdy użytkownik serwisu może do nich zajrzeć, niezależnie od posiadanych uprawnień

back‑end
back‑end

ogół technologii webowych (w tym PHP, SQL), których pliki źródłowe wykonywane są przez procesor serwera; kody źródłowe zrealizowane w tych technologiach są dla klienta witryny niejawne, może do nich zajrzeć jedynie właściciel serwisu (albo ewentualnie uprawniona przez niego osoba posiadająca dostęp do dysku twardego serwera)

API
API

zestaw klas, metod, funkcji, zmiennych, parametrów, których aplikacja używa w celu zrealizowania zaplanowanych przez programistę zadań