Dane oryginału

Original edition copyright © 2018 by Adrian W. West and Steve Prettyman. Title of English-language original: Practical PHP 7, MySQL 8, and MariaDB Website Databases: A Simplified Approach to Developing Database-Driven Websites, ISBN 978-1-4842-3842-4, published by Apress. All rights reserved. Polish-language edition copyright © 2020 by Polish Scientific Publishers PWN Wydawnictwo Naukowe PWN Spółka Akcyjna. All rights reserved.

Przekład Małgorzata Dąbkowska-Kowalik i Witold Sikorski na zlecenie

WITKOM Witold Sikorski

Projekt okładki i stron tytułowych polskiego wydania Joanna Andryjowicz

Wydawca Edyta Kawala

Redaktor prowadzący Jolanta Kowalczuk

Redaktor Anna Marecka

Koordynator produkcji Anna Bączkowska

Konsultacja merytoryczna

Marcin Lewandowski, czterytygodnie.pl

Zastrzeżonych nazw firm i produktów użyto w książce wyłącznie w celu identyfikacji.

Skład wersji elektronicznej na zlecenie Wydawnictwa Naukowego PWN

Monika Lipiec /Woblink

Copyright © for the Polish edition by Wydawnictwo Naukowe PWN SA

Warszawa 2020

ISBN 978-83-01-20991-9

eBook został przygotowany na podstawie wydania papierowego z 2020 r., (wyd. I)

Warszawa 2020

Wydawnictwo Naukowe PWN SA

02-460 Warszawa, ul. Gottlieba Daimlera 2

tel. 22 69 54 321, faks 22 69 54 288

infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl; reklama@pwn.pl

www.pwn.pl

Spis treści

O autorach

Podziękowania

Wprowadzenie

Co nowego w tym wydaniu?

Metoda nauczania

Dla kogo jest ta książka?

Mit „uczymy się szybko i łatwo”

Geneza książki

Potrzebne oprogramowanie

Konwencje stosowane w tej książce

Interakcja a dynamika

Kod źródłowy

Rozdział 1. Tworzenie i testowanie bazy danych i tabeli

Definiowanie pojęć administratora, dewelopera i użytkownika

Definiowanie witryn interaktywnych

Używanie MariaDB lub MySQL tylko do interaktywnych tabel bazy danych

Metody tworzenia i utrzymywania baz danych

Krótkie spojrzenie do wnętrza komunikacji serwera sieciowego

Bezpłatna platforma programistyczna do testowania

Używanie XAMPP na swoim komputerze

Czy będzie można przesłać bazę danych z XAMPP lub EasyPHP na zdalny host?

Pobranie i instalacja XAMPP

Uruchomienie XAMPP

Zamykanie XAMPP

Gdzie są MariaDB i MySQL 8?

Używanie EasyPHP na naszym komputerze

Pobranie i instalacja EasyPHP

Uruchomienie EasyPHP

Zamykanie EasyPHP

Bezpieczeństwo phpMyAdmin

Bezpośredni dostęp do phpMyAdmin

Znane fragmenty

Planowanie bazy danych – pierwszy krok

Tworzenie bazy danych za pomocą phpMyAdmin

Tworzenie tabeli za pomocą phpMyAdmin

Alternatywa z zastosowaniem SQL

Usuwanie baz danych i tabel

Podsumowanie

Rozdział 2. Tworzenie witryn internetowych, które mają interakcję z użytkownikami

Tworzenie folderu do przechowywania stron bazy danych

Tworzenie tymczasowego szablonu

Wprowadzenie do funkcji PHP include( )

Dołączany plik nagłówka

Dołączony plik menu

Dołączona kolumna informacyjna

Dołączony plik stopki

Jak serwer przetwarza stronę?

Interaktywna wersja szablonu

Połączenie z bazą danych

Objaśnienie kodu

Strona rejestracji

Objaśnienie kodu

Objaśnienie kodu

Słowo kluczowe PHP – echo

Strona z podziękowaniem

Wyświetlanie komunikatów o błędach, które zostały zebrane w tablicy

Mieszanie hasła

Przeglądanie rekordów użytkowników

Strona przeglądania użytkowników

Objaśnienie kodu

Strona zmiany hasła

Objaśnienie kodu

Objaśnienie kodu

Potwierdzenie udanej zmiany hasła

Testowanie stron podręcznika

Więcej informacji o tablicach

Podsumowanie

Rozdział 3. Tworzenie funkcji logowania i wylogowania dla członków i administratora

Tworzenie bazy danych logindb i tabeli users

Usuwanie lub zastępowanie zbędnych przycisków menu w nagłówkach

Dodawanie przycisku logowania w nagłówku strony domowej

Usuwanie nadmiarowych przycisków z nagłówków rejestracji i nowego hasła

Zmieniona strona rejestracji

Nowy nagłówek strony nowego hasła

Nowy nagłówek menu dla strony członków

Dołączamy nagłówek do strony z podziękowaniem

Strona rejestracji i niepożądane znaki

Objaśnienie kodu

Rejestrowanie członków

Rozróżnianie dwóch rodzajów członkostwa

Tworzenie poziomów użytkowników, aby ograniczyć dostęp do prywatnych stron

Logowanie

Nagłówek strony logowania

Strona logowania

Objaśnienie kodu

Objaśnienie kodu

Sesje

Strona tylko dla członków

Objaśnienie kodu

Planowanie roli administratora

Nowy nagłówek strony administratora

Strona administratora

Objaśnienie kodu

Strona wylogowania

Objaśnienie kodu

Testowanie funkcji Login/Logout

Modyfikacja i usuwanie pojedynczych rekordów

Podsumowanie

Rozdział 4. Tworzenie interfejsu administratora

Baza danych administratora

Tabela users

Zmiana strony wyświetlania użytkowników (View Users) w celu dołączenia edycji i usuwania

Objaśnienie kodu

Wyświetlanie rekordów stronami (stronicowanie)

Objaśnienie kodu

Planowanie kryteriów wyszukiwania

Tymczasowa strona wyszukiwania do wyświetlania wybranych członków

Objaśnienie kodu

Formularz wyszukiwania

Objaśnienie kodu

Końcowy program obsługi formularza do otrzymywania danych do wyszukiwania

Objaśnienie kodu

Edytowanie rekordów

Objaśnienie kodu

Usuwanie rekordów

Objaśnienie kodu

Podsumowanie

Rozdział 5. Rozwinięcie i wzbogacenie naszej witryny

Tworzenie nowej bazy danych z tabelą o 15 kolumnach i tabelą z cenami

Tworzenie pliku do łączenia się z bazą danych

Tworzenie tabel

Korzystanie z ENUM

Znaczenie dokumentacji

Rozszerzenie formularza rejestracji i dodanie rozwijanego menu

Ceny i informacje o opłatach podajemy zawsze na początku

Objaśnienie kodu

Objaśnienie kodu

Dodawanie obrazów PayPal i karty debetowej/kredytowej

Dołączanie PayPal do strony z podziękowaniem

Objaśnienie kodu

Rejestrowanie członków

Małe uzupełnienie strony logowania

Uzupełnianie nagłówka administratora

Dodawanie Class i Paid do tabeli admin_view_users

Objaśnienie kodu

Wyszukiwanie i edycja rekordów

Objaśnienie kodu

Modyfikowanie formularza w celu edycji rekordów

Podsumowanie

Rozdział 6. Dodajemy ostatnie poprawki: bezpieczeństwo i weryfikacja

Tworzenie bazy danych

Tworzenie pliku do łączenia z bazą danych

Tworzenie tabeli users przez importowanie pliku zrzutu SQL

Ręczne rejestrowanie niektórych użytkowników

Dodawanie kolumny tytułu do tabeli users

Tworzenie tabeli Prices przez import pliku SQL Dump

Czyszczenie folderów i systemów plików

Stopnie bezpieczeństwa

Dodawanie warstwy bezpieczeństwa

Zwiększona warstwa ochronna

Weryfikacja i oczyszczanie

Funkcja filter_var()

Weryfikacja

Oczyszczanie

Weryfikacja numerów telefonicznych

Bezpieczniejsza strona rejestracji

Objaśnienie kodu

Objaśnienie kodu

Szukanie tytułu, adresu lub numeru telefonu

Objaśnienie kodu

Oglądanie pobranego tytułu, adresu i numeru telefonu

Objaśnienie kodu

Edycja tytułów, adresów i telefonów

Objaśnienie kodu

Podsumowanie

Rozdział 7. Migracja na host i tworzenie kopii zapasowej bazy danych witryny

Dokonywanie zmian w ostatniej chwili

Tworzenie nowej bazy danych

Szczegóły pobranego pliku do łączenia z bazą danych

Umożliwienie zmiany swoich danych przez członków

Objaśnienie kodu

Bezpieczny formularz kontaktowy

Jak wygląda odpowiedź zwrotna?

Formularz kontaktowy

Objaśnienie kodu

Objaśnienie kodu

Strona z podziękowaniem i komunikaty o błędach

Uniwersalny nagłówek

Objaśnienie kodu

Rejestrowanie wyjątków i błędów

Migracja bazy danych i tabel na zdalny host

Zagadkowy komunikat o błędzie

Tworzenie i eksportowanie pliku SQL

Tworzyć plik zrzutu tabeli czy tabelę

Jak wygląda plik zrzutu SQL?

Badanie serwera zdalnego hosta

Korzystanie z interfejsów GUI na serwerze zdalnego hosta

Łączenie z bazą danych na zdalnym hoście

Bezpieczne przesyłanie pliku mysqli_connection.php

Przesyłanie stron interaktywnych na host

Tworzenie kopii zapasowej bazy danych

Podsumowanie

Rozdział 8. Tworzenie katalogu produktów

Przygotowanie bazy danych i planu administracyjnego

Tworzenie bazy danych

Tworzenie pliku w celu połączenia z bazą danych

Bezpieczeństwo

Tworzenie strony domowej z funkcją wyszukiwania

Nagłówek dla większości stron

Kod strony domowej

Wyświetlanie katalogu

Objaśnienie kodu

Nagłówek strony wyników wyszukiwania

Tworzenie strony ze szczegółowymi informacjami o domu

Objaśnienie kodu

Tworzenie strony administratora/dodawania domów

Nagłówek strony administracyjnej

Widok administratora z całą ofertą domów do sprzedaży

Administracyjne strony wyszukiwania

Wynik wyszukiwania

Strona do kontaktu

Podsumowanie

Rozdział 9. Łączenie wielu tabel i inne ulepszenia

Wprowadzenie do wielu tabel

Normalizacja

Tworzenie bazy danych i tabel

Spojrzenie na plik połączenia

Tworzenie drugiej tabeli

Klucze obce

Przygotowywanie tabel do złączenia

Wypełnianie dwóch tabel

Łączenie danych z dwóch tabel

Tworzenie trzeciej tabeli

Tworzenie stron do wyświetlania danych ze złączonych tabel

Strona domowa

Główne menu dla stron

Nagłówek dla wszystkich stron

Strona do przeglądania tabeli birds

Objaśnienie kodu

Strona przeglądania lokalizacji i siedlisk rezerwatów

Wyświetlanie danych ze złączonych tabel

Tworzenie strony do wyświetlania trzech złączonych tabel

Objaśnienie kodu

Płatności czekiem

Wybór sposobu płatności

Płatność czekiem

Objaśnienie kodu

Drukowanie formularzy online

Podsumowanie

Rozdział 10. Tworzenie tablicy ogłoszeń

Plan

Tworzenie bazy danych

Tworzenie tabel

Tworzenie drugiej tabeli

Tworzenie strony domowej tablicy ogłoszeń

Tworzenie formularza rejestracji

Strona z podziękowaniem

Wypełnianie tabeli członków

Strona logowania

Objaśnienie kodu

Wylogowywanie

Tworzenie strony powitalnej do wyboru cytatów

Formularz do publikowania cytatów

Objaśnienie kodu

Przetwarzanie publikowania

Objaśnienie kodu

Publikowanie cytatów

Strona z zabawnymi cytatami

Objaśnienie kodu

Nagłówek strony zabawnych cytatów

Strona mądrych cytatów

Objaśnienie kodu

Nagłówek dla strony mądrych cytatów

Dodawanie narzędzi wyszukiwania

Objaśnienie kodu

Nagłówek ViewPosts.php

Wyszukiwanie określonych słów lub fraz

Formularz wyszukiwania pełnotekstowego

Wyświetlanie wyników wyszukiwania

Objaśnienie kodu

Nagłówek strony quotes_found

Ulepszanie tablicy ogłoszeń

Przekształcanie tablicy ogłoszeń na forum

Podsumowanie

Rozdział 11. E-commerce: krótkie wprowadzenie

Ostrzeżenia dotyczące bezpieczeństwa

Plan

Tworzenie witryny koszyka PayPal

Tworzenie bazy danych i tabel koszyka PayPal

Przeglądanie pliku połączenia

Wypełnianie tabel koszyka PayPal

Strona domowa koszyka PayPal

Używanie strony domowej koszyka PayPal do wyszukiwania obrazów

Objaśnienie kodu

Integrowanie z przyciskami koszyka PayPal

Objaśnienie kodu

Tworzenie niestandardowego koszyka

Strona domowa niestandardowego koszyka

Tworzenie bazy danych i tabel niestandardowego koszyka

Analiza niestandardowego koszyka

Strona logowania niestandardowego koszyka

Objaśnienie kodu

Odzyskiwanie zapomnianego hasła

Objaśnienie kodu

Strona wyszukiwania w niestandardowym koszyku

Dodawanie obrazów do tabeli dla niestandardowego koszyka

Objaśnienie kodu

Objaśnienie kodu

Objaśnienie kodu

Strona finalizacji zakupów

Dodatkowe narzędzia administracyjne

Podsumowanie

Rozdział 12. Krótkie omówienie Oracle MySQL 8

Zalety aktualizacji

Instalowanie MySQL 8 Community Server

Analiza funkcji MySQL Workbench

Łączenie PHP 7 z MySQL 8 Community Server

Migracja na MySQL 8 Community Server

Używanie naszych plików PHP z MySQL 8 Community Server

Podsumowanie

Dodatek A. Rozwiązywanie problemów

Kaprysy przeglądarki

Tabele się nie wyświetlają

Zmiana stylu nie daje efektu

Dołączonych elementów nie ma na ekranie

Nie można zweryfikować strony

Rozwijane menu PayPal nie działa

Odmowa dostępu

Poziomy błędów PHP

Call to an Undefined Function (Odwołanie do niezdefiniowanej funkcji)

Cannot Redeclare Function (Nie można ponownie zadeklarować funkcji)

Undefined Index or Undefined Variable (Niezdefiniowany indeks lub niezdefiniowana zmienna)

Empty Variable Value (Pusta wartość zmiennej)

Headers Already Sent (Nagłówki już wysłane)

Blank Screen (Pusty ekran)

Unexpected End of File in Line xxx (Nieoczekiwany koniec pliku w wierszu xxx)

Parse Error and Unexpected Characters (Błąd analizy składniowej i nieoczekiwane znaki)

Unexpected T_STRING (Nieoczekiwany T_STRING)

Unexpected T_ELSE (Nieoczekiwany T_ELSE)

Wrong Equal Sign (Nieodpowiedni znak równości)

Failed to Open Stream (Nieudane otwarcie strumienia)

Syntax Errors (Błędy składni)

Warning: Division by Zero (Ostrzeżenie: dzielenie przez zero)

Display Is Not What Was Expected (Ekran inny niż spodziewany)

Reference to a Primary Key Could Not Be Created (Nie można utworzyć odwołania do klucza głównego)

Element <style> Not Allowed as Child of Element <div> (Element <style> niedozwolony jako podrzędny dla elementu <div>)

Problem with Prepared Statement (Problem z gotową instrukcją)

Błędy logiczne

Internet to nasz przyjaciel

Podsumowanie

Dodatek B. Zasoby

Krótki przewodnik PHP

E-maile w PHP

Objaśnienie kodu

Filtry weryfikacji i oczyszczania

Funkcje

include( ) oraz require( )

if, else oraz elseif

Objaśnienie kodu

Komentarze

Konkatenacja

Liczby

Operator trójargumentowy

Pętle

Pętla while

Pętla for

Pętla foreach

Pętla do while

Przygotowane instrukcje

Sesje

Logowanie za pomocą sesji

Wylogowywanie

Stałe

Tablice

Tablice asocjacyjne

Używanie Try/Catch

Zmienne

Zmienne: predefiniowane

Zmienne: łańcuchy

Szablon Bootstrap

Przegląd działania MySQL i phpMyAdmin

date_time

INSERT

SELECT

UPDATE

Mechanizmy pamięci i phpMyAdmin

Zmiana mechanizmu przechowywania dla istniejącej, wypełnionej tabeli

Co dalej?

Zasoby

Zasoby internetowe związane z PHP i MySQL

Zasoby z dziedziny e-commerce

Podręcznik online

Zasoby do tworzenia forów

Fora PayPal

Koszyki innych firm

Podsumowanie

Przypisy

O autorach

Adrian W. West zrezygnował z pracy w roli inżyniera projektanta, aby zostać dyrektorem szkoły korespondencyjnej w Wielkiej Brytanii. Od 1982 roku zajmuje się nauczaniem w różnej jego postaci. W 1987 roku wprowadził komputery do swego miejsca pracy oraz nauczył personel posługiwania się nimi. Przez cztery lata przekazywał swoją wiedzę na temat praktycznej znajomości komputerów na uczelni w Cheshire w Wielkiej Brytanii.

Adrian mieszka w Colyton, mieście leżącym w Devon, w Anglii, i przez ostatnich 18 lat projektuje i tworzy witryny dla biznesu i organizacji dobroczynnych w Wielkiej Brytanii. Jest autorem trzech książek wydanych przez Apress: Practical HTML5 Projects, książki zawierającej porady i sztuczki (dziś już przestarzałej), Practical PHP and MySQL Website Databases (stanowiącej pierwsze wydanie tej książki) oraz Practical Web Design for Absolute Beginners (opublikowanej w 2016 roku).

Steve Prettyman uzyskał w 1979 roku stopień licencjata na uniwersytecie Oglethorpe. Szybko zaczął karierę nauczycielską jako nauczyciel matematyki w liceum, kontynuując edukację, aby uzyskać stopień magistra w dziedzinie biznesowych systemów informacyjnych na Georgia State University (1985). Od tego czasu Steve spędził ponad 30 lat w branży informatycznej. Przez ostatnich 20 lat pracował jako nauczyciel i profesor w Chattahoochee Technical College, Kennesaw State University oraz Southern Polytechnic State University. Obecnie jest członkiem zarządu wydziału informatyki we Florida Keys Community College w Key West na Florydzie. Zajmuje się głównie nauczaniem programowania, projektowania witryn internetowych oraz tworzenia aplikacji sieciowych.

Podziękowania

Dziękuję mojej żonie, Janice, za jej miłość, wsparcie i zachętę oraz za przejęcie mojego udziału w obowiązkach domowych, abym mógł skoncentrować się na wydaniu tej książki.

Podziękowania należą się zespołowi Apress oraz wszystkim osobom z forów internetowych, które pomogły mi i odpowiadały na moje zapytania.

Chciałbym specjalnie podziękować mojemu współautorowi, Steve’owi Prettymanowi, który przekształcił kod i instrukcje z pierwszego wydania na najnowsze wersje PHP 7 i MySQL/MariaDB w wydaniu drugim.

Adrian W. West

Dziękuję mojej partnerce i żonie za jej miłość i wsparcie przez niemal 25 lat. Jej ciągłe przypominanie, że powinienem oderwać się od książek i cieszyć się życiem, było dla mnie ważne. Moje dzieci wpatrywały się we mnie, gdy zbyt długo je ignorowałem, aby pokazać mi, że powinienem przestać pisać książki oraz kody i wybrać się z nimi na basen. Czy możemy uznać, że Pixee i Buster, nasze czteronogie dzieci, są nieco zepsute?

Szczególnie dziękuję Adrianowi W. Westowi i wydawnictwu Apress za to, że mogłem uaktualnić pierwsze wydanie jego cieszącej się powodzeniem książki, zapewniając nowoczesne podejście do wzorców nauczania o interaktywnym programowaniu baz danych z wykorzystaniem PHP.

Steve Prettyman

Wprowadzenie

Co nowego w tym wydaniu?

Kod i instrukcje w pierwszym wydaniu tej książki (napisanej w roku 2012) stały się przestarzałe w związku z pojawieniem się nowych, innych wersji XAMPP, EasyPHP, phpMyAdmin, PHP oraz MySQL/MariaDB. Drugie wydanie zawiera nowy kod i instrukcje, które pasują do najnowszych wersji oprogramowania.

W związku z ogromnym nasileniem cyberprzestępczości i innych podobnych zagrożeń w nowym wydaniu położono znacznie większy nacisk na bezpieczeństwo. W tej książce przyjęto zasadę, że dane powinny być wyczyszczone, zanim zostaną wyświetlone na witrynie. Większość przykładów wykorzystuje przygotowane instrukcje, które sprawiają, że wszystkie dane akceptowane z zewnątrz nie spowodują zagrożenia bezpieczeństwa.

Wybraliśmy Bootstrap w celu zapewnienia automatycznego dostosowania wyglądu strony do rozdzielczości ekranu (RWD, responsive Web design) dla każdej z przykładowych witryn z tej książki. Ponieważ Bootstrap zapewnia CSS i JavaScript do dostosowywania przykładów z tej książki na urządzenia dowolnej wielkości, to w razie potrzeby można łatwo zmienić wygląd poszczególnych elementów poprzez zastosowanie własnego kodu CSS.

W nowym wydaniu znajduje się również krótki przegląd MySQL 8 firmy Oracle oraz porównanie dostępnych narzędzi w każdej z wersji. Podane szczegółowe procedury dają możliwość aktualizacji do MySQL 8.

Metoda nauczania

W tej książce zastosowano inną metodę nauki projektowania sieciowych baz danych niż w większości podręczników. Zwykle rozpoczyna się od kilku lekcji na temat PHP, po których mamy kawałki kodu i ewentualnie jeden lub dwa projekty. Ta książka odchodzi od takiego podejścia. Podstawowym celem jest przedstawienie pełnych projektów praktycznych opartych na bazie danych MySQL/MariaDB, wbudowanych w rzeczywiste witryny internetowe.

Zamiast prezentowania PHP, SQL i MySQL/MariaDB jako całkiem oddzielnych tematów, są one wyjaśniane w kontekście każdego projektu. Jednak jeśli przyda nam się szybki przegląd składni PHP, znajduje się on w dodatku B.

W książce praktyczne rozwiązania z zakresu baz danych i interaktywnych witryn internetowych są prezentowane możliwie wcześnie. W drugim rozdziale wstawiamy bazę danych do witryny interaktywnej i ją testujemy. W kolejnym rozdziale są pokazane coraz bardziej złożone i użyteczne strony internetowe oparte na bazach danych.

Zakładamy, że czytelnicy nie znają PHP ani baz danych. W książce pokazujemy więc:

• Jak tworzyć bezpłatne środowisko testowania stron internetowych opartych na bazach danych.

• Jak umieścić PHP i interaktywne bazy danych w rzeczywistych stronach internetowych. Jest to wiodący temat w całej książce.

• Jak PHP, HTML i MySQL/MariaDB współpracują przy tworzeniu i utrzymywaniu bazy danych oraz zawartych w niej danych.

• Jak utworzyć przyjazny interfejs, tak aby administrator o minimalnych umiejętnościach informatycznych mógł monitorować bazę danych.

Ponieważ bazy danych muszą być przeglądane i testowane na serwerze, pierwsza część rozdziału 1 jest poświęcona korzystaniu z darmowego serwera, który można pobrać i zainstalować na naszym komputerze. Zapewnia to nam bezpieczną platformę deweloperską do nauki i testowania podczas analizy praktycznych projektów z tej książki.

Zaczynanie od oddzielnej analizy teorii i składni PHP może zniechęcić uczących się i wydłużyć czas do chwili, gdy zajmą się praktycznymi aplikacjami. W tej książce od samego początku przejmujemy stery nad bazą danych. Podstawowe techniki PHP i MySQL/MariaDB są zaprezentowane w kontekście, który jest dla nich najbardziej odpowiedni.

Dla kogo jest ta książka?

W książce przyjęto, że czytelnicy znają HTML5 i CSS3. Jednocześnie założono, że nie znają MySQL/MariaDB, PHP i phpMyAdmin. W kolejnych rozdziałach czytelnicy przechodzą od poziomu średniego do zaawansowanego.

Do tworzenia interaktywnych baz danych nie jest potrzebna wyczerpująca wiedza o PHP. Wprowadzamy tyle informacji o PHP, ile jest potrzebne w konkretnym projekcie. Każdy fragment kodu w PHP jest objaśniony prostym językiem. W pełni działające przykłady pokazują krok po kroku, co można zrobić za pomocą MySQL/MariaDB i PHP i jak to zrobić. Jest to książka dla projektantów witryn, którzy chcą zacząć tworzyć witryny internetowe oparte na bazach danych.

Biorąc to pod uwagę, w książce zastosowano motywujące stopniowe podejście. Uważamy, że sensowne osiągnięcia motywują czytelników do niecierpliwego oczekiwania na kolejny krok. W książce uczymy PHP i MySQL/MariaDB w takim zakresie, aby wykonać wszystkie projekty z książki. Twórcy witryn, którzy nie są na bieżąco z MySQL/MariaDB i PHP, także skorzystają na takim podejściu. Nauczyciele licealni i akademiccy mogą stwierdzić, że książka zapewnia doskonały tekst i projekty, które dadzą studentom odpowiednie podstawy.

Mit „uczymy się szybko i łatwo”

W książkach często można przeczytać, że PHP i bazy danych MySQL/MariaDB są łatwe do szybkiej nauki, ale to zniechęca początkujących, gdyż zostają skonfrontowani z nieuniknionymi trudnościami (i komunikatami o błędach), zaczynając myśleć, że nigdy nie zrozumieją podstaw.

Początkujących nie wolno zniechęcać. Muszą jedynie pamiętać, że autorzy mówiący, iż można łatwo i szybko nauczyć się PHP i MySQL/MariaDB, zapewne używali PHP i MySQL przez ponad dekadę i zapomnieli o trudnościach, jakie napotkali na początku.

Jeśli zaakceptujemy, że do nauki PHP i MySQL/MariaDB potrzeba czasu i wysiłku, to stanie się coraz bardziej oczywiste, że uczymy się czegoś wartego uwagi. Trzeba więc mieć cierpliwość i wytrwałość, a wtedy zaczniemy cieszyć się z doskonalenia w tej cennej dyscyplinie.

Geneza książki

Większość książek na temat PHP/MySQL/MariaDB ma tendencję do pokazywania głębokiej i rozległej wiedzy autora na temat PHP i MySQL/MariaDB zamiast uczenia, jak wbudować bazy danych MySQL/MariaDB do witryn internetowych. W przeciwieństwie do nich, ta książka wykorzystuje w pełni wypracowane przykłady, aby pokazać sposób integrowania bazy danych z witryną.

Książki dotyczące PHP/MySQL/MariaDB będące w posiadaniu autora (lub pożyczone) są w przeważającej części niepotrzebnie skomplikowane. Autorzy tych książek przyzwyczaili się do swoich sztuczek i skrótów, co jest ich drugą naturą, i zapchali nimi kod, utrudniając początkującym uchwycenie podstawowego charakteru tych narzędzi.

W tej książce uniknięto tych błędów. Kilka użytecznych trików wprowadzono stopniowo i są one jasno opisane. Ta książka opiera się na cytacie z Bramhsa.

Komponować jest łatwo, ale niezwykle trudno jest odrzucić zbędne nuty.

Większość książek o PHP/MySQL/MariaDB została napisana od tyłu. Przerabiają rozdział po rozdziale funkcje i instrukcje PHP (nuda), a potem dodają kawałek o MySQL/MariaDB. PHP 7, MySQL 8 i MariaDB. Praktyczny podręcznik wyjaśnia potrzebne tematy o PHP i MySQL/MariaDB w odpowiednim kontekście przy nauce baz danych.

Inne książki o MySQL/MariaDB są niemal zawsze pisane z założeniem, że projektant witryn będzie administrował bazami danych. Jednak niewielkich witryn e-commerce, klubów i stowarzyszeń na to nie stać, więc wolą, aby ich pracownik zarządzał bazą danych za pomocą przyjaznego interfejsu. Większość baz danych tworzonych w tej książce może być administrowana zarówno przez niewykwalifikowanego pracownika, jak i przez projektanta witryn.

Ostatecznie Adrian W. Wood doszedł do wniosku, że musi napisać własny podręcznik oparty na swoich doświadczeniach, w którym połączy kawałki kodu z wielu źródeł. Podręcznik ten oparł na własnej metodzie prób i błędów, z czasach gdy sam był początkującym. To automatycznie sprawiło, że zawartość podręcznika przedstawiono w postaci prostych, logicznych kolejnych kroków, bez nagłego wprowadzania niewyjaśnionych elementów.

Ten autorski podręcznik stał się tak popularny, że autor zdecydował się podzielić wiedzą z projektantami witryn. Pierwsze wydanie tej książki było wynikiem tej decyzji.

Oprogramowanie i techniki bazodanowe stale ulegają poprawie i aktualizacji. Z tego powodu sięgnęliśmy po najnowsze wersje skryptów, narzędzi i dostępnego oprogramowania. Dzięki temu treść i ilustracje będą długo aktualne w drugim wydaniu książki.

Śledzenie ćwiczeń z tej książki wymaga absolutnego minimum oprogramowania. Niektóre podręczniki proszą czytelników o pobranie i naukę nowego oprogramowania przed przejściem do kolejnego rozdziału. Adrian miał w ręku książkę, która wymagała, aby czytelnicy pobrali MySQL, Apache, PHP, phpMyAdmin, Prototype 1.5, Scriptaculous, Zend Framework, Smarty Template Engine, edytor FCK, jQuery i Ajax. W tej książce, poza edytorem kodu, potrzebne oprogramowanie jest ograniczone, co opisano niżej.

Potrzebne oprogramowanie

W książce przyjęto założenie, że czytelnicy mają edytor HTML jak Blue Griffon (bezpłatny) lub Notepad++ (bezpłatny).

Potrzebny będzie:

• Notatnik (prawdziwy lub elektroniczny) do rejestrowania haseł i nazw plików naszych baz danych i pozycji w tabelach. Nie polegajmy na pamięci. Wszystko zapisujmy.

Trzeba pobrać:

• Przykładowy kod ze strony książki spod adresu https://github.com/Apress/practical-php7-mysql8-mariadb-website-databases

• XAMPP lub EasyPHP, pakiety do testowania naszej pracy, które są bezpłatne

• Najnowsze przeglądarki (bezpłatne): Microsoft Edge, Mozilla Firefox, Safari, Chrome i Opera

Konwencje stosowane w tej książce

Autorzy starali się pokazać każdy listing na zrzucie ekranu. Na przykład obraz z rysunku 3.6 jest opisany na listingu 3.6. Jeśli potrzebne są dwa listingi, takie jak kod HTML i kod PHP, które odnoszą się do tego samego zrzutu ekranu, to są one podpisane jako listing 3.6a i listing 3.6b. Jeżeli rysunek 4.6 nie wymaga listingu, to kolejny zrzut ekranu i jego listing będą nazywać się odpowiednio rysunek 4.7 i listing 4.7.

Wskazówki, uwagi i ostrzeżenia są pokazane w poniższym formacie:

Uwaga

Bezpieczeństwo jest ważne dla baz danych, zwłaszcza jeśli zawierają one dane osobowe. Technika zapewnienia bezpieczeństwa naszej pracy jest wpleciona w każdy krok instrukcji.

Wszystkie listingi są w kodzie HTML5 and PHP 7. Aby oszczędzić miejsce, niektóre metaopisy i metasłowa kluczowe zostały pominięte z części <head></head>.

Listingi kodu mają postać jak poniżej:

<div id='container'>

<?php include('header.php'); ?><!--include the new header file-->

Wiersze kodu są czasami ponumerowane, aby pomóc w wyjaśnieniach. Ma to następującą postać:

if (empty($errors)) { // Jeśli nie pojawią się żadne problemy, zarejestruj użytkownika w bazie danych

#1

Numery wierszy umieszczono tylko w celu ułatwienia wyjaśnień i nie mogą się znaleźć w naszym kodzie.

Interakcja a dynamika

Większość podręczników używa terminu dynamiczne witryny internetowe, gdy odwołują się do stron interaktywnych. Słowa dynamiczny i interaktywny opisują strony, które zapewniają bezpośrednie połączenie między użytkownikiem a bazą danych. Na przykład użytkownik może zarejestrować członka klubu i zobaczyć szczegóły konta. Sekretarz klubu może zobaczyć tabelę użytkowników, ale jest ona ukryta przed zwykłymi użytkownikami. Ponieważ słowo dynamiczna może mieć wiele konotacji i znaczeń, wybraliśmy w tej książce bardziej precyzyjny termin interaktywna.

Kod źródłowy

Kod z przykładami do tej książki znajduje się na witrynie https://github.com/Apress/practical-php7-mysql8-mariadb-website-databases. Trzeba wybrać i kliknąć przycisk Download Source Code.

Rozdział 1.
Tworzenie i testowanie bazy danych i tabeli

Ten rozdział zawiera wprowadzenie do pojęcia bazy danych i praktycznych sposobów jej testowania. Wykorzystując przykłady, utworzymy bazę danych i tabelę w MariaDB lub MySQL. W trakcie pracy nad przykładami będziemy poznawać interfejs administracji bazą danych.

Po przeczytaniu tego rozdziału będziemy potrafili:

• zdefiniować i zaprojektować bazę danych lub tabelę,

• zainstalować pakiet WAMP i go użyć,

• utworzyć bazę danych lub tabelę, wykorzystując phpMyAdmin,

• zabezpieczyć phpMyAdmin i bazy danych za pomocą identyfikatora użytkownika i hasła,

• usunąć bazę danych lub tabelę.

Bazy danych mogą być używane do przechowywania produktów, danych o klientach, zapisów o członkach stowarzyszenia lub klubu itp. Mogą przechowywać nazwiska, hasła, adresy, adresy e-mailowe, daty rejestracji, wpisy z blogów i numery telefoniczne. Bazy danych można traktować jak foldery zawierające tabele z danymi. Tabela danych składa się z kolumn i wierszy, gdzie wiersze są nazywane rekordami. Tabela 1.1 pokazuje typową tabelę bazy danych.

Tabela 1.1. Typowa tabela bazy danych

user_id

first_name

last_name

e-mail

password

Phone

1

Kevin

Kettle

kev@kettle.com

K3ttl3fur

305 111 1111

2

Susan

Saucepan

sue@kitchen.org.uk

N@sus5

01111 222 1111

3

Oliver

Oven

oliver@cokker.co.uk

H0tst0v3

03333 111 4444

Definiowanie pojęć administratora, dewelopera i użytkownika

W tej książce deweloper (inaczej webmaster) oznacza osobę, która projektuje i tworzy bazę danych. Integruje ona bazę danych z witryną internetową. Czasami używany jest termin webmaster lub projektant witryny. Zwykle oznacza wtedy to samo co deweloper. Słowa administrator i sekretarz mają w niektórych książkach to samo znaczenie, które wiąże się z tworzeniem bazy danych w klubie. Słowo administrator oznacza osobę odpowiedzialną za monitorowanie i utrzymanie zawartości tabel bazy danych. Oczywiście ta sama osoba może być zarówno deweloperem, jak i administratorem. Jednak większość deweloperów będzie utrzymywać strukturę bazy danych, ale nie będzie się angażować w dodawanie i usuwanie rekordów. To powinno stanowić rolę administratora (jak sekretarz ds. członkowskich w klubie).

Użytkownik to każda osoba, która ogląda bazę danych na witrynie i ewentualnie wchodzi z nią w interakcje. Ze względów bezpieczeństwa użytkownicy mają ograniczony dostęp do bazy danych. Mogą jednak być dopuszczeni do rejestracji jako członkowie, logować się w specjalnej części lub zmieniać swoje hasło.

Ostrzeżenie

Organizacja zarządzająca bazą danych musi stosować się do przepisów i praw kraju, w którym baza danych jest tworzona i umieszczona. W Wielkiej Brytanii musi być przestrzegane prawo Data Protection Act¹ odpowiadające obszarowi, w którym baza danych została utworzona. Jest to szczególnie ważne w przypadku danych, które są wykorzystywane dla zysku. Może to wymagać licencji. Ponadto deweloper i administrator muszą podpisać dokument potwierdzający, że nie ujawnią danych osób zarejestrowanych w bazie danych. Brytyjskie biuro ICO (UK Information Commissioner’s Office) wymaga wnoszenia rocznej opłaty licencyjnej opartej na dochodach organizacji, która jest właścicielem bazy danych. W USA nie ma analogicznych przepisów, ale prawa dotyczące prywatności różnią się w zależności od stanu. Należy znać i przestrzegać prawa dotyczącego ochrony danych obowiązującego na terenie swoich klientów.

Bazy danych dostępne w różnych krajach muszą spełniać wymogi każdego z nich. Czasami wymaga to tworzenia innych wersji baz danych lub witryn, a czasem nie jest to konieczne. Wiele praw i regulacji nie nadąża za ogólną potrzebą zapewniania możliwie najbardziej bezpiecznego środowiska dla bazy danych. Przy projektowaniu i używaniu baz danych deweloper powinien zawsze trzymać się zasady maksymalnego bezpieczeństwa. Bazy danych używane do celów edukacyjnych (jak bazy danych pokazane w tej książce) nie muszą spełniać tych regulacji (jak licencje).

Definiowanie witryn interaktywnych

Interaktywne witryny internetowe są często określane jako dynamiczne. W tej książce piszemy interaktywne, gdyż dynamiczne może mieć wiele znaczeń. Na przykład może oznaczać poruszające się, potężne, przyciągające wzrok, krzykliwe, ekscytujące. Dla osoby początkującej żadne z tych określeń nie odnosi się do witryny, która ma interakcję z użytkownikiem.

Określenie dynamiczna jest często używane do czegoś ekscytującego, a interaktywny formularz rejestracyjny nie wzbudza wielu emocji. Dynamiczny to także termin muzyczny oznaczający zmiany głośności lub tempa. Jeśli dynamiczny może odnosić się do zmian, to czemu dynamiczne szablony zostały zaprojektowane do zapewnienia spójności między witrynami? Termin interaktywny ma jedno jasne znaczenie i będzie od tej pory używany w tej książce.

MariaDB i MySQL (wraz z PHP) pozwalają użytkownikom i administratorom na interakcję z bazą danych z poziomu witryny internetowej. Na przykład użytkownicy mogą rejestrować się jako członkowie organizacji za pośrednictwem strony rejestracyjnej witryny. Użytkownicy mogą wprowadzać swoje dane osobowe do tabel członkowskich. System zarządzania bazą danych wprowadza następnie automatycznie dane użytkownika do tabel administratora. To zmniejsza nakład pracy administratora. Strona rejestracyjna witryny może zostać zaprogramowana tak, aby filtrowała i sprawdzała dane podawane przez użytkownika. Użytkownicy mogą nawet na stronie interaktywnej aktualizować swoje zapisy w bazie danych.

Z jednej strony, interakcja oznacza, że nakład pracy administratora jest znacznie zmniejszony, ale nie znika. Na przykład gdy baza danych jest przeznaczona dla księgarni, administrator nadal musi wprowadzać nowe tytuły i ceny. Z drugiej strony, interaktywna baza danych może zostać zaprogramowana, tak aby alarmować administratora, że stan jakiejś książki w magazynie wymaga uzupełnienia.

W rozdziale 2 dowiemy się, jak utworzyć prostą witrynę interaktywną.

Używanie MariaDB lub MySQL tylko do interaktywnych tabel bazy danych

Tabela danych nieinteraktywna oznacza, że tylko administrator może w niej wprowadzać lub uzupełniać informacje. Taką tabelę jest łatwiej utworzyć i administrować nią za pomocą arkusza kalkulacyjnego takiego jak Microsoft Excel. Jednak użytkownicy witryny nie mogą mieć interakcji z taką tabelą. Wykorzystanie systemu zarządzania bazami danych (DBMS) MariaDB lub MySQL do utworzenia nieinteraktywnej (statycznej) wersji tabeli danych byłoby jak użycie siekiery do rozłupania orzecha. Użytkownicy witryny nie mieliby możliwości wprowadzania ani aktualizacji danych i ich wyszukiwania.

Wykorzystanie DMBS MariaDB lub MySQL do wersji nieinteraktywnej nie zmniejszy nakładu pracy administratora. Będzie on musiał wprowadzać wszystkie dane i sprawdzać, czy są one oryginalne.

Uwaga

Działanie kilku interaktywnych stron na witrynie nie wymaga bazy danych. Na przykład formularz Kontakt może być traktowany jako interaktywny, ponieważ przyjmuje dane od użytkownika i przekazuje je do witryny internetowej właściciela za pomocą procedury obsługi w PHP za pośrednictwem poczty. Można to łatwo zrobić bez bazy danych. W tej książce termin interaktywny zawsze oznacza, że użytkownik porozumiewa się z bazą danych.

Metody tworzenia i utrzymywania baz danych

Są cztery metody zarządzania bazami danych (zostały ułożone od najłatwiejszej do najtrudniejszej):

• phpMyAdmin (lub inne narzędzie administracyjne),

• PHP,

• skrypty SQL,

• wiersz poleceń.

W tej książce będziemy przede wszystkim używać pierwszych dwóch metod (phpMyAdmin i PHP). Ze skryptów SQL i wiersza poleceń będziemy korzystać, aby pokazać w skrócie, jak tworzyć, aktualizować i rozpowszechniać naszą bazę danych. Na potrzeby interaktywnych baz danych będziemy potrzebować trochę plików PHP. Przed utworzeniem interaktywnych baz danych nie musimy mieć głębokiej wiedzy na temat PHP. Wprowadzimy potrzebną składnię PHP w odpowiednim miejscu każdego projektu – czyli we właściwym kontekście. W pełni opracowane przykłady pokażą nam krok po kroku, co mogą robić MariaDB i MySQL i jak to robić.

Z uwagi na ich popularność opracowany został GUI, graficzny interfejs użytkownika, który ułatwia zadanie tworzenia i utrzymywania baz danych. Te narzędzia administracyjne są częścią pakietu projektowania, który obejmuje serwery sieciowe (Apache), bazy danych (MariaDB lub MySQL) oraz języki programowania (PHP). W tej książce wprowadzamy dwa najpopularniejsze pakiety: XAMPP i EasyPHP.

Krótkie spojrzenie do wnętrza komunikacji serwera sieciowego

Bazy danych wymagają serwera, DMBS oraz procesora PHP, jak pokazano na rysunku 1.1. Można je pobrać jako całościowy skonfigurowany pakiet. Testowanie i tworzenie projektów z tej książki jest oparte na bezpłatnych pakietach XAMPP i EasyPHP.

Rysunek 1.1. Komunikacja z serwerem internetowym

Rysunek 1.1 pokazuje główne komponenty wbudowane w platformy deweloperskie XAMPP i EasyPHP. Są one następujące:

• Apache to serwer stron internetowych używany przez większość hostów i do tworzenia witryn na lokalnych hostach (komputerach użytkownika). Serwery internetowe określają, czy witryny zawierają kod PHP, analizując rozszerzenia pliku (.php). Jeśli kod PHP istnieje, kod jest przekazywany do wykonania do interpretera PHP. Jeśli ten ostatni stwierdzi, że w skrypcie PHP znajduje się kod związany z bazą danych, informacja jest przekazywana do systemu zarządzania bazą danych MySQL lub MariaDB. System ten wykonuje instrukcje SQL i zwraca wyniki do interpretera PHP. Ten kończy wykonywanie kodu PHP wraz z HTML, CSS i/lub JavaScript, a następnie wysyła te informacje do przeglądarki na maszynie użytkownika. Przeglądarka wykonuje kod w HTML, CSS i/lub JavaScript.

• MySQL i MariaDB to nie tylko bazy danych, lecz także systemy zarządzania bazą danych. Pakiety te obejmują narzędzia do tworzenia, zarządzania i zabezpieczenia baz danych.

• PHP interpretuje i wykonuje dowolny kod w PHP. Jeśli znajdzie błędy składniowe (w kodzie), logiczne lub systemowe (brak pamięci), będzie wyrzucał błędy i wyjątki.

• phpMyAdmin to narzędzie administracyjne oparte na GUI, do tworzenia i zarządzania bazami danych i ich tabelami.

Pojedyncze uniwersalne pakiety jak XAMPP lub EasyPHP zawierają cztery programy wymienione na rysunku 1.1 i są określane jako WAMP (Windows, Apache, MySQL/MariaDB PHP). W pakietach WAMP podstawowe komponenty są wstępnie skonfigurowane, tak aby mogły się ze sobą porozumiewać. Ich odpowiednikiem w systemie Apple OS jest MAMP, a na komputerach linuksowych jest to LAMP.

Folder htdocs (lub eds-www) to pamięć domyślna i obszar wykonywalny naszych stron internetowych. Apache domyślnie zagląda do htdocs (lub eds-www), szukając stron internetowych. Strony te mogą być zaprojektowane tak, aby pozwalały na interakcję użytkowników z bazą danych. Inne strony będą działać w sposób niewidoczny dla użytkownika, przesyłając w obie strony informację między przeglądarką a bazą danych. Strony są zwykle plikami HTML i PHP lub kombinacją obu języków.

Ostrzeżenie

Wszystko, co widać na rysunku 1.1, może być już zainstalowane na zdalnym hoście, ale nie należy nigdy podczas nauki używać zdalnego hosta do tworzenia bazy danych. Ze względów bezpieczeństwa nie korzystamy ze zdalnego hosta dopóty, dopóki nie nauczymy się działać. Zalecamy naukę i tworzenie bazy danych za pomocą ogólnego narzędzia deweloperskiego na naszym komputerze. Zauważmy, że całościowy pakiet zainstalowany na naszym komputerze to wyłącznie narzędzie do tworzenia bazy. Baza danych po utworzeniu i gruntownym przetestowaniu może zostać załadowana na host, aby stać się dostępna dla użytkowników.

Bezpłatna platforma programistyczna do testowania

Nie będziemy mogli przetestować naszej pracy w normalny sposób – czyli używając przeglądarki do obejrzenia bazy danych i kodu PHP umieszczonego na naszym dysku twardym. Gdy żądana jest witryna zawierająca PHP, kod jest wykonywany w serwerze internetowym. Wyniki wykonania kodu są wyświetlane przez przeglądarkę. Jeśli oglądamy kod przeglądarki (klikamy prawym przyciskiem myszy na witrynie i wybieramy View Source – Pokaż źródło strony), nie zobaczymy kodu w PHP. Pokaże się nam wynik wykonania kodu. Jest to mylące dla początkujących programistów, którzy są przyzwyczajeni do oglądania w przeglądarce utworzonego przez siebie kodu HTML, CSS lub w standardzie JavaScript. Pamiętajmy, że HTML, CSS i JavaScript są wykonywane w przeglądarce. Kod PHP jest wykonywany na serwerze internetowym, nawet jeśli serwer ten jest na naszym komputerze.

Używanie oprogramowania zawierającego wszystkie niezbędne elementy jak interpreter PHP, serwer WWW oraz serwer bazodanowy MariaDB pozwoli nam na pisanie i testowanie kodu na własnym komputerze. W książce przyjęto założenie, że podczas nauki i przy tworzeniu przyszłych witryn sterowanych z bazy danych czytelnicy korzystają z całego pakietu oprogramowania na swoich komputerach.

Uwaga

W obecnym świecie hakerów, którzy próbują zepsuć lub zebrać dane osobowe, korporacyjne i rządowe strony znajdujące się na witrynach w Internecie muszą być zabezpieczone. Pierwsze projekty z tej książki są oczywiście proste i też mają pewne funkcje zabezpieczające. Jednak nie jest zalecane wysyłanie tych stron na host w Internecie. Po nabraniu doświadczenia i pewności każdy zrozumie, jak zabezpieczać witryny i bazy danych. Wtedy może zaadaptować dalsze przykłady z książki do wykorzystania na swoich własnych witrynach, a potem pobrać je na zdalny host.

Używanie XAMPP na swoim komputerze

Pakiet XAMPP jest bezpłatny i wstępnie skonfigurowany, więc wszystkie komponenty będą się ze sobą porozumiewać. Eliminuje to zamieszanie powodowane zwykle przez pobieranie kilku oddzielnych składników, a następnie konfigurowanie ich do wspólnej pracy. XAMPP obejmuje pakiety dla Windows (WAMP), Linuksa (LAMP) Apple (Mac) OS (MAMP). Przykłady w tej książce zostały wykonane w środowisku WAMP. Jednak przykłady te powinny działać w środowiskach LAMP oraz MAMP.

W czasie pisania tej książki najnowszą wersją XAMPP było 7.2.4. Jest ona używana w całej książce. To, wraz z innymi narzędziami, część składowa następujących wersji: Apache 2.4.33, MariaDB 10.1.25, PHP 7.2.4 i phpMyAdmin 4.8.0. Przykłady z książki nie są w pełni kompatybilne z wersjami PHP wcześniejszymi niż 7.0.

Uwaga

W przypadku instalowania wersji, która jest nowsza od pokazywanej w tej książce, kroki instalacji mogą być nieco inne. Trzeba to sprawdzić na witrynie XAMPP (www.apachefriends.org) lub poszukać instrukcji instalacyjnych w Internecie (można spróbować youtube.com) dla każdej wersji nieomówionej w tej książce. Jeśli nowa wersja obejmuje dużą aktualizację (np. PHP 8), mogą być wymagane pewne zmiany w kodzie. Trzeba sprawdzić na witrynie Apress, czy są potrzebne zmiany kodu związane z głównymi nowymi wersjami.

Zanim podamy instrukcje do pobrania XAMPP, musimy odpowiedzieć na pytanie, które dręczy początkujących, związane z przeniesieniem utworzonej bazy danych z XAMPP lub EasyPHP na zdalny host. Jeśli używamy jednego z tych pakietów na swoim komputerze, powstanie pytanie stanowiące tytuł kolejnej części rozdziału.

Czy będzie można przesłać bazę danych z XAMPP lub EasyPHP na zdalny host?

Myśl, która straszy początkujących, to: „Jeśli utworzę bazę danych na lokalnym WAMP, czy będzie można łatwo przenieść ją na zdalny host?”. Początkujący mają powody do zmartwienia, gdyż większość podręczników nie porusza tego zagadnienia. Jednak odpowiedź brzmi: „Tak, można łatwo przenieść bazę danych”. Pełną instrukcję można znaleźć w dalszej części książki.

Teraz podamy informacje na temat pobierania i instalowania XAMPP.

Ostrzeżenie

Jeśli ktoś chce zainstalować wiele bezpłatnych WAMP, może zainstalować na tym samym komputerze zarówno EASYPHP, jak i XAMPP. Jednak trzeba zamknąć jeden z nich przed otwarciem drugiego. Inaczej będą rywalizować o te same porty i spowodują irytujące problemy.

Pobranie i instalacja XAMPP

XAMPP Wymaga minimalnego konfigurowania. Aby pobrać pakiet, należy wejść na witrynę www.apachefriends.org/.

Klikamy Download (Pobierz) z menu na górze głównej strony, jak to pokazano na rysunku 1.2. Strona pobierania powinna wyświetlić aktualnie dostępne wersje. Wybieramy wersję 7.2.4 XAMPP, jeśli jest ona dostępna, aby zapewnić zgodność z działaniami w tej książce. Jeśli jest niewielka zmiana w wersji (jak 7.3.0), to zapewne nadal wszystko będzie kompatybilne. Jeśli wersja 7 nie jest dostępna, trzeba pobrać najnowszą wersję. Potem sprawdzamy na witrynie Apress, czy wymagane są jakieś zmiany w kodzie przykładów zamieszczonych w tej książce. Strona pobierania zmienia się od czasu do czasu, więc może będzie trzeba poszukać na stronie, które wersje są dostępne.

Rysunek 1.2. Instalowanie XAMPP

Uwaga

Strona pobierania poinformuje, że musimy mieć zainstalowane biblioteki uruchomieniowe C++. XAMPP i związane z nim narzędzia są tworzone za pomocą C++. Jeśli używamy bieżącej wersji systemu Windows, mamy zapewne poprawną wersję C++. Jeśli jednak otrzymamy błąd wskazujący, że tak nie jest, to trzeba kliknąć odnośnik przy błędzie, aby ją pobrać.

Klikamy przycisk przy najnowszej wersji. To rozpocznie proces pobierania. Plik zostanie automatycznie pobrany do folderu Pobrane ma naszym komputerze. Zależnie od przeglądarki możemy otrzymać pytanie, czy chcemy program zapisać, czy uruchomić. Niektóre przeglądarki automatycznie zapiszą program i będą wymagały, aby kliknąć i uruchomić odpowiedni plik. Jeśli nie wiemy, jak znaleźć pobrane pliki przy używanej przeglądarce, trzeba poszukać wskazówek w Internecie. Po pobraniu pliku zaczynamy proces instalacji, klikając dwa razy plik (lub klikając opcję Run – Uruchom) po otrzymaniu monitu.

Środowisko systemu zapyta nas o zgodę na instalację programu. Klikamy Yes, aby kontynuować. Program instalacyjny określi ustawienia bezpieczeństwa na naszej maszynie. Może wyświetlić ostrzeżenie, że nasze zabezpieczenia mogą ograniczyć niektóre dostępne opcje XAMPP. Możemy wybrać kontynuację instalacji lub zatrzymać ją i czasowo wyłączyć nasze zabezpieczenia. Jeśli tak postąpimy, sprawdźmy, czy komputer został odłączony od Internetu. Program instalacyjny zajrzy także do ustawień naszego konta użytkownika (UAC, User Account Control). Ustawienia te ograniczają dostęp do folderów i plików w oparciu o identyfikator użytkownika zalogowanego do systemu. Jeśli używamy komputera z konta, które nie ma uprawnień administratora, program instalacyjny wyświetli ostrzeżenie i poprosi o zainstalowanie naszego programu z innej lokalizacji niż domyślna (pliki programu). Trzeba wykonać podane polecenia i zmienić ustawienia domyślne na inną lokalizację, jak np. c:/XAMPP.

Pojawi się powitalny ekran kreatora XAMPP Setup Wizard. Klikamy Next (Dalej), aby kontynuować konfigurację. Na kolejnym ekranie wyświetlą się wszystkie opcje dostępne przy instalacji. Osoby początkujące powinny zaakceptować element już zaznaczony, klikając kolejny przycisk Next. Średnio i bardziej zaawansowani użytkownicy mogą rozważyć usunięcie elementów, co do których mają pewność, że ich nie będą używać. Można je zawsze doinstalować później. Kolejny ekran pokaże położenie instalacji. Używamy c:/XAMPP, aby uniknąć ewentualnych problemów z bezpieczeństwem dostępu. Klikamy Next. Kolejny ekran będzie nas przekonywał, aby rozważyć też zainstalowanie programów CMS (takich jak WordPress). Na tę chwilę usuwamy zaznaczenie z pola Learn More (Zobacz więcej). Możemy to zainstalować później, jeśli będzie taka potrzeba. Klikamy przycisk Next. Kolejny ekran pokaże, że konfiguracja została zakończona. Klikamy Next. Rozpocznie się instalacja. Domyślnie pole wyboru Start Control Panel (Uruchom Panel sterowania) będzie zaznaczone. Zostawmy je tak. Klikamy przycisk Finish (Zakończ). Przed wyświetleniem Panelu sterowania możemy zostać poproszeni o wybór języka.

Jeśli podczas instalacji pojawią się błędy, trzeba je skopiować i wkleić do wyszukiwarki (jak Google). Popatrzmy na listę sugerowanych rozwiązań. Przejdźmy do zaufanej witryny i postępujmy zgodnie ze wskazówkami, aby poprawić błąd.

Elementy w panelu sterowania XAMPP oznaczone jako Running powinny pojawić się automatycznie, a my mamy możliwość zatrzymania niektórych z nich. Jeśli moduły nie uruchomią się automatycznie, to w panelu sterowania dla Apache i MySQL klikamy przycisk Start XAMPP. Jeśli przycisk mówi Stop, dany moduł już działa. Co dalej? Jeśli otrzymamy pytanie, czy uruchamiamy moduły jako usługi, wybieramy uruchomienie Apache i MySQL jako usług i moduły te automatycznie uruchomią się, gdy dwa razy klikniemy ikonę pulpitu XAMPP (rysunek 1.3).

Rysunek 1.3. Ikona XAMPP

Tworzymy na pulpicie skrót do folderu XAMPP o nazwie htdocs i umieszczamy go obok ikony XAMPP, co pokazano na rysunku 1.4. Używamy tego skrótu przy pobieraniu plików PHP do folderu C:\xampp\htdocs folder.

Rysunek 1.4. Skróty oszczędzające czas

Jeśli podczas instalacji nie została utworzona ikona na pulpicie, należy przejść do folderu C:\xampp i utworzyć skrót za pulpicie do pliku xampp-control.exe.

Dla wygody te dwa elementy powinny być na pulpicie obok siebie, jak pokazano na rysunku 1.4. Jedna ikona uruchamia i zatrzymuje XAMPP, a druga pozwala nam na utworzenie i zmodyfikowanie stron bezpośrednio w folderze htdocs, w którym jest XAMPP.

Częstym problemem jest fakt, że Skype i inne aplikacje także używają portu 80, domyślnego portu Apache. Jeśli inna aplikacja używa tego portu, Apache się nie uruchomi. Rejestr (rysunek 1.5) wskaże, że Apache nie mógł rozpocząć działania, gdyż port był zajęty. Jeśli tak się zdarzy, trzeba przejść do panelu sterowania XAMPP i kliknąć przycisk Netstat. W oknie pojawi się lista aplikacji działających na naszym komputerze i używanych przez nie portów. Musimy określić nieużywany port (np. 8080) i zamknąć okno Netstat. Następnie klikamy przycisk Config obok Apache. Wybieramy httpd.conf. Plik konfiguracyjny otworzy się w Notatniku (lub innym domyślnym edytorze). Klikamy Edycja, potem Szukaj i wpisujemy 80. Klikamy Znajdź następny, aż znajdziemy następujący wiersz:

Listen 80

Zmieniamy go na:

Listen 8080

lub na inny wybrany przez nas port.

Teraz wracamy do wyszukiwania i klikamy Znajdź następny, aż znajdziemy następujący wiersz:

ServerName: localhost: 80

Zmieniamy go na

ServerName: localhost: 8080

lub na inny wybrany przez nas port.

Zapisujemy plik i zamykamy Notatnik (lub inny edytor). Przechodzimy do panelu sterowania XAMPP i klikamy przycisk Config w prawym górnym rogu strony. Klikamy przycisk Services and Port Settings (Ustawienia usług i portów). Klikamy Apache. Wprowadzamy nowy port dla Apache (8080 lub na inny wybrany przez nas). Klikamy Save (Zapisz). Zamykamy okno Config. Teraz klikamy w panelu sterującym przycisk Start obok Apache (rysunek 1.5). Po kilku sekundach Apache powinien się uruchomić. Pokaże to zielone tło za Apache. Musimy także uruchomić MySQL, gdyż nie mógł on zacząć pracy bez wcześniejszego uruchomienia Apache.

Uruchomienie XAMPP

Od tego momentu przetestowanie stron w XAMPP wymaga dwukrotnego kliknięcia ikony z pulpitu i sprawdzenia, czy Apache i MySQL/MariaDB się uruchomiły. Jeśli tak się nie stało, klikamy przycisk Start dla Apache. Po uruchomieniu klikamy przycisk Start dla MySQL/MariaDB, a następnie minimalizujemy panel sterowania.

Rysunek 1.5 pokazuje panel sterowania XAMPP.

Rysunek 1.5. Panel sterowania XAMPP

Zalecamy minimalizację panelu sterowania, aby mieć czysty pulpit do rozpoczęcia pracy na bazach danych.

Po uruchomieniu Apache i MySQL/MariaDB możemy przetestować naszą instalację i przeanalizować wszystkie przykłady oraz narzędzia XAMPP. W tym celu należy wprowadzić do przeglądarki jeden z poniższych adresów:

http://localhost/

http://127.0.0.1/

Jeśli dodaliśmy numer portu, to musimy umieścić ten sam numer w formacie takim jak w poniższych przykładach:

http://127.0.0.1:8080/

http://localhost:8080/

Zamykanie XAMPP

Zamykamy XAMPP, gdy skończymy testowanie naszej bazy danych i plików PHP. To zwolni pamięć dla zadań innych niż tworzenie bazy danych. Aby zamknąć, maksymalizujemy panel sterowania XAMPP i klikamy na panelu przycisk Quit (Zakończ), jak to pokazano na rysunku 1.6. Alternatywnie możemy kliknąć prawym przyciskiem myszy ikonę w obszarze powiadomień, a następnie wybrać Quit.

Rysunek 1.6. Zamykanie programu XAMPP

Bezpieczeństwo bazy danych i jej zawartości jest niezwykle ważne. XAMPP zapewnia metodę zabezpieczenia bazy danych i tabel na naszym komputerze, co opisano w dalszej części rozdziału.

Gdzie są MariaDB i MySQL 8?

Możemy w tym miejscu być nieco zagubieni co do XAMPP i lokalizacji baz danych MariaDB. Twórcy XAMPP przeszli bowiem od korzystania z baz danych MySQL do baz danych MariaDB. Jednak wszystko, co omówiliśmy do tej pory, wskazywało, że MySQL jest nadal częścią XAMPP. Tak jednak nie jest. Gdy twórcy zdecydowali się na zamianę systemu bazy danych, musieli zrobić jedynie niewielkie zmiany w konfiguracji, w celu przejścia na MariaDB. Ponieważ działanie MariaDB nie różni się od bezpłatnej wersji MySQL, twórcy zdecydowali się na pozostawienie wszystkiego, co nosi nazwę MySQL. Ponieważ to środowisko pracy może być dla nas nowe, może to z początku mylić. Jednak obecnym użytkownikom XAMPP pozwoliło to na łatwe przejście między środowiskami baz danych. Pamiętajmy jedynie, że gdy w XAMPP zobaczymy MySQL, to chodzi o MariaDB.

Tytuł tej książki zawiera MySQL 8. MySQL 8 to pełna profesjonalna wersja z najnowszymi ulepszeniami, w tym narzędziami analizy biznesowej. Jednak MySQL 8 nie jest przeznaczone do XAMPP lub EasyPHP, a pełna wersja nie jest bezpłatna. Jeśli tworzymy witryny dla korporacji lub agencji rządowych, należy rozważyć stosowanie MySQL 8 (lub wersji najnowszej). Każda wersja MySQL może być podłączona do XAMPP. Musimy jednak przeczytać dokumentację MySQL, aby mieć pewność, że dołączana wersja jest kompatybilna z zainstalowanymi wersjami Apache i PHP. Dodanie nowej wersji MySQL to umiejętność na poziomie średnio zaawansowanym. Instrukcje znajdują się w ostatnim rozdziale i mogą się przydać, gdy będziemy gotowi na zmianę.

Używanie EasyPHP na naszym komputerze

Jeśli wolimy korzystać z EasyPHP lub jako początkujący zostaliśmy przekonani przez kolegów, że warto korzystać ze starszych wersji MySQL (czyli MariaDB nam nie odpowiada), możemy zainstalować EasyPHP, który jest pakietem WAMP obejmującym bezpłatną wersję MySQL. Zawiera on także system baz danych MongoDB, który jest bazą danych niebędącą SQL. W tej książce nie omawiamy MongoDB.

Nie ma powodu, aby instalować oba pakiety. Jednak jeśli zechcemy to zrobić, to możemy uruchomić tylko jeden z nich naraz lub musimy tak dostosować porty, aby oba mogły działać jednocześnie. Po zainstalowaniu zobaczymy, że oba pakiety działają w podobny sposób. Wszystkie przykłady zostały przetestowane w obu środowiskach.

Pobranie i instalacja EasyPHP

Aby pobrać najnowszą wersję EasyPHP, musimy przejść do następującej witryny:

www.easyphp.org

Pobieramy wersję easyPHP Development Server (która nie jest wersją beta), klikając przycisk Download (Pobierz) na środku strony głównej. Wersja użyta do uruchomienia i przetestowania przykładów z tej książki to 17.0. Obejmuje PHP 7.2, Apache 2.4 i MySQL 5.7 (najnowszą bezpłatną wersję). Jeśli zauważymy nowe wydanie (jak 18.0), musimy sprawdzić na witrynie tej książki w Apress, czy potrzebne są jakieś zmiany w kodzie pokazanych tu przykładów.

Program instalacyjny powinien rozpocząć się automatycznie. Środowisko system Windows będzie wymagać zgody na instalację przez naciśnięcie przycisku Tak. Gdy go klikniemy, procedura instalacyjna zapyta nas o preferencje językowe. Potem pozwoli nam na zmianę lokalizacji instalowanych plików. Jeśli nie mamy na komputerze uprawnień administratora (np. w pracy), nie będziemy mogli zainstalować EasyPHP jako Pliki programów. Sugerujemy zmianę lokalizacji instalowanych plików na poniższą:

C:\EasyPHP-DevServer-xx (xx oznacza instalowaną wersję, np. 17).

Klikamy Dalej. Proces instalacyjny zapyta wtedy, czy chcemy utworzyć ikonę na pulpicie. Sugerujemy, żeby to zrobić w celu łatwego dostępu. Klikamy Dalej. Bieżąca strona pokaże dla weryfikacji lokalizację instalacji. Klikamy Instaluj. Po zakończeniu instalacji, na ostatnim ekranie pojawi się pytanie, czy uruchomić serwer. Możemy go uruchomić, klikając Zakończ. Jeśli podczas instalacji pojawią się błędy, trzeba je skopiować do wyszukiwarki (jak Google), aby znaleźć rozwiązanie. Na pokazanej liście wybieramy dobrze znaną lokalizację i postępujemy zgodnie ze wskazówkami w celu naprawy błędu.

Uruchomienie EasyPHP

Przechodzimy do ikony EasyPHP w systemie i uruchamiamy stronę początkową. Jeśli się to nie uda, zamknijmy serwer deweloperski (klikamy na ikonie prawym przyciskiem myszy i wybieramy Zakończ). Spróbujmy użyć skrótu na pulpicie. Program wykorzystuje port 1111. Jeśli uruchomianie nadal nie działa, klikamy prawym przyciskiem myszy ikonę serwera dewelopera i wybieramy Tools (Narzędzia), a następnie Open Port Controller (Otwórz kontroler portów). Sprawdźmy, czy inny proces nie używa tego samego portu. Jeśli tak jest, musimy zatrzymać proces i powtórzyć poprzednie kroki.

Na ekranie głównym (rysunek 1.7) klikamy przycisk start znajdujący się pod HTTP SERVER. W ten sposób uruchomimy zarówno Apache, jak i MySQL. Jeśli start się powiedzie, to przycisk zmieni się w stop. W tym miejscu zarówno HTTP SERVER, jak i DATABASE SERVER powinny być wyświetlone z przyciskami stop pod ich tytułami. Jeśli natrafimy na błąd, musimy spróbować zatrzymać serwer deweloperski (klikając prawym przyciskiem myszy ikonę i wybierając Zakończ), a następnie zrestartować go (klikając ikonę na pulpicie). Jeśli nadal pojawią się błędy, musimy je skopiować do wyszukiwarki (jak Google), aby znaleźć rozwiązanie. Na pokazanej liście wybieramy dobrze znaną lokalizację i postępujemy zgodnie ze wskazówkami w celu naprawy błędu.

Rysunek 1.7. EasyPHP DevServer

Zamykanie EasyPHP

Gdy chcemy zamknąć EasyPHP, po prostu zamykamy serwer deweloperski z poziomu systemu, klikając prawym przyciskiem myszy ikonę i wybierając Quit. To zamyka wszystkie procesy związane z EasyPHP.

Bezpieczeństwo phpMyAdmin

Początkowa instalacja phpMyAdmin w ramach XAMPP i EasyPHP ma nazwę użytkownika root i nie ma hasła. Jeśli użyjemy tych ustawień na naszym komputerze, to istnieje zagrożenie bezpieczeństwa w przypadku połączenia z Internetem. Jeśli tworzymy bazy danych nie tylko na użytek osobisty lub do celów edukacyjnych, powinniśmy utworzyć hasło dla phpMyAdmin. Gdy pracujemy w jednym pokoju z innymi osobami, to hasło zapewni nam bezpieczeństwo, jeśli nie zostanie przekazane innym. Najlepszą praktyką jest ochrona hasłem naszego środowiska deweloperskiego.

Jeśli nie jesteśmy w phpMyAdmin, to musimy przejść do panelu sterowania XAMPP lub do strony easyPHP DevServer. W XAMPP klikamy admin na prawo od MySQL. W EasyPHP klikamy przycisk open na prawo od wersji phpMyAdmin wyświetlonej na stronie (rysunek 1.8).

Rysunek 1.8. Strona phpMyAdmin

Zauważmy, że jeśli zmieniliśmy port domyślny, to może być konieczne dodanie numeru portu przy uruchamianiu phpMyAdmin. Na przykład jeśli port został zmieniony na 8080, to adres dla phpMyAdmin jest następujący:

http://localhost:8080/phpMyAdmin/

Klikamy kartę User accounts (Konta użytkownika) w phpMyAdmin (rysunek 1.9).

Rysunek 1.9. Karta User accounts w phpMyAdmin

Klikamy Edit privileges (Edycja uprawnień) na prawo od ostatniej pozycji, root localhost. Wyświetli się strona Edit privileges (rysunek 1.10). Klikamy link Change password (Zmień hasło) u góry strony.

Rysunek 1.10. Strona Edit privileges w phpMyAdmin

W obu polach wpisujemy hasło. Klikamy przycisk OK u dołu strony. Jeśli hasło się zmieniło, to otrzymamy odpowiednie potwierdzenie. Musimy poinformować phpMyAdmin, że ma używać nowego hasła.

W XAMPP przechodzimy do folderu XAMPP na swoim komputerze. Otwieramy phpMyAdmin. Następnie otwieramy plik config.inc.php w Notatniku (lub innym edytorze).

W easyPHP przechodzimy do folderu EasyPHP-DevServer-xx, następnie do eds-modules i otwieramy folder phyMyAdmin. Potem otwieramy plik config.inc.php w Notatniku (lub innym edytorze).

Szukamy wpisu:

['auth_type'] = 'config';

Zmieniamy ten wiersz na poniższy:

['auth_type'] = 'cookie';

Zapisujemy plik.

Jeśli używamy XAMPP, wracamy do panelu sterowania. Zatrzymujemy i restartujemy MySQL. Wracamy do strony phpMyAdmin (http://localhost/phpMyAdmin/ lub http://localhost:8080/phpMyAdmin/). Strona powinna teraz wymagać podania identyfikatora użytkownika (root) oraz hasła (utworzonego przez nas).

Jeśli używamy EasyPHP, próbujemy wrócić na stronę DevServer i zrestartować serwery. Potem klikamy przycisk otwierania phpMyAdmin. Wprowadzamy identyfikator użytkownika (root) oraz hasło (utworzone przez nas). Jeśli po wprowadzeniu identyfikatora i hasła otrzymamy komunikat o błędzie wskazującym brak mysql_native_password, musimy wykonać następujące kroki.

Przechodzimy do folderu EasyPHP-DevServer-xx, następnie do eds-binaries, potem do dbserver, do folderu MySQL, a na koniec do folderu bin. Zawiera on kilka aplikacji, które mogą być użyte do uruchomienia i administrowania MySQL i phpMyAdmin. Jednak działają one tylko w interfejsie wiersza poleceń. Aby można je było łatwiej użyć i wykorzystać, umieścimy tę lokalizację w zmiennej Path naszego komputera. Pozwala to nam na wykonanie potrzebnego programu bez podawania całej ścieżki. Przechodzimy do wiersza URL w przeglądarce i dwukrotnie klikamy myszą adres. Pełny adres powinien być teraz podświetlony. Klikamy prawym przyciskiem myszy podświetlony adres i wybieramy Kopiuj.

Przechodzimy do ikony szukania (na dole okna systemowego), klikamy ją i wprowadzamy system variables. Klikamy Edit System Environmental Variables (Edytuj zmienne środowiska system). Pojawi się okno System Properties (Właściwości system). Klikamy przycisk Environmental Variables (Zmienne środowiskowe). W wyświetlonym polu (na górze dla wszystkich użytkowników komputera lub na dole dla identyfikatora, z którym jesteśmy zalogowani) wybieramy kod PATH. Klikamy przycisk Edit (Edycja). Klikamy przycisk New (Nowy). Pojawi się puste pole do wprowadzenia skopiowanej ścieżki. Klikamy w nim, potem klikamy prawym przyciskiem myszy, a następnie wybieramy Wklej (lub klawisze Ctrl+V). Skopiowana ścieżka znajdzie się w polu. Należy sprawdzić, czy jest to poprawna ścieżka do lokalizacji bin. Jeśli tak jest, klikamy przycisk OK. Nasz folder bin zostaje dodany do zmiennej PATH. Klikamy OK w każdym kolejnym oknie, aby je zamknąć i zatwierdzić zmiany. To spowoduje, że system Windows użyje nowej ścieżki PATH.

Po ponownym uruchomieniu komputera restartujemy EasyPHP DevServer i sprawdzamy, czy serwery HTTP i mySQL są uruchomione. Przechodzimy do ikony wyszukiwania w Windows i wprowadzamy cmd. Naciskamy Enter. Otworzy się okno wiersza poleceń. Jesteśmy teraz gotowi, aby dodać brakujący moduł do phpMyAdmin.

Wpisujemy mysql -u root i naciskamy klawisz Enter. Powinniśmy zobaczyć zgłoszenie mysql (mysql>). Wpisujemy use mysql; (trzeba pamiętać o średniku) i naciskamy klawisz Enter. To serwer informuje, że ma używać bazy danych MySQL. Wpisujemy poniższy wiersz, aby dodać brakującą wtyczkę:

update user set plugin='mysql_native_password' where user='root';

Powinniśmy zobaczyć „Query OK”. Teraz zmieniamy hasło w wierszu poleceń za pomocą poniższego polecenia:

update user set Password=PASSWORD('12345') where user='root';

12345 należy zastąpić ustawionym wcześniej hasłem. Ponownie powinien pojawić się komunikat „Query OK”. Wszystkie zmiany zostały wprowadzone. Zamykamy zgłoszenie mysql wpisując exit. Naciskamy X, aby zamknąć okno poleceń. Wracamy do phpMyAdmin i klikamy User accounts. Powinniśmy zobaczyć, że znacznik Yes jest ustawiony, co wskazuje, że root ma teraz hasło. Zauważmy, że EasyPHP może nadal automatycznie wpuścić nas do phpMyAdmin, mimo że hasło zostało ustawione.

Taka sytuacja z hasłem zachodzi z bieżącą wersją (z chwili wydania książki) bezpłatnej bazy MySQL. Jak zauważyliśmy wcześniej, nie pojawia się to w XAMPP, gdyż XAMPP używa MariaDB.

Jeśli opisane kroki sprawiają jakąś trudność i chcemy je powtórzyć, najlepiej odinstalować pakiet, korzystając z programu odinstalowującego z głównego folderu pakietu, a następnie ponownie zainstalować XAMPP lub EasyPHP. Jak już wspomniano, jeśli pojawi się komunikat o błędzie, trzeba go skopiować do wyszukiwarki (jak Google), aby znaleźć sugerowane rozwiązania.

Bezpośredni dostęp do phpMyAdmin

Jeśli zainstalowaliśmy XAMPP, a serwery zostały uruchomione, możemy uzyskać bezpośredni dostęp do phpMyAdmin, wprowadzając następujący URL do przeglądarki:

http://localhost/phpMyAdmin/ lub http://127.0.0.1/phpMyAdmin/

(Pamiętajmy o wpisaniu ukośnika na końcu wiersza i numeru portu, jeśli zmieniliśmy domyślny port numer 80.)

Jeśli zainstalowaliśmy easyPHP, a serwery zostały uruchomione, możemy uzyskać bezpośredni dostęp do phpMyAdmin, wprowadzając do przeglądarki jeden z poniższych URL:

http://localhost:8080/eds-modules/phpmyadmin470x170718155219/

http://127.0.0.1:8080/eds-modules/phpmyadmin470x170718155219/

(Nasza konkretna wersja phpmyadmin może być inna, co sprawi, że powstanie inny folder phyMyAdmin.)

Trzeba koniecznie wpisać http://, gdyż inaczej przeglądarka będzie szukać lokalizacji w Internecie, a nie na naszym komputerze.

Uwaga

Fragmenty opisujące zastosowanie phpMyAdmin można stosować na każdej platformie: XAMPP, WAMPServer lub easyPHP.

Można wcześniej ustawić hasło w XAMPP lub EasyPHP, aby przy każdym dostępie do phpMyAdmin trzeba było się logować i podać hasło. Zapobiega to dostępowi do naszej bazy danych przez internetowe roboty i inne osoby. W tym drugim przypadku ważne jest, aby uchronić się przed szpiegowaniem i szkodliwym działaniem w miejscu pracy, jeśli pracujemy z innymi osobami. Jeżeli utworzyliśmy hasło dla phpMyAdmin, to pojawi się okno dialogowe jak na rysunku 1.11.

Rysunek 1.11. Podawanie hasła w oknie dialogowym w celu uzyskania dostępu do phpMyAdmin

Wprowadzamy nazwę użytkownika (root) i hasło, a następnie klikamy przycisk Go. phpMyAdmin ładuje się dość wolno, ale w końcu się pojawi.

Warto pamiętać, że programy open source są stale poprawiane i uaktualniane, więc w naszym XAMPP lub EasyPHP możemy znaleźć nowszą wersję phpMyAdmin niż opisana w tej książce. Możemy też zobaczyć w głównym oknie phpMyAdmin komunikaty dotyczące aktualizacji. Tam, gdzie mamy do czynienia z danymi osobowymi, bezpieczeństwo jest niezwykle ważne, więc te stopniowe aktualizacje są dla nas dobre, choć oznaczają, że niektóre zrzuty ekranów z tej książki mogą niedokładnie pokazywać to, co widać na ekranie. Nie przejmujmy się nieco innym wyglądem interfejsu. Jego zastosowanie będzie zwykle podobne.

Interfejs phpMyAdmin może z początku wydawać się nieco przytłaczający, ale jego elementy będą omawiane w miarę ich stosowania.

Teraz wiemy, jak zainstalować bezpieczne XAMPP i easyPHP, a także wiemy, jak uruchamiać i zatrzymywać serwery. W większości są to zapewne nowe informacje, ale niektóre części będzie można rozpoznać, gdyż są zgodne z normalną organizacją plików i folderów w systemie Microsoft Windows.

Znane fragmenty

Struktura folderów i plików w pakiecie XAMPP jest znana użytkownikom systemu Windows, choć ich nazwy mogą być nierozpoznawalne.

Rysunek 1.12 przedstawia foldery XAMPP.

Rysunek 1.12. Foldery w pakiecie XAMPP; nasza lista może się nieco różnić

Na rysunku 1.12 zwróćmy uwagę na folder htdocs. Tam umieszczamy nasze pliki PHP i strony HTML dla naszej witryny i baz danych.

W folderze XAMPP znajduje się folder o nazwie MySQL. Zawiera on folder o nazwie data, w którym znajdują się wszystkie bazy danych i tabele. Baza danych musi mieć unikatową nazwę. Plik w folderze data zawiera wszystkie informacje o bazie danych, a jego rozszerzeniem jest *.opt.

Tabele są plikami. Gdy utworzymy jakieś tabele, one także znajdą się w folderze o nazwie data, a ich typem będzie *.frm.

Po otwarciu folderu EasyPHP--Devserver-xx w easyPHP zobaczymy folder eds-www. To tam umieszczamy nasze pliki PHP i strony HTML. Poniższa ścieżka pokazuje lokalizację plików baz danych:

C:\EasyPHP-Devserver-17\eds-binaries\dbserver\mysql5717x86x170717151041\data

Deweloperzy średniozaawansowani i zaawansowani mogą rozważyć utworzenie wirtualnych katalogów, w których znajdą się inne pliki wykonywalne. Temat ten nie jest omawiany w książce, ale dodatkowe informacje można znaleźć w Internecie, wyszukując XAMPP Virtual Directory lub easyPHP Virtual Directory.

Gdy już wiemy, jak wyglądają i działają narzędzia, z których będziemy korzystać, przejdziemy do następnego tematu. W kolejnej części rozdziału jest mowa o tworzeniu pierwszej bazy danych i tabeli.

Planowanie bazy danych – pierwszy krok

Pierwszy i najważniejszy etap to planowanie bazy danych, aby mieć coś praktycznego do wykorzystania. Przyjmijmy, że musimy zaplanować bazę danych członków organizacji.

Najpierw wybieramy nazwę bazy. Nadamy jej nazwę simpledb. Pamiętajmy, że baza danych przypomina pusty folder, który ewentualnie będzie zawierał jedną lub więcej tabel.

Następnie przygotujmy dane do tabeli. Nadamy tej tabeli nazwę users.

Dalej decydujemy o rodzaju informacji, którą zapiszemy w tabeli. Nasza decyzja nie jest wiążąca, gdyż podczas tworzenia możemy zmieniać dowolne części bazy danych. Przypuśćmy, że potrzebujemy pięciu różnych informacji dla użytkowników. Wprowadziliśmy pewne typowe dane w tabeli 1.1 na początku rozdziału i teraz w tabeli 1.2.

Tabela 1.2. Orientacyjny plan tabeli users zawartej w bazie danych simpledb

user_id

first_name

last_name

e-mail

password

registration_date

Kevin

Kettle

kev@kettle.co.uk

K3ttl2fur

Susan

Saucepan

sue@kitchen.org.uk

n@Sus5

Oliver

Oven

oliver@cooker.co.uk

H0tsts0v3

Każdy wiersz tabeli to rekord, a każda komórka to pole. Baza danych może zawierać więcej niż jedną tabelę. Aby pomóc w planowaniu tabeli, użyliśmy kilku fikcyjnych nazwisk. Pierwsza kolumna nosi nazwę user_id i stanowi dodatek do pięciu kolumn danych. Kolumna user_id jest omawiana dalej. Na razie zaakceptujmy jej obecność i pozostawmy ją pustą. Zostawmy także pustą kolumnę dat rejestracji (registration_date), gdyż będzie ona wypełniana automatycznie. Nie musimy wprowadzać tam wartości ani rezerwować miejsca.

Musimy przydzielić nieco miejsca na dane. Tabela 1.3 pokazuje liczbę znaków przydzielonych dla każdego elementu.

Tabela 1.3. Liczba dopuszczalnych znaków w kolumnie dla tabeli users

user_id

first_name

last_name

e-mail

password

registration_date

6

30

40

50

60

Zapiszmy lub wydrukujmy te dwie tabele i miejmy je przed sobą, gdyż będziemy się do nich odwoływać w następnych etapach.

Teraz wybierzmy nazwę i hasło dla bazy danych i zapiszmy te informacje w swoim notatniku. Potrzebne są nam cztery informacje: nazwa bazy danych, host, hasło oraz nazwa użytkownika. W tym projekcie są one następujące:

• Nazwa: simpledb

• Host: localhost

• Hasło: Hmsv1ct0ry1 (jest to słowo hmsvictory, ale pierwsza litera jest wielka, natomiast I zastąpiono jedynką, a 0 zerem, aby hasło było silne)

• Użytkownik: horatio

Aby wygenerować bezpieczniejsze hasło, można skorzystać z generatora haseł, zawartego w phpMyAdmin.

Teraz utworzymy naszą pierwszą bazę danych, wykorzystując phpMyAdmin.

Tworzenie bazy danych za pomocą phpMyAdmin

Otwieramy phpMyAdmin bezpośrednio, jak to opisano na początku tej części albo przez stronę administracyjną XAMPP lub easyPHP. Pamiętajmy, że korzystanie z phpMyAdmin wymaga uruchomienia serwera bazy danych.

Klikamy kartę Databases w górnym menu. Zobaczymy interfejs pokazany na rysunku 1.13.

Rysunek 1.13. Interfejs phpMyAdmin do tworzenia bazy danych

Wpisujemy nazwę bazy danych. W tym przykładzie jest to simpledb zapisana małymi literami. Trzeba zmienić Collation na utf8-general-ci. Domyślne ustawienie latin1_swedish_ci powoduje nieporozumienia.

Uwaga

Ustawienia określają rodzaj znaków, możliwości sortowania, wydajność i inne cechy danych. Wybranie utf8-general-ci oznacza starszy standard, który spełnia potrzeby przykładów zawartych w tej książce. Wymagania dla innego użytkownika mogą się różnić².

Klikamy przycisk Create (ustawiamy pole Collation na utf8-general-ci). Po kliknięciu strona zmieni się na stronę tworzenia tabeli. Jednak najpierw chcemy zmienić właściwości bazy danych. Kliknijmy strzałkę w lewo u góry strony (po lewej). Pozwoli ona wrócić do strony głównej. Klikamy ponownie kartę Databases. Teraz poprzednia strona będzie wyglądać jak na rysunku 1.14.

Rysunek 1.14. Dolna część strony z polem wyboru w pobliżu nazwy naszej bazy danych

Gdy wybierzemy pole obok nowej bazy danych, jak pokazano na rysunku 1.14, klikamy Check Privileges (Sprawdź uprawnienia), co przeniesie nas do ekranu, gdzie zobaczymy listę użytkowników, którzy mają dostęp do bazy danych. Aby baza danych była bezpieczna, musimy dodać nazwę użytkownika i hasło. Klikamy Add user account (Dodaj konto użytkownika), jak pokazano na rysunku 1.15.

Rysunek 1.15. Ikona Add user account znajduje się na dole tego rysunku

Kliknięcie Add user account przywoła na ekran konto użytkownika, co widać na rysunku 1.16.

Rysunek 1.16. Ten ekran pozwala nam na dodanie użytkownika i hasła

Ostrzeżenie

Dodanie nazwy użytkownika i hasła jest niezbędne. Inaczej nasza baza danych będzie niezabezpieczona i podatna na ataki przez roboty i pozbawionych skrupułów ludzi. Jest to najważniejsze przyzwyczajenie, które należy kultywować. Trzeba zapisać użytkownika i hasło w swoich notatkach. Hasło powinno być silne i ma zawierać kombinację wielkich i małych liter, cyfr i znaków specjalnych. Dokładne zapisanie haseł zaoszczędzi nam w przyszłości godzin frustracji.

Wykorzystując rozwijane menu, akceptujemy pole Use text (Użyj tekstu) w pierwszym polu i podajemy nazwę użytkownika w polu po prawej. W drugim polu, oznaczonym jako Host, wybieramy local. Słowo localhost pojawi się w polu po prawej stronie. Localhost to domyślna nazwa serwera w naszym komputerze. W trzecim polu podajemy hasło i potwierdzamy, przepisując je w polu poniżej. Przycisk Generate Password (Generuj hasło) utworzy silne losowe hasło, jeśli chcemy mieć coś wyjątkowego i bezpieczniejszego.

Przewijamy do Database, aby mieć konto użytkownika, i klikamy Grant all privileges on database (Nadaj wszystkie uprawnienia do bazy danych). Ponieważ jesteśmy administratorem, musimy zająć się każdym aspektem bazy danych. Dlatego musimy mieć wszystkie uprawnienia. Jeśli dodajemy innych użytkowników, musimy ograniczać ich uprawnienia, usuwając zaznaczenie z takich pól jak Drop (Porzuć), Delete (Usuń) i Shutdown (Zamknij).

Przewijamy na dół formularza i klikamy przycisk OK lub Go. Utworzyliśmy właśnie bazę danych i zabezpieczyliśmy ją przed atakiem. Baza danych może być traktowana jak pusty folder, który może zawierać jedną lub więcej tabel.

Uwaga

Jeśli pogubimy się przy korzystaniu z phpMyAdmin i nie wiemy, co dalej robić, możemy zawsze kliknąć mały domek w lewym górnym rogu strony. Jeśli ustawimy się nad ikoną, możemy stwierdzić, że jest to przycisk Home.

Teraz utworzymy naszą pierwszą tabelę.

Tworzenie tabeli za pomocą phpMyAdmin

Popracujmy teraz na witrynie phpMyAdmin, aby wstawić do bazy danych jedną lub więcej tabel z danymi. Ta strona da nam pełną kontrolę nad tabelami, wraz z usuwaniem błędów i tworzeniem kopii zapasowych.

Klikamy nazwę naszej nowej bazy danych. Znajdziemy ją na lewym panelu. Zobaczymy wtedy ekran pokazany na rysunku 1.17.

Rysunek 1.17. Aby utworzyć tabelę, klikamy przycisk Go na dole strony

Podajemy nazwę tabeli i liczbę kolumn. Następnie klikamy przycisk Go na dole strony. Zostaniemy przeniesieni na stronę z kolumnami odwróconymi o 90 stopni tak, że będą wyglądać jak wiersze. Pokazano to na rysunku 1.18. Pola są puste i czekają na zdefiniowanie przez nas tabeli.

Rysunek 1.18. Sześć wierszy reprezentuje sześć kolumn; ich nazwy będą wprowadzone w polach po lewej

Wykorzystujemy dane z tabel 1.2 i 1.3, które zaplanowaliśmy wcześniej, i podajemy nazwę kolumny, typ danych i liczbę znaków. Szczegóły dotyczące tworzenia tabeli użytkowników podano w tabeli 1.4.

Tabela 1.4. Atrybuty tabeli użytkowników

Column Name (Nazwa kolumny)

Type (Typ)

Length/Value (Długość/Wartość)

Default (Domyślnie)

Attributes (Atrybuty)

Null

Index (Indeks)

A_I

user_id

MEDIUMINT

6

None

Unsigned

PRIMARY

first_name

VARCHAR

30

None

last_name

VARCHAR

40

None

email

VARCHAR

50

None

password

CHAR

60

None

registration_date

DATETIME

Akceptujemy wszystkie ustawienia domyślne dla każdego elementu poza user_id. Tu musimy wybrać UNSIGNED, PRIMARY oraz typ. Zaznaczamy też pole A_I (automatyczna inkrementacja). Jeśli okaże się, że wartości 6, UNSIGNED i PRIMARY powodują błędy (lub ostrzeżenia) w naszej wersji phpMyAdmin, możemy pozostawić tam wartości domyślne. Dalej jest mowa o tym, że gdy klikniemy A_I, system zażąda wybrania PRIMARY. Natomiast MEDIUMINT domyślnie przyjmie wielkość 6.

Różne kategorie pod nagłówkiem Type będą omówione dalej. Nagłówek Length/Value (Długość/Wartość) odnosi się do maksymalnej liczby znaków. Dla daty rejestracji (registration_date) pole to jest puste, gdyż długość jest z góry określona. Nie wprowadzamy niczego pod nagłówkami Default ani NULL. Atrybut UNSIGNED oznacza, że liczba user_id nie może być ujemna. Index dla user_id to indeks podstawowy, natomiast A_I odnosi się do automatycznej inkrementacji numeru id. Użytkownicy wpisywani do bazy danych otrzymują unikatowy numer, który zwiększa się przy każdym dodaniu użytkownika. Gdy zaznaczymy pole wyboru A_I, wyskakujące okno może nas poprosić o potwierdzenie, czy jest to indeks podstawowy, i ponownie zapytać o jego wielkość. Nie wstawiamy wielkości w wyskakującym oknie. Jeśli to zrobimy, otrzymamy błąd. Rysunek 1.19 pokazuje ekran określania atrybutów.

Rysunek 1.19. Ten ekran pozwala nam podać tytuły kolumn i typ zawartości

Wiersze reprezentują tu kolumny i są bardzo szerokie. Ekran można przewijać w poziomie, aby wprowadzić informacje. Po przewinięciu w prawo znajdziemy więcej opcji, ale nie są nam one potrzebne w tym podręczniku.

Jak wypełnić te pola? Wprowadzamy sześć tytułów kolumn w polach pod nagłówkiem Name (Nazwa). W drugiej kolumnie wybieramy typ pól pod nagłówkiem Type (Typ). Wybieramy go z rozwijanego menu. Typy używane w tej tabeli są następujące:

• MEDIUMINT może przechowywać wartości całkowite z zakresu od minus 8388608 do plus 8388607. Możemy wybrać kategorię o mniejszym zakresie, SMALLINT, jeśli liczba użytkowników nigdy nie przekroczy 65535.

• VARCHAR określa łańcuch znakowy o zmiennej długości, zawierający od 0 do 255 znaków.

• CHAR to ciąg znaków tradycyjnie wykorzystywany na hasła. Musi on mieć długość 60 znaków, aby nasz kod PHP mógł mieszać hasła. Obecny algorytm mieszania w PHP przekształca hasło w zmieszany ciąg 60 znaków. Hasło użytkownika może mieć, powiedzmy, 6 lub 12 znaków, ale będzie zapisane w bazie danych jako zmieszany ciąg 60-znakowy. Jest to omówione w rozdziale 2.

Uwaga

Długość mieszanych haseł może być większa w nowszych wydaniach PHP. Przed podaniem długości tego pola w tabeli należy sprawdzić, jaki system mieszania jest stosowany w danej wersji.

• DATETIME przechowuje datę i godzinę w formacie RRRR-MM-DD GG:MM:SS.

W trzeciej kolumnie, pod nagłówkiem Length/Values (Długość/Wartość), wprowadzamy liczbę znaków pola. Odpowiednie liczby znajdują się w tabeli 1.4.

Pod nagłówkiem Default (Domyślne) akceptujemy domyślną wartość None (Brak). To pole pozwala nam wprowadzić wybraną wartość domyślną.

Możemy przewinąć ekran w prawo, aby dokończyć wypełnianie pól. Pod nagłówkiem Attributes (Atrybuty) używamy menu rozwijanego, aby wybrać UNSIGNED w przypadku user_id. To gwarantuje, że zakres wartości całkowitych jest od zera do 16777215. Dla user_id nie stosuje się wartości ujemnych.

Kolejne dwie pozycje dotyczą tylko identyfikatora user_id (rysunek 1.20).

Rysunek 1.20. Dwie dodatkowe pozycje dla kolumny user_id

Dla user_id, pod nagłówkiem Index, klikamy rozwijane menu, aby wybrać PRIMARY. Kolumna user_id powinna zawsze stanowić podstawowy indeks.

Pod nagłówkiem A_I, wybieramy najwyżej położone pole wyboru, aby numer user_id był automatycznie powiększany przy dodawaniu nowego rekordu do bazy danych. Zgodnie z tym, co było powiedziane, możemy zobaczyć wyskakujące okno z pytaniem o sprawdzenie, czy jest on podstawowy i jaki ma rozmiar. Nie wprowadzamy wielkości w wyskakującym oknie. Sprawdzamy i ewentualnie uzupełniamy brakujące informacje i klikamy OK.

Podajemy dodatkowe informacje pokazane w tabelach i na rysunku 1.20. Po zakończeniu wprowadzania informacji przewijamy okno na dół i klikamy przycisk SAVE (Zapisz).

Ostrzeżenie

Jeśli zapomnimy wybrać pola A_I dla user_id, otrzymamy komunikat o błędzie, gdy w przyszłości spróbujemy wstawić drugi rekord. Komunikat poinformuje nas, że próbujemy utworzyć zdublowaną wartość 0 dla user_id.

Niektórzy przy tworzeniu tabeli wolą korzystać z GUI i wiersza poleceń. phpMyAdmin pozwala nam na to, wykorzystując język SQL. Jednak w tej książce korzystamy przede wszystkim z GIU phpMyAdmin. Alternatywa z wykorzystaniem SQL jest opisana poniżej. Można teraz opuścić tę cześć rozdziału, ale zalecam powrót do niej w przyszłości, gdyż SQL jest z pewnością wykorzystywany w bardziej zaawansowanych książkach i podręcznikach SQL.

Alternatywa z zastosowaniem SQL

Tu opisujemy szybszy sposób korzystania z phpMyAdmin do tworzenia bazy danych i tabeli. SQL oznacza Structured Query Language (Strukturalny język zapytań). To oficjalny język MySQL MariaDB i wielu innych baz danych. Miłą niespodzianką jest fakt, że używa on poleceń w języku angielskim. Jedyny problem stanowi fakt, że w oknie SQL łatwiej popełnić literówki i błędy w pisowni niż w interfejsie phpMyAdmin pokazanym wcześniej na rysunku 1.19.

Przy korzystaniu z SQL można utworzyć kompletną bazę danych z nazwą użytkownika i hasłem. Oszczędza to wykonywania kilku kroków.

Zakładamy, że mamy już bazę danych o nazwie simpledb, więc nie możemy ponownie użyć tej nazwy. Przypuśćmy, że administrator (Adrian) chce utworzyć bazę danych o nazwie members, wykorzystując następujące informacje:

• Nazwa bazy danych: members

• Uprawnienia: all

• Nazwa użytkownika: adrian

• Hasło: stapler12

Rysunek 1.21 pokazuje kod potrzebny do utworzenia bazy danych w oknie SQL.

Rysunek 1.21. Okno SQL

W phpMyAdmin klikamy New na „drzewie” bazy danych w panelu po lewej stronie okna, aby poinformować phpMyAdmin, że nie używamy już bazy danych simpleDB. Klikamy kartę SQL (pokazaną w kółku), aby wyświetlić okno SQL.

Szczegóły pokazane na rysunku 1.21 trzeba wprowadzić w następującej postaci:

CREATE DATABASE members;

GRANT ALL

ON members.*

TO 'adrian'

IDENTIFIED BY 'stapler12';

Elementy wpisujemy jak powyżej, w oddzielnych wierszach, naciskając Enter po każdym z nich. Słowa kluczowe SQL (takie jak CREATE DATABASE; Utwórz bazę danych) tradycyjnie pisze się wielkimi literami. Inne elementy są zwykle wpisywane małymi literami. Zwróćmy uwagę na średniki i pojedyncze cudzysłowy – są one ważne. Gdy zakończymy pisanie, naciskamy przycisk Go.

Jeśli kod został podany poprawnie, będą wyświetlone dwie instrukcje zapytania wskazujące, że baza danych została utworzona, a adrian dołączony jako jej użytkownik. Wskażą też pusty zbiór wynikowy. Jest to w porządku, gdyż w bazie danych nic nie ma.

Teraz, wykorzystując okno SQL, w bazie danych members utworzymy tabelę o nazwie users.

Klikamy bazę danych members w „drzewie” bazy danych w lewym panelu phpMyAdmin. Jeśli elementy bazy danych się nie pojawią, odświeżamy stronę, aby tak się stało. Otwieramy okno SQL i wprowadzamy, co następuje:

CREATE TABLE users (

user_id MEDIUMINT (6) UNSIGNED

AUTO_INCREMENT,

first_name VARCHAR(30) NOT NULL,

last_name VARCHAR(40) NOT NULL,

email VARCHAR(50) NOT NULL,

password CHAR(60) NOT NULL,

registration_date DATETIME,

PRIMARY KEY (user_id)

);

NOT NULL znajdujące się w powyższym kodzie będzie nakazywać wprowadzenie danych w polu. Jest to pole wymagane. W tym przykładzie wszystkie pola są wymagane, gdyż pole registration_date jest wypełniane automatycznie.

Rysunek 1.22 pokazuje szczegóły w oknie SQL.

Rysunek 1.22. Tworzenie tabeli w oknie SQL phpMyAdmin

Zauważmy, że są to nawiasy zwykłe (okrągłe), a nie klamrowe. Po każdym wierszu naciskamy klawisz Enter, pamiętając, aby na końcu ostatniego wiersza umieścić nawias zamykający i średnik. Każdy element jest oddzielony zamykającym przecinkiem (wiersze od 3 do 8). Jeśli nasza tabela ma sześć kolumn, powinno być sześć przecinków. Klikamy przycisk Go i dodajemy tworzoną tabelę.

Wskazówka

Zachęcamy wszystkich do zapoznania się z opisaną tu tematyką SQL. Umiejętność pracy w SQL stanowi użyteczną alternatywę w przyszłości. W Internecie można znaleźć wiele bezpłatnych podręczników SQL-a.

Usuwanie baz danych i tabel

Podczas nauki osoby początkujące często muszą zaczynać tworzenie bazy danych lub tabeli od nowa, więc mogą chcieć usunąć wcześniejsze próby. Przy pierwszym użyciu phpMyAdmin możemy dać się ponieść, tworząc kilka baz danych i tabel. Potem możemy zdecydować, że posprzątamy ten bałagan i usuniemy część z nich.

Popatrzmy, jak usunąć bazę danych. Jeśli phpMyAdmin nie jest otwarty, uruchamiamy go jedną z opisanych wcześniej metod. Wybieramy kartę Databases (pokazaną na rysunku 1.23), a następnie wybieramy pole znajdujące się obok bazy, którą chcemy usunąć.

Rysunek 1.23. Usuwanie bazy danych

Gdy wybierzemy bazę danych do usunięcia, klikamy ikonę Drop (Usuń), na dole po prawej stronie. Otrzymamy pytanie, czy na pewno chcemy usunąć bazę danych. Możemy potwierdzić usunięcie. Wszystko, co jest związane z tą bazą danych, zostanie usunięte, w tym jej tabele. W przypadku powodzenia otrzymamy komunikat mówiący, że baza danych została usunięta.

Możemy też chcieć zachować bazę danych, ale usunąć jedną tabelę lub wszystkie. W phpMyAdmin wybieramy bazę danych w „drzewie” w lewym panelu. Na kolejnym ekranie zobaczymy tabele. Wybieramy pole obok tabel, które chcemy usunąć. Rysunek 1.24 pokazuje tabelę users z bazy danych simpledb.

Po wybraniu tabeli do usunięcia klikamy ikonę Drop (na prawo od nazwy tabeli). Otrzymamy pytanie, czy naprawdę chcemy usunąć tabelę. Możemy wybrać odpowiedź Drop lub Cancel.

Rysunek 1.24. Usuwanie tabeli w phpMyAdmin

Podsumowanie

W tym rozdziale zdefiniowaliśmy bazę danych, a następnie zapoznaliśmy się z dwiema bezpłatnymi platformami do tworzenia i testowania baz danych oraz plików PHP. Mam nadzieję, że udało się pobrać i zainstalować XAMPP lub easyPHP. Przeanalizowaliśmy phpMyAdmin i dowiedzieliśmy się, jak wykorzystać go do utworzenia bazy danych i tabeli. Poznaliśmy także SQL jako alternatywną metodę tworzenia baz danych i tabel. Dowiedzieliśmy się, jak zabezpieczyć phpMyAdmin i bazy danych za pomocą nazwy użytkownika i hasła, a także jak usuwać bazy danych i tabele, wykorzystując w tym celu phpMyAdmin. W następnym rozdziale utworzymy i przetestujemy proste interaktywne witryny internetowe.

Rozdział 2.
Tworzenie witryn internetowych, które mają interakcję z użytkownikami

Ten rozdział pokazuje, jak prosta baza danych może zostać połączona z witryną tak, że strona może mieć interakcję z użytkownikami. Ludzie będą mieli dostęp do witryny, ale nie będą mieli dostępu do struktury bazy danych lub danych zawartych w jej tabelach. Nie będą mogli oglądać chronionych stron takich jak strona tylko dla członków, gdyż nie będą znać hasła do czasu rejestracji. Jednak projektant witryny musi zapewnić sposób, aby użytkownicy wchodzili w interakcję z bazą danych w celu zarejestrowania swojego członkostwa, przeszukania bazy danych i zmiany hasła. Język PHP i kod SQL zapewnią nam rozwiązanie.

Po ukończeniu tego rozdziału będziemy potrafili:

• utworzyć bazę danych i szablon dla witryny,

• zrozumieć i wykorzystać funkcję include w PHP,

• zrozumieć, jak serwer przetwarza stronę PHP,

• utworzyć interaktywną stronę szablonu,

• wykorzystać mysqli do połączenia się z bazą danych,

• utworzyć stronę rejestracyjną dla członków organizacji,

• zrozumieć i użyć polecenia PHP echo(),

• utworzyć lepkie formularze (sticky forms),

• używać prostych tablic,

• utworzyć formularze, które wyświetlają rekordy członków,

• utworzyć kod, który miesza hasło.

Do naszych interaktywnych stron wykorzystamy bazę danych simpledb i tabelę użytkowników z poprzednich projektów. Trzeba pamiętać, że przykłady z tego podręcznika nie nadają się do praktycznego zastosowania ani nie są zabezpieczone. Jest to pierwszy krok w kierunku bezpieczniejszych i bardziej ambitnych projektów opisanych w kolejnych rozdziałach. W praktyce nigdy nie pozwolimy zwykłym członkom na oglądanie całej listy członków. Interaktywne elementy tego projektu są następujące:

• Użytkownicy mogą się rejestrować jako członkowie, wprowadzając informacje na swój temat do formularza wyświetlonego na ekranie. Szczegóły rejestracji są wprowadzane do tabeli bazy danych i mogą być wykorzystane przez administratora do wysyłania korespondencji do członków.

• Zarejestrowani użytkownicy mogą zmienić swoje hasło.

• Użytkownik może obejrzeć listę członków (tylko w tym projekcie). W następnych rozdziałach ta możliwość będzie dostępna tylko dla zarządcy witryny oraz (w ograniczonym zakresie) dla sekretarza ds. członkostwa.

Z następujących powodów ten przykład nie nadaje się do praktycznego zastosowania:

• Nie ma warunków, aby zarejestrowani członkowie logowali się następnie do specjalnej części lub strony. Problem ten jest omawiany w rozdziale 3.

• Użytkownicy nigdy nie powinni mieć dostępu do szczegółów tabeli członków.

• Na tym etapie, dla uproszczenia, zapewniono ograniczone filtrowanie informacji o użytkownikach. Tabela może więc zawierać niepoprawne dane oraz fikcyjne adresy e-mail.

• Tylko w tym rozdziale każdy użytkownik, który zna adres e-mail członka i jego stare hasło, może zmienić jego hasło.

Wszystkie te zagadnienia związane z bezpieczeństwem są omawiane w kolejnych rozdziałach. Pomimo wad ten projekt da nam wartościowe umiejętności praktyczne w zakresie kodowania i testowania stron. Poznamy także żargon bazodanowy i część podstawowego kodu PHP.

Tworzenie folderu do przechowywania stron bazy danych

W folderze htdocs w XAMPP lub folderze eds-www w easyPHP tworzymy nowy podfolder o nazwie simpledb. Wszystkie strony tworzone w tym rozdziale są umieszczane w folderze simpledb. Mamy wybór między ręcznym kodowaniem plików na podstawie dostarczonych listingów lub pobraniem kodu książki do folderu simpledb. (Możemy pobrać kod z https://github.com/Apress/practical-php7-mysql8-mariadb-website-databases). Zalecamy wpisanie kodu w tym rozdziale. Pliki są niewielkie i nie zajmie to długo. Nauczymy się więcej i szybciej, jeśli wpiszemy i przetestujemy kod, zwłaszcza robiąc błędy i samemu je poprawiając.

Tworzenie tymczasowego szablonu

Oczywiście niektóre aspekty interaktywnej bazy danych muszą być dostępne dla użytkowników. Oznacza to włączenie jej do prawdziwej witryny. Nazwiemy naszą witrynę template.php (jak to pokazano na rysunku 2.1). Jak widać, mamy tu nagłówek, treść, pasek nawigacji po lewej stronie, kolumnę informacyjną po prawej oraz stopkę u dołu strony.

Na listingu 2.1 część nagłówkowa zawiera DOCTYPE, tytuł strony oraz odnośnik do arkusza stylu Bootstrap. Treść strony zawiera trochę kodu PHP, który zostanie wyjaśniony krok po kroku po listingu.

Rysunek 2.1. Szablon

Ponieważ plik zawiera kod PHP (nie ma znaczenia, że jest go niewiele), plik jest zapisany z rozszerzeniem .php.

<!DOCTYPE html>

<html lang="en">

<head>

  <title>Template for an interactive web page</title>

  <meta charset="utf-8">

  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

  <!-- Bootstrap CSS File  -->

  <link rel="stylesheet"

  href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css"

  integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4"

  crossorigin="anonymous">

</head>

<body>

<div class="container" style="margin-top:30px">

<!-- Header Section

#1-->

<header class="jumbotron text-center row"

style="margin-bottom:2px; background:linear-gradient(white, #0073e6);padding:20px;">

  <?php include('header-for-template.php'); ?>

</header>

<!-- Body Section

#2-->

  <div class="row" style="padding-left: 0px;">

<!-- Left-side Column Menu Section -->

  <nav class="col-sm-2">

      <ul class="nav nav-pills flex-column">

        <?php include('nav.php'); ?>

      </ul>

  </nav>

<!-- Center Column Content Section -->

  <div class="col-sm-8">

     <h2 class="text-center">This is the Home Page</h2>

        <p>The home page content. The home page content. The home page content. The home page content. <br>

        The home page content. The home page content. The home page content. The home page content. <br>

        The home page content. The home page content. <br>

        The home page content. The home page content. The home page content. </p>

  </div>

<!-- Right-side Column Content Section

#3-->

   <aside class="col-sm-2">

       <php include('info-col.php'); ?>

   </aside>

</div>

<!-- Footer Content Section

#4-->

<footer class="jumbotron text-center row"

style="padding-bottom:1px; padding-top:8px;">

  <?php include('footer.php'); ?>

</footer>

</div>

</body>

</html>

Listing 2.1. Tworzenie szablonu dla projektu (template.php)

Uwaga

Znacznik <?php informuje serwer, że dalej następuje kod w PHP. Znacznik ?> pozwala serwerowi na określenie, kiedy następuje koniec kodu. Serwer przekaże kod między

tymi znacznikami do wykonania przez interpreter PHP. Kod poza tymi znacznikami to kod w HTML i JavaScript, który zostanie wysłany do przeglądarki użytkownika bez dodatkowego przetwarzania.

Kod PHP pokazany na listingu 2.1 zawiera funkcję include(), którą objaśniono poniżej. (Ściśle mówiąc, funkcja include() jest konstrukcją języka PHP, ale różnica jest tak mała, że będziemy dla uproszczenia nazywać ją funkcją).

Przypisy

1 Odpowiednik polskiego RODO (przyp. tłum.).

2 Jeśli w bazie danych mają być polskie znaki diakrytyczne, należy wybrać inny kod, zapewne standardowy Unicode (przyp. tłum.).