Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00035 005334 19042166 na godz. na dobę w sumie
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie V - książka
PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie V - książka
Autor: Liczba stron: 704
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-4466-2 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> mysql - programowanie
Porównaj ceny (książka, ebook (-35%), audiobook).

Język PHP i serwer bazy danych MySQL stały się nieformalnym standardem tworzenia dynamicznych witryn, które korzystają z baz danych. Mimo że istnieje wiele innych konkurencyjnych technologii, rzesza programistów aplikacji internetowych decyduje się właśnie na to rozwiązanie. Otwarte źródła, dostępność, coraz szersze możliwości, elastyczność i szybkość, konsekwentny rozwój - to tylko kilka zalet PHP i MySQL. Projektanci dynamicznych stron WWW wysoce sobie cenią te zalety, o czym świadczy choćby stale wzrastająca liczba stron WWW, które napisano z wykorzystaniem tych technologii.

Ta książka jest doskonałym poradnikiem dla projektantów dynamicznych stron WWW. Szczególnie przydatna okaże się dla osób dopiero nabierających wprawy w programowaniu. W przejrzysty sposób opisano podstawy języków PHP oraz SQL. Przedstawiono zasady poprawnego konfigurowania serwerów PHP i MySQL. Uwzględniono zagadnienia dotyczące obsługi i usuwania błędów, a także przeprowadzania testów aplikacji. Szeroko potraktowano kwestie bezpieczeństwa aplikacji. Znalazło się tu również sporo informacji o integracji PHP z takimi technologiami jak JavaScript, jQuery, Perl czy Ajax. Przy tym wszystkim książka jest napisana w sposób bardzo przystępny, a liczne przykłady znakomicie ułatwiają zrozumienie prezentowanych treści.

Najważniejsze zagadnienia przedstawione w książce:

PHP i MySQL - wydajne, niezawodne, stabilne działanie!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: PHP and MySQL for Dynamic Web Sites: Visual QuickPro Guide (5th Edition) Tłumaczenie: Piotr Rajca ISBN: 978-83-283-4466-2 Authorized translation from the English language edition, entitled: VISUAL QUICKPRO GUIDE: PHP AND MYSQL FOR DYNAMIC WEB SITES, Fifth Edition; ISBN 0134301846; by Larry Ullman; published by Pearson Education, Inc, publishing as Peachpit Press. Copyright © 2018 by Larry Ullman. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. Polish language edition published by HELION S.A. Copyright © 2018. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz HELION SA dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. HELION SA ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/phmys5.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/phmys5 Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treści Wprowadzenie ............................................................................................................................................ 11 Rozdział 1. Wprowadzenie do PHP .......................................................................................................................... 27 Podstawy składni .....................................................................................................................................28 Przesyłanie danych do przeglądarki internetowej ........................................................................32 Wstawianie komentarzy .........................................................................................................................36 Co to są zmienne? ...................................................................................................................................40 Łańcuchy .................................................................................................................................................... 44 Łączenie łańcuchów ............................................................................................................................... 47 Liczby ...........................................................................................................................................................49 Stałe .............................................................................................................................................................52 Apostrof kontra cudzysłów ...................................................................................................................55 Proste sposoby usuwania błędów .....................................................................................................58 Podsumowanie i kontynuacja ..............................................................................................................60 Rozdział 2. Programowanie w PHP ...........................................................................................................................61 Tworzenie formularza w języku HTML ..............................................................................................62 Obsługa formularza HTML .................................................................................................................... 67 Wyrażenia warunkowe i operatory ..................................................................................................... 71 Weryfikacja danych z formularza ........................................................................................................ 75 Co to są tablice? ........................................................................................................................................ 81 Pętle for i while .........................................................................................................................................96 Podsumowanie i kontynuacja ..............................................................................................................99 Rozdział 3. Tworzenie dynamicznych stron WWW ..............................................................................................101 Stosowanie plików zewnętrznych .................................................................................................... 102 Wyświetlanie i obsługa formularzy, po raz wtóry ...........................................................................111 Tworzenie formularzy z pamięcią .......................................................................................................117 5 Poleć książkęKup książkę Tworzenie własnych funkcji .................................................................................................................121 Podsumowanie i kontynuacja .............................................................................................................138 Rozdział 4. Wprowadzenie do MySQL-a ...............................................................................................................139 Elementy bazy danych i ich nazwy ...................................................................................................140 Wybór typu kolumny ..............................................................................................................................142 Wybór innych właściwości kolumn ...................................................................................................146 Korzystanie z serwera MySQL ............................................................................................................149 Podsumowanie i kontynuacja .............................................................................................................156 Rozdział 5. Wprowadzenie do SQL-a .....................................................................................................................157 Tworzenie baz danych i tabel ............................................................................................................158 Wstawianie rekordów .............................................................................................................................161 Wybieranie danych ................................................................................................................................166 Wyrażenia warunkowe ..........................................................................................................................168 Stosowanie LIKE i NOT LIKE ................................................................................................................ 171 Sortowanie wyników zapytania .......................................................................................................... 173 Ograniczanie wyników zapytania ......................................................................................................175 Aktualizacja danych ............................................................................................................................... 177 Usuwanie danych ...................................................................................................................................179 Stosowanie funkcji ..................................................................................................................................181 Podsumowanie i kontynuacja .............................................................................................................192 Rozdział 6. Projektowanie baz danych ..................................................................................................................193 Normalizacja .............................................................................................................................................194 Tworzenie indeksów ............................................................................................................................207 Stosowanie różnych typów tabel ......................................................................................................210 Języki i MySQL ........................................................................................................................................212 Strefy czasowe a MySQL .....................................................................................................................217 Ograniczenia klucza obcego .............................................................................................................223 Podsumowanie i kontynuacja ........................................................................................................... 230 Rozdział 7. Zaawansowany SQL i MySQL .............................................................................................................231 Złączenia ..................................................................................................................................................232 Grupowanie wyników zapytania .......................................................................................................242 Zaawansowane wybieranie danych ................................................................................................246 Wyszukiwanie FULLTEXT .................................................................................................................. 250 Optymalizacja zapytań ........................................................................................................................ 258 Wykonywanie transakcji ..................................................................................................................... 262 Szyfrowanie baz danych .................................................................................................................... 265 Podsumowanie i kontynuacja ........................................................................................................... 268 6 Spis treści Poleć książkęKup książkę Rozdział 8. Obsługa i usuwanie błędów ............................................................................................................. 269 Typy błędów i ich usuwanie .............................................................................................................. 270 Wyświetlanie błędów PHP ................................................................................................................. 276 Sterowanie raportowaniem błędów PHP .......................................................................................278 Tworzenie własnych funkcji obsługi błędów ................................................................................ 281 Techniki usuwania błędów z kodu PHP ........................................................................................ 286 Techniki usuwania błędów SQL i MySQL .....................................................................................290 Podsumowanie i kontynuacja ........................................................................................................... 292 Rozdział 9. PHP i MySQL .......................................................................................................................................... 293 Modyfikacja szablonu .......................................................................................................................... 294 Nawiązywanie połączenia z serwerem MySQL .......................................................................... 296 Wykonywanie prostych zapytań ....................................................................................................... 301 Odczytywanie wyników zapytania ................................................................................................... 310 Bezpieczeństwo zapytań .....................................................................................................................314 Zliczanie zwróconych rekordów ........................................................................................................319 Aktualizacja rekordów w PHP ........................................................................................................... 322 Podsumowanie i kontynuacja ........................................................................................................... 330 Rozdział 10. Popularne techniki programistyczne ................................................................................................331 Przekazywanie wartości do skryptu ................................................................................................ 332 Stosowanie ukrytych pól formularzy ............................................................................................... 336 Edycja istniejących rekordów ........................................................................................................... 342 Stronicowanie wyników zapytań ...................................................................................................... 349 Wyświetlanie tabel z możliwością sortowania ..............................................................................357 Podsumowanie i kontynuacja ........................................................................................................... 362 Rozdział 11. Tworzenie aplikacji internetowych .................................................................................................. 363 Wysyłanie poczty elektronicznej ..................................................................................................... 364 Obsługa przesyłania plików ...............................................................................................................370 Skrypty PHP i JavaScript ..................................................................................................................... 382 Nagłówki HTTP ...................................................................................................................................... 390 Funkcje daty i czasu ............................................................................................................................. 396 Wykonywanie transakcji ..................................................................................................................... 400 Podsumowanie i kontynuacja ........................................................................................................... 406 Rozdział 12. Ciasteczka i sesje ..................................................................................................................................407 Strona logowania .................................................................................................................................. 408 Funkcje logowania ..................................................................................................................................411 Posługiwanie się ciasteczkami ...........................................................................................................416 Sesje ......................................................................................................................................................... 430 Zwiększanie bezpieczeństwa sesji ..................................................................................................438 Podsumowanie i kontynuacja ............................................................................................................442 Spis treści 7 Poleć książkęKup książkę Rozdział 13. Zabezpieczenia ......................................................................................................................................443 Zapobieganie spamowi .......................................................................................................................444 Walidacja plików według typu ............................................................................................................451 Walidacja plików na podstawie typu ...............................................................................................457 Zapobieganie atakom XSS ..................................................................................................................461 Stosowanie rozszerzenia Filter .........................................................................................................464 Zapobieganie wstrzykiwaniu SQL ....................................................................................................468 Zabezpieczanie haseł w PHP ............................................................................................................475 Podsumowanie i kontynuacja ............................................................................................................484 Rozdział 14. Wyrażenia regularne Perl ....................................................................................................................485 Skrypt testujący ......................................................................................................................................486 Definiowanie prostych wzorców ...................................................................................................... 490 Stosowanie kwantyfikatorów .............................................................................................................493 Klasy znaków ..........................................................................................................................................495 Wyszukiwanie wszystkich dopasowań ...........................................................................................498 Stosowanie modyfikatorów ............................................................................................................... 502 Dopasowywanie i zastępowanie wzorców .................................................................................. 504 Podsumowanie i kontynuacja ........................................................................................................... 508 Rozdział 15. Wprowadzenie do jQuery .................................................................................................................. 509 Czym jest jQuery? ...................................................................................................................................510 Dołączanie jQuery do stron WWW ...................................................................................................512 Stosowanie jQuery .................................................................................................................................515 Wybieranie elementów stron ..............................................................................................................518 Obsługa zdarzeń ....................................................................................................................................521 Operacje na DOM ................................................................................................................................ 525 Stosowanie Ajaxa ...................................................................................................................................531 Podsumowanie i kontynuacja ............................................................................................................544 Rozdział 16. Wprowadzenie do programowania obiektowego ......................................................................545 Informacje podstawowe i składnia ..................................................................................................546 Korzystanie z MySQL-a ........................................................................................................................549 Klasa DateTime ......................................................................................................................................564 Podsumowanie i kontynuacja ............................................................................................................572 Rozdział 17. Forum dyskusyjne — przykład ..........................................................................................................573 Baza danych ............................................................................................................................................574 Szablony ...................................................................................................................................................583 Strona główna .........................................................................................................................................591 Strona forum ........................................................................................................................................... 592 Strona wątku ...........................................................................................................................................597 8 Spis treści Poleć książkęKup książkę Wstawianie wiadomości .....................................................................................................................602 Podsumowanie i kontynuacja ............................................................................................................ 612 Rozdział 18. Rejestracja użytkowników — przykład .............................................................................................613 Tworzenie szablonu ...............................................................................................................................614 Skrypty konfiguracyjne ........................................................................................................................620 Tworzenie strony głównej .................................................................................................................. 628 Rejestracja ............................................................................................................................................... 630 Aktywacja konta .................................................................................................................................... 640 Logowanie i wylogowywanie się ..................................................................................................... 643 Zarządzanie hasłami ............................................................................................................................650 Podsumowanie i kontynuacja ...........................................................................................................660 Dodatek A Instalacja ................................................................................................................................................... 661 Instalacja w systemie Windows ........................................................................................................ 662 Instalacja w systemie macOS ............................................................................................................ 665 Zarządzanie użytkownikami MySQL ............................................................................................... 667 Testowanie instalacji ............................................................................................................................ 672 Konfigurowanie PHP ............................................................................................................................ 675 Konfiguracja serwera Apache ............................................................................................................678 Skorowidz ................................................................................................................................................ 689 Spis treści 9 Poleć książkęKup książkę 10 Spis treści Poleć książkęKup książkę 9 PHP i MySQL W tym rozdziale Modyfikacja szablonu Nawiązywanie połączenia z serwerem MySQL Wykonywanie prostych zapytań Odczytywanie wyników zapytania Bezpieczeństwo zapytań Zliczanie zwróconych rekordów Aktualizacja rekordów w PHP Podsumowanie i kontynuacja 294 296 301 310 314 319 322 330 Teraz, gdy dysponujesz już podstawowymi wiadomościami na temat PHP, SQL-a i MySQL-a, pora użyć tych technologii razem. Silna integracja PHP z MySQL-em jest jednym z głównych powodów ich popularności wśród programistów. Będziesz zaskoczony, jak łatwo można tworzyć aplikacje przy użyciu tych technologii. W tym rozdziale wykorzystam bazę sitename (utworzoną w rozdziale 5., „Wprowadzenie do SQL-a”) i opracuję w PHP interfejs umożliwiający wykonywanie operacji na tabeli users. Informacje i przykłady zawarte w tym rozdziale dadzą Ci podstawy do tworzenia wszelkiego rodzaju aplikacji PHP-MySQL, ponieważ pewne uniwersalne reguły są w każdym przypadku takie same. Zanim przystąpisz do lektury tego rozdziału, powinieneś dobrze opanować materiał przedstawiony w pierwszych ośmiu. Dotyczy to również poznania technik usuwania i obsługi błędów przedstawionych w poprzednim rozdziale. Pamiętaj, że w celu wykonywania przykładów przedstawionych w tym rozdziale będziesz potrzebował działającego serwera internetowego obsługującego PHP, a także dostępu do serwera MySQL. 293 Poleć książkęKup książkę Modyfikacja szablonu Ponieważ wszystkie strony, jakie utworzę w tym i w kolejnym rozdziale, będą częścią tej samej aplikacji internetowej, warto poświęcić trochę czasu na opracowanie dla nich odpowiedniego szablonu. Zamiast tworzyć go od zera, wykorzystam szablon przygotowany w rozdziale 3., „Tworzenie dynamicznych stron WWW”, wprowadzając jedynie drobne modyfikacje w łączach nagłówka. Aby utworzyć plik nagłówkowy: 1. Otwórz plik naglowek.html (listing 3.2) w edytorze tekstów lub IDE. 2. Zmień listę łączy w poniższy sposób (listing 8.1). ul class= nav navbar-nav li class= active a href= index.php Strona domowa /a /li li a href= rejestracja.php Zarejestruj się /a /li li a href= pokaz_uzytkownikow.php Użytkownicy /a /li li a href= zmiana_hasla.php Zmień hasło /a /li /ul Wszystkie przykłady zamieszczone w tym rozdziale będą używać stron rejestracji, wyświetlania zarejestrowanych użytkowników i zmiany hasła. Natomiast łącza do stron kalendarza i kalkulatora można usunąć. Listing 9.1. Plik nagłówka stosowany w szablonie stron i zawierający nowe łącza nawigacyjne 1 !DOCTYPE html 2 html lang= pl 3 head 4 meta charset= utf-8 5 meta http-equiv= X-UA-Compatible content= IE=edge 6 meta name= viewport content= width=device-width, initial-scale=1 7 title ?php echo $page_title; ? /title 8 link rel= stylesheet href= https://maxcdn.bootstrapcdn.com/bootstrap/ 3.3.7/css/bootstrap.min.css integrity= sha384- BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u crossorigin= anonymous 9 link href= css/sticky-footer-navbar.css rel= stylesheet 10 /head 11 body 12 nav class= navbar navbar-default navbar-fixed-top 13 div class= container 14 div class= navbar-header a class= navbar-brand href= # Twoja witryna /a /div 15 div id= navbar class= collapse navbar-collapse 16 ul class= nav navbar-nav 17 li class= active a href= index.php Strona domowa /a /li 18 li a href= rejestracja.php Zarejestruj się /a /li 19 li a href= pokaz_uzytkownikow.php Użytkownicy /a /li 20 li a href= zmiana_hasla.php Zmień hasło /a /li 21 /ul 22 /div 23 /div 24 /nav 25 div class= container 26 !-- Listing 9.1 - naglowek.html -- 294 Rozdział 9. Poleć książkęKup książkę 3. Zapisz plik jako naglowek.html. 4. Załaduj nowy plik nagłówka na serwer internetowy do tego samego katalogu includes, w którym znajdzie się też plik stopka.html (listing 3.3) oraz layout.css (dostępny w przykładach do pobrania z ftp://ftp.helion.pl/przyklady/phmys5.zip). 5. Przetestuj nowy plik nagłówka, uruchamiając w przeglądarce skrypt index.php (patrz ). Wskazówki  Aby obejrzeć strukturę tworzonej witryny, zajrzyj do ramki „Zarządzanie dokumentami” w następnym podrozdziale.  Nazwy plików pełniących rolę szablonów mogą mieć dowolne rozszerzenia, w tym także .inc i .php. Dynamicznie generowana strona domowa PHP i MySQL 295 Poleć książkęKup książkę Nawiązywanie połączenia z serwerem MySQL Zanim będziesz mógł odwoływać się do MySQL-a, musisz połączyć się z serwerem. Umożliwia to funkcja mysqli_connect(): $dbc = mysqli_connect (host, użytkownik, hasło, nazwa_bazy); To, jak powinny wyglądać pierwsze trzy argumenty przekazywane do funkcji (nazwa hosta, nazwa użytkownika i hasło), zależy od uprawnień, jakie przydzielono poszczególnym użytkownikom na serwerze MySQL. Więcej informacji na ten temat znajdziesz w dodatku A, „Instalacja”. Najczęściej parametrowi host nadawać będziesz wartość localhost, choć nie zawsze (podanie innej nazwy hosta pozwala połączyć się z bazą obsługiwaną na innym serwerze). Czwartym z argumentów jest nazwa bazy danych. Określenie wartości tego argumentu stanowi odpowiednik wykonania polecenia USE nazwa_bazy za pomocą klienta mysql. Jeżeli uda się nawiązać połączenie, do bazy MySQL będzie można odwoływać się za pośrednictwem zmiennej $dbc (oczywiście jeśli chcesz, możesz jej nadać dowolną inną nazwę). Będziesz ją stosować jako pierwszy argument większości funkcji PHP współpracujących z MySQL-em. Jeśli pojawi się problem z nawiązaniem połączenia, możesz wywołać funkcję mysqli_connect_error(), zwracającą komunikat o błędzie połączenia. Funkcja ta nie wymaga żadnego argumentu, zatem wywołasz ją w poniższy sposób: mysqli_connect_error(); Po nawiązaniu połączenia z bazą danych musisz jeszcze ustawić odpowiednie kodowanie; użyj do tego funkcji mysqli_set_charset(): mysqli_set_charset($dbc, utf8 ); Wartość określająca kodowanie — czyli drugi argument wywołania funkcji — powinna odpowiadać kodowaniu zastosowanemu w skrypcie PHP oraz uporządkowaniu alfabetycznemu używanemu w bazie danych (patrz rozdział 6., „Projektowanie baz danych”); jeśli tego nie zrobisz, dane mogą być przesyłane z wykorzystaniem domyślnego kodowania, co może wywołać problemy. Aby rozpocząć korzystanie z MySQL-a w PHP, stworzę specjalny skrypt, który będzie nawiązywać połączenie z serwerem MySQL. Następnie wszystkie pozostałe skrypty wymagające tego połączenia będą dołączać ten plik. Aby nawiązać połączenie i wybrać bazę danych: 1. W edytorze tekstów lub IDE utwórz nowy dokument PHP, któremu nadasz nazwę mysqli_connect.php (listing 9.2). ?php # Listing 9.2 - mysqli_connect.php Plik ten będzie dołączany przez inne skrypty PHP, zatem nie musi zawierać kodu HTML. 2. Umieść nazwę hosta, nazwę użytkownika, hasło i nazwę bazy danych w stałych. DEFINE ( DB_USER , uzytkownik ); DEFINE ( DB_PASSWORD , haslo ); DEFINE ( DB_HOST , localhost ); DEFINE ( DB_NAME , sitename ); Ze względów bezpieczeństwa wolę umieszczać tego typu dane w stałych (dzięki temu nie można ich zmienić), ale nie jest to wymagane. Ogólnie rzecz biorąc, przypisanie tych wartości do jakichś zmiennych pozwala oddzielić parametry konfiguracyjne od funkcji, które je wykorzystują, ale to również nie jest obowiązkowe. 296 Rozdział 9. Poleć książkęKup książkę W trakcie pisania skryptu zmień te cztery wartości na takie, które są odpowiednie dla Twojej bazy danych, lub użyj nazwy użytkownika i hasła, które otrzymałeś dla bazy danych używanej na wynajmowanym serwerze. Możesz również skorzystać ze wskazówek zamieszczonych w dodatku A, stworzyć użytkownika mającego dostęp do bazy sitename i wstawić jego parametry do powyższego kodu. Obojętnie, które rozwiązanie zastosujesz, pamiętaj, aby użyć wartości, co do których jesteś absolutnie pewien, że będą działać z używanym przez Ciebie serwerem. 3. Połącz się z MySQL-em. $dbc = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) OR die( Brak połączenia z MySQL: . mysqli_connect_error() ); Jeżeli tylko funkcji mysqli_connect() uda się nawiązać połączenie z MySQL-em, zwróci ona identyfikator zasobu reprezentujący otworzone połączenie. Zostanie on przypisany do zmiennej $dbc, dzięki której, wywołując funkcje dotyczące MySQL-a, będę mógł precyzyjnie określić, o które połączenie mi chodzi. Wywołanie funkcji zostało poprzedzone operatorem wyłączającym komunikaty o błędach (@). Dzięki temu komunikat o ewentualnym błędzie nie zostanie wyświetlony w przeglądarce (co w tym konkretnym przypadku jest wskazane, ponieważ błąd zostanie obsłużony za pomocą klauzuli OR die()). Ciąg dalszy na następnej stronie. Listing 9.2. Skrypt mysqli_connect.php będzie wykorzystywany przez wszystkie pozostałe skrypty aplikacji. Skrypt ten nawiązuje połączenie z serwerem MySQL, wybiera bazę danych i ustawia kodowanie 1 ?php # Listing 8.2 - mysqli_connect.php 2 3 // Plik zawiera informacje potrzebne do uzyskania dostępu do bazy danych. 4 // Tworzy połączenie z serwerem MySQL, wybiera bazę danych 5 // i ustawia kodowanie. 6 7 // Tworzymy stałe z informacjami potrzebnymi do nawiązania połączenia z bazą. 8 define ( DB_USER , uzytkownik ); 9 define ( DB_PASSWORD , haslo ); 10 define ( DB_HOST , localhost ); 11 define ( DB_NAME , sitename ); 12 13 // nawiązujemy połączenie 14 $dbc = @mysqli_connect (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) OR die ( Brak połączenia z serwerem MySQL: . mysqli_connect_error() ); 15 16 // określamy kodowanie 17 mysqli_set_charset($dbc, utf8 ); PHP i MySQL 297 Poleć książkęKup książkę Jeśli funkcja mysqli_connect() nie zdoła zwrócić identyfikatora zasobu, to wykonana zostanie klauzula OR die() (ponieważ pierwsza część warunku będzie mieć wartość FALSE, zatem konieczne będzie wykonanie drugiej). Jak wyjaśniłem w poprzednim rozdziale, funkcja die() kończy działanie skryptu. Parametrem tej funkcji może być łańcuch, który zostanie wyświetlony przez przeglądarkę. W naszym przykładzie łańcuch ten jest kombinacją komunikatu Brak połączenia z serwerem MySQL i szczegółowej informacji o błędzie ). Rozwiązanie takie ułatwia MySQL (patrz usuwanie błędów pojawiających się w trakcie tworzenia witryny. 4. Ustaw kodowanie: mysqli_set_charset($dbc, utf8 ); Ostatnią operacją wykonywaną w tym skrypcie jest ustawienie sposobu kodowania, który będzie używany w całej przyszłej komunikacji z serwerem MySQL. 5. Zapisz plik pod nazwą mysqli_connect.php. Ponieważ plik ten zawiera poufne informacje związane z dostępem do bazy danych, zastosowałem w jego przypadku rozszerzenie .php. Dzięki temu nawet jeśli użytkownik wykona go w swojej przeglądarce, to nie zobaczy rzeczywistej zawartości strony. Być może zwróciłeś także uwagę, że w tym skrypcie brakuje zamykającego znacznika PHP, czyli ? . To dopuszczalne (o ile tylko skrypt kończy się blokiem kodu PHP) i korzystne ze względów, które wyjaśnię w kolejnych rozdziałach. 6. Wgraj plik na serwer, najlepiej do katalogu leżącego poza strukturą katalogów zawierających strony WWW (patrz Ponieważ plik ten zawiera poufne informacje, to powinien być przechowywany w bezpiecznym miejscu. Najlepiej, jeśli umieścisz go w jednym z katalogów powyżej struktury katalogów zawierających strony WWW. ). Jeżeli w trakcie wykonywania skryptu pojawi się problem z nawiązaniem połączenia z serwerem MySQL, wyświetlony zostanie odpowiedni komunikat, a wykonanie skryptu zostanie zakończone Wizualna reprezentacja dokumentów znajdujących się na serwerze WWW. Plik mysqli_connect.php nie jest przechowywany w katalogu głównym (htdocs) 298 Rozdział 9. Poleć książkęKup książkę Jeżeli skrypt nawiązujący połączenie z bazą danych działa prawidłowo, powinien zwracać pustą stronę WWW (ponieważ nie generuje on w ogóle kodu HTML) Dzięki temu nie będzie on dostępny z przeglądarki internetowej. Patrz ramka „Zarządzanie dokumentami”. 7. Umieść tymczasowo kopię tego pliku w katalogu przeznaczonym na strony WWW i przetestuj ). skrypt w przeglądarce internetowej (patrz Aby móc przetestować skrypt, będziesz chciał umieścić jego kopię w takim miejscu na serwerze, do którego można się odwoływać za pośrednictwem przeglądarki internetowej. Jeżeli skrypt działa prawidłowo, zobaczysz ). Jeżeli natomiast pustą stronę WWW (patrz ujrzysz komunikat Access denied… lub podobny (patrz ), będzie to oznaczało, że wprowadzona przez Ciebie nazwa użytkownika, nazwa hosta lub hasło są nieprawidłowe albo że nie masz wystarczających uprawnień, aby połączyć się z daną bazą. Usuń tymczasową kopię pliku z katalogu publicznego. Zarządzanie dokumentami O planowaniu struktury witryny mówiłem już w rozdziale 3., gdy tworzyłem pierwszą aplikację internetową. Teraz, gdy zacznę wykorzystywać skrypt nawiązujący połączenie z bazą, zagadnienie to nabierze jeszcze większego znaczenia. Gdyby informacje potrzebne do połączenia się z bazą danych (nazwa użytkownika, hasło, nazwa hosta i nazwa bazy danych) wpadły w niepowołane ręce, mogłyby zostać użyte do wykradzenia informacji lub zniszczenia całej zawartości bazy. Dlatego też nie ma żadnej przesady w chronieniu pliku mysqli_connect.php. Najważniejszym zaleceniem odnośnie do bezpieczeństwa jest przechowywanie tego rodzaju plików poza katalogiem przeznaczonym na strony internetowe. Jeżeli na przykład folder htdocs widoczny na rysunku jest właśnie takim katalogiem (innymi słowy, prowadzi do niego adres podobny do www.example.com), to przechowywanie skryptu mysqli_ connect.php poza poddrzewem tego katalogu gwarantuje, że nikt nigdy nie dostanie się do tego pliku za pomocą przeglądarki. Co prawda, z założenia kod źródłowy PHP nie jest nigdy przesyłany bezpośrednio do przeglądarki (tylko generowana przez niego strona), ale ostrożności nigdy za wiele. Zatem jeśli nie masz uprawnień, aby umieszczać pliki poza katalogiem htdocs, nie oznacza to jeszcze końca świata, ale jest mniej bezpieczne. Zalecam także stosowanie dla tego rodzaju skryptów rozszerzenia .php. Prawidłowo skonfigurowany serwer po prostu wykona ten kod, a nie będzie wyświetlał go na ekranie. Natomiast przy bezpośrednim odwołaniu do pliku .inc jego zawartość zostałaby wyświetlona w przeglądarce. PHP i MySQL 299 Poleć książkęKup książkę Wskazówki  W Twoich skryptach PHP powinny zadziałać te same wartości, których używałeś w rozdziale 5. do zalogowania się do monitora mysql.  Jeżeli otrzymasz komunikat o błędzie mówiący, że mysqli_connect() jest niezdefiniowaną funkcją, będzie to oznaczało, że obsługa MySQL-a nie została wkompilowana w Twoją wersję PHP. Informacje na temat instalacji znajdziesz w dodatku A.  Jeżeli po uruchomieniu skryptu zobaczysz komunikat o błędzie Can’t connect… (patrz to prawdopodobnie serwer MySQL nie został uruchomiony. ),  Na rysunku przedstawiona została sytuacja wystąpienia błędu, gdy wywołanie funkcji mysqli_connect() nie zostało poprzedzone operatorem @.  Jeśli nawiązując połączenie z serwerem MySQL, nie chcesz od razu wybrać bazy danych, możesz pominąć ostatni argument wywołania funkcji mysqli_connect(): $dbc = mysqli_connect (host, użytkownik, hasło); Następnie, gdy będzie to konieczne, wybierz bazę danych za pomocą wywołania mysqli_select_db($dbc, nazwa_bazy); Innym powodem, dla którego PHP nie połączy się z serwerem MySQL (oprócz nieprawidłowych: nazwy użytkownika, hasła lub informacji o serwerze), może być to, że ten ostatni nie został w ogóle uruchomiony Jeżeli nie zastosujesz operatora @, to wyświetlony zostanie zarówno komunikat o błędzie PHP, jak i komunikat przekazany funkcji die() 300 Rozdział 9. Poleć książkęKup książkę Wykonywanie prostych zapytań Gdy uda Ci się już połączyć z wybraną bazą danych, możesz rozpocząć wykonywanie zapytań. Mogą to być proste operacje typu wstawienie, aktualizacja lub usunięcie rekordu, ale również złączenia zwracające wiele rekordów naraz. Niezależnie od typu polecenia SQL wykonuje się zawsze przy użyciu funkcji mysqli_query(): $wynik = mysqli_query(dbc, zapytanie); Pierwszym argumentem tej funkcji jest połączenie z serwerem MySQL, a drugim samo zapytanie. W przypadku większych skryptów PHP zazwyczaj zapisuję zapytanie w odrębnej zmiennej, o nazwie $query lub po prostu $q. Wtedy wykonanie zapytania będzie wyglądać jak poniżej: $wynik = mysqli($dbc, $q); Formularz rejestracyjny W przypadku prostych zapytań, które nie zwracają rekordów, takich jak INSERT, UPDATE, DELETE itp., w zmiennej $wynik zapisywana jest wartość TRUE lub FALSE, w zależności od tego, czy wykonanie zapytania przebiegło pomyślnie. Pamiętaj, że „pomyślne wykonanie” oznacza brak błędów podczas realizacji polecenia; nie oznacza to wcale, że zapytanie zwróciło oczekiwane wyniki — to będziesz musiał sprawdzić. Jeżeli zaś chodzi o bardziej złożone zapytania, zwracające rekordy (z których najważniejsze są zapytania SELECT), $wynik przechowuje wszystkie zwrócone rekordy lub wartość FALSE — jeśli pojawił się jakiś błąd. Zatem, aby sprawdzić, czy zapytanie zakończyło się powodzeniem, możesz zastosować instrukcję warunkową: $wynik = mysqli($dbc, $q); if ($wynik) { // Zapytanie wykonane! Jeśli natomiast wykonanie zapytanie zakończyło się niepowodzeniem, musiał wystąpić jakiś błąd MySQL. Aby się o nim dowiedzieć, wywołaj funkcję mysqli_error(): echo mysqli_error($dbc); Jedynym argumentem tej funkcji jest połączenie z bazą danych. Po zakończeniu wszystkich operacji na bazie danych można wykonać ostatnią, opcjonalną czynność, to znaczy zamknąć połączenie z serwerem: mysqli_close($dbc); Wywołanie tej funkcji nie jest konieczne, ponieważ PHP automatycznie zamknie połączenie, kończąc wykonywanie skryptu. Jednak dobra praktyka programistyczna nakazuje użyć tej funkcji i jawnie zakończyć połączenie. Aby zademonstrować omawiany proces, napiszę kolejny skrypt rejestracji użytkownika. Będzie on ), wyświetlać odpowiedni formularz (patrz obsługiwać go, przeprowadzać weryfikację wprowadzonych danych i umieszczać je w tabeli users bazy sitename. Ciąg dalszy na następnej stronie. PHP i MySQL 301 Poleć książkęKup książkę Muszę ostrzec, że przedstawiony tu skrypt jest (w zależności od używanej wersji PHP oraz stosowanych ustawień) niebezpieczny, co wyjaśnię w dalszej części rozdziału. Aby wykonywać proste zapytania: 1. W edytorze tekstów lub IDE utwórz nowy skrypt PHP (listing 8.3), któremu nadasz nazwę rejestracja.php. ?php # Listing 9.3 - rejestracja.php $page_title = Zarejestruj się! ; include ( includes/naglowek.html ); Skrypt ten wykorzystuje podstawowe koncepcje omówione w rozdziale 3., takie jak dołączanie plików, wyświetlanie i obsługa formularza przez tę samą stronę oraz zapamiętywanie wprowadzonych danych. 2. Utwórz wyrażenie warunkowe obsługujące dane przekazane z formularza i zainicjalizuj tablicę $errors. if ($_SERVER[ REQUEST_METHOD ] == POST ) { $errors = []; Ten skrypt będzie wyświetlał i obsługiwał formularz HTML. Powyższa instrukcja warunkowa sprawdza rodzaj użytego żądania i na jego podstawie określa sposób obsługi formularza (także to rozwiązanie opisałem dokładniej w rozdziale 3.). Zmiennej $errors będę używał do gromadzenia komunikatów o błędach (po jednym dla każdego elementu formularza, który nie został poprawnie wypełniony). 3. Sprawdź imię. if (empty($_POST[ first_name ])) { $errors[] = Zapomniałeś podać swoje imię! ; } else { $fn = trim($_POST[ first_name ]); } Podobnie jak w rozdziale 3., sprawdzam za pomocą funkcji empty(), czy pole zostało wypełnione. Jeśli pole nie zostało wypełnione, to do tablicy $errors zostanie dodany komunikat o błędzie. W przeciwnym wypadku w zmiennej $fn znajdzie się wartość wprowadzona przez użytkownika po usunięciu zbędnych odstępów. Dzięki zastosowaniu tej zmiennej, której nazwa jest oczywiście skrótem od first_name, będzie mi znacznie łatwiej sformułować później zapytanie SQL. 4. Sprawdź nazwisko i adres e-mail. if (empty($_POST[ last_name ])) { $errors[] = Zapomniałeś podać swoje nazwisko! ; } else { $ln = trim($_POST[ last_name ]); } if (empty($_POST[ email ])) { $errors[] = Zapomniałeś podać swój adres e-mail! ; } else { $e = trim($_POST[ email ]); } Powyższe wiersze kodu są identyczne jak użyte do sprawdzenia pola zawierającego imię. Jeśli kontrola zawartości pól przebiegnie pomyślnie, to w obu wypadkach zostaną utworzone nowe zmienne. Ciąg dalszy na stronie 305. 302 Rozdział 9. Poleć książkęKup książkę Listing 9.3. Skrypt rejestracyjny dodaje do bazy danych nowy rekord, wykonując polecenie INSERT 1 ?php # Listing 9.3 - rejestracja.php 2 // Ten skrypt wykonuje polecenie INSERT, by dodać wiersz do tabeli użytkowników. 3 4 $page_title = Zarejestruj się ; 5 include ( includes/naglowek.html ); 6 7 // Sprawdzamy, czy formularz został wysłany 8 if ($_SERVER[ REQUEST_METHOD ] == POST ) { 9 10 $errors = array(); // inicjalizujemy tablicę błędów 11 12 // sprawdzamy imię 13 if (empty($_POST[ first_name ])) { 14 $errors[] = Zapomniałeś podać swoje imię! ; 15 } else { 16 $fn = trim($_POST[ first_name ]); 17 } 18 19 // sprawdzamy nazwisko 20 if (empty($_POST[ last_name ])) { 21 $errors[] = Zapomniałeś podać swoje nazwisko! ; 22 } else { 23 $ln = trim($_POST[ last_name ]); 24 } 25 26 // sprawdzamy adres e-mail 27 if (empty($_POST[ email ])) { 28 $errors[] = Zapomniałeś podać swój adres e-mail! ; 29 } else { 30 $e = trim($_POST[ email ]); 31 } 32 33 // sprawdzamy, czy użytkownik wprowadził hasło i czy w obu polach jest ono takie samo 34 if (!empty($_POST[ pass1 ])) { 35 if ($_POST[ pass1 ] != $_POST[ pass2 ]) { 36 $errors[] = Za drugim razem wpisałeś inne hasło! ; 37 } else { 38 $p = trim($_POST[ pass1 ]); 39 } 40 } else { 41 $errors[] = Zapomniałeś wprowadzić hasło! ; 42 } 43 44 if (empty($errors)) { // jeśli formularz poprawnie wypełniony… 45 46 // rejestrujemy użytkownika w bazie danych 47 Ciąg dalszy na następnej stronie. PHP i MySQL 303 Poleć książkęKup książkę Listing 9.3. Ciąg dalszy 48 require( ../mysqli_connect.php ); // nawiązujemy połączenie z bazą danych 49 50 // tworzymy zapytanie 51 $q = INSERT INTO users (first_name, last_name, email, pass, registration_date) VALUES ( $fn , $ln , $e , SHA2( $p ,512), NOW() ) ; 52 $r = @mysqli_query ($dbc, $q); // wykonujemy zapytanie 53 if ($r) { // jeśli poprawnie wykonane… 54 55 // wyświetlamy komunikat 56 echo h1 Dziękujemy! /h1 57 p Zostałeś zarejestrowany. W rozdziale 12. będziesz mógł się zalogować! /p p br / /p ; 58 59 } else { // jeśli zapytanie nie zostało poprawnie wykonane… 60 61 // wyświetlamy komunikat dla użytkownika 62 echo h1 Błąd systemu /h1 63 p class= error Nie zostałeś zarejestrowany z powodu awarii naszego systemu. Przepraszamy za kłopot. /p ; 64 65 // wyświetlamy komunikat uruchomieniowy 66 echo p . mysqli_error($dbc) . br br Zapytanie: . $q . /p ; 67 68 } // koniec instrukcji if ($r). 69 70 mysqli_close($dbc); // zamykamy połączenie z bazą danych 71 72 // dołączamy stopkę i kończymy działanie skryptu 73 include ( includes/stopka.html ); 74 exit(); 75 76 } else { // wyświetlamy błędy 77 78 echo h1 Błąd! /h1 79 p class= error Wystąpiły następujące błędy: br ; 80 foreach ($errors as $msg) { // wyświetlamy każdy komunikat o błędzie 81 echo - $msg br / \n ; 82 } 83 echo /p p Spróbuj jeszcze raz. /p p br /p ; 84 85 } // koniec instrukcji if (empty($errors)) 86 87 } // koniec głównej instrukcji warunkowej (wysłania formularza) 88 ? 89 h1 Zarejestruj się /h1 90 form action= rejestracja.php method= post 91 p Imię: input type= text name= first_name size= 15 maxlength= 20 value= ?php if (isset($_POST[ first_name ])) echo $_POST[ first_name ]; ? /p 92 p Nazwisko: input type= text name= last_name size= 15 maxlength= 40 value= ?php if (isset($_POST[ last_name ])) echo $_POST[ last_name ]; ? /p Ciąg dalszy na następnej stronie. 304 Rozdział 9. Poleć książkęKup książkę 5. Sprawdź hasło. 7. Dodaj użytkownika do bazy danych. if (empty($_POST[ pass1 ])) { if ($_POST[ pass1 ] == $_POST[ pass2 ]) { $errors[] = Za drugim razem wpisałeś inne hasło! ; } else { $p = trim($_POST[ pass1 ]); } } else { $errors[] = Zapomniałeś wprowadzić hasło! ; } Aby zweryfikować hasło, sprawdzam najpierw, czy w odpowiednie pole formularza wprowadzono w ogóle jakąś wartość. Następnie badam, czy wartość $pass1 jest taka sama jak $pass2 (a więc, czy użytkownik wprowadził dwukrotnie to samo hasło). 6. Sprawdź, czy można zarejestrować użytkownika if (empty($errors)) { Jeżeli wprowadzone przez użytkownika dane spełniają wszystkie warunki, główny warunek skryptu również jest spełniony i można bezpiecznie kontynuować. Jeśli nie, powinien zostać wyświetlony odpowiedni komunikat o błędzie (patrz punkt 11.), a użytkownik powinien otrzymać jeszcze jedną szansę na zarejestrowanie się. require_once( ../mysqli_connect.php ); Pierwsza linijka kodu wstawia do skryptu zawartość pliku mysqli_connect.php, tworząc tym samym połączenie z MySQL-em i wybierając bazę danych. Możliwe, że będziesz musiał wprowadzić inną ścieżkę do pliku, zgodną z jego lokalizacją na Twoim serwerze (w obecnej postaci instrukcja zakłada, że plik mysqli_connect.php znajduje się w katalogu nadrzędnym względem katalogu zawierającego wykonywany skrypt). 8. Dodaj użytkownika do bazy danych. $q = INSERT INTO users (first_name, last_name, email, pass, registration_date) VALUES ( $fn ,  $ln , $e , SHA1( $p ), NOW() ) ; $r = @mysqli_query ($dbc, $q); Samo zapytanie SQL jest bardzo podobne do tych, które przedstawiłem w rozdziale 5. Funkcja SHA2() wykorzystywana jest do szyfrowania hasła, a NOW() ustawia czas rejestracji na bieżącą chwilę. (W rozdziale 13., „Zabezpieczenia”, przedstawię metodę szyfrowania i porównywania haseł na potrzeby rejestracji, której można używać w skryptach PHP). Ciąg dalszy na następnej stronie. Listing 9.3. Ciąg dalszy 93 p Adres e-mail: input type= text name= email size= 20 maxlength= 80 value= ?php if (isset($_POST[ email ])) echo $_POST[ email ]; ? /p 94 p Hasło: input type= password name= pass1 size= 10 maxlength= 20 value= ?php if (isset($_POST[ pass1 ])) echo $_POST[ pass1 ]; ? /p 95 p Potwierdź hasło: input type= password name= pass2 size= 10 maxlength= 20 value= ?php if (isset($_POST[ pass2 ])) echo $_POST[ pass2 ]; ? /p 96 p input type= submit name= submit value= Zarejestruj /p 97 /form 98 ?php include ( includes/stopka.html ); ? PHP i MySQL 305 Poleć książkęKup książkę Jeżeli operacja zarejestrowania użytkownika w bazie danych przebiegnie pomyślnie, zostanie wyświetlony ten komunikat Zostaną wyświetlone wszelkie ewentualne komunikaty o błędach wygenerowane przez zapytanie oraz samo zapytanie Po przypisaniu zapytania do zmiennej wykonuję je za pośrednictwem funkcji mysqli_query(). Przesyła ona polecenia języka SQL na serwer MySQL. Podobnie jak w skrypcie mysqli_connect.php, wywołanie funkcji mysqli_query() zostało poprzedzone operatorem @, aby zapobiec wyświetlaniu komunikatów o błędach w przeglądarce. Jeśli wystąpi błąd, to zostanie on obsłużony w następnym punkcie. 9. Wyświetl informację, czy rejestracja przebiegła pomyślnie. if ($r) { echo h1 Dziękujemy! /h1 p Zostałeś zarejestrowany. W rozdziale 12. będziesz mógł się zalogować! /p p br /p ; } else { echo h1 Błąd systemu /h1 p class= error Nie zostałeś zarejestrowany z powodu awarii naszego systemu. Przepraszamy za kłopot. /p ; echo p . mysqli_error($dbc) . br br Zapytanie: . $q . /p ; } Zmienna $r, do której przypisywana jest wartość zwracana przez zapytanie mysqli_query(), może zostać użyta w wyrażeniu warunkowym, które sprawdzi, czy polecenie SQL zostało wykonane pomyślnie. Jeżeli zmienna $r ma wartość TRUE, wyświetlany jest komunikat z podziękowaniem za rejestrację ). Jeżeli zmienna $r ma wartość FALSE, (patrz wyświetlone zostają komunikaty o błędach. Dla potrzeb procesu usuwania błędów komunikat składa się z wyników zwróconych przez funkcję mysqli_error() oraz tekstu ). Takich wykonanego zapytania (patrz informacji lepiej jednak nie wyświetlać na witrynie produkcyjnej. 306 Rozdział 9. Poleć książkęKup książkę Każdy błąd wykryty podczas weryfikacji danych jest raportowany, a użytkownik może ponownie wypełnić formularz 10. Zamknij połączenie z bazą danych i dokończ szablon HTML. mysqli_close(); include( includes/stopka.html ); exit(); Zamknięcie połączenia nie jest wymagane, ale stanowi przykład dobrej praktyki programistycznej. Następnie dołączona zostaje stopka, a wykonanie skryptu kończy się (przez wywołanie funkcji exit()). Gdybym pominął te dwa ostatnie wiersze kodu, formularz rejestracji zostałby ponownie wyświetlony (co nie jest konieczne, jeśli rejestracja zakończyła się pomyślnie). 11. Zamknij główną instrukcję warunkową i wyświetl ewentualne komunikaty o błędach. } else { // wyświetlamy błędy echo h1 Błąd! /h1 p class= error Wystąpiły następujące błędy: br ; foreach ($errors as $msg) { // wyświetlamy każdy komunikat o błędzie echo - $msg br \n ; } echo /p p Spróbuj jeszcze raz. /p p br /p ; } // koniec instrukcji if (empty($errors)) } // koniec głównej instrukcji warunkowej (wysłania formularza) Klauzula else zostaje wykonana, jeśli wystąpiły błędy. Wszystkie komunikaty o błędach zostają wyświetlone za pomocą pętli foreach (patrz ). Ostatni nawias klamrowy zamyka główne wyrażenie warunkowe związane z wysłaniem danych formularza. Wyrażenie to ma prostą postać if, a nie if-else, aby formularz zawierał zawsze dane wcześniej wprowadzone (patrz również rozdział 3.). Ciąg dalszy na następnej stronie. PHP i MySQL 307 Poleć książkęKup książkę 12. Zamknij kod PHP i rozpocznij formularz HTML. 13. Dokończ formularz HTML. ? h1 Zarejestruj się /h1 form action= register.php method= post p Imię: input type= text name= first_name size= 15 maxlength= 20 value= ?php if (isset($_POST[ first_name ])) echo $_POST[ first_name ]; ? / /p p Nazwisko: input type= text name= last_name size= 15 maxlength= 40 value= ?php if (isset($_POST[ last_name ])) echo $_POST[ last_name ]; ? / /p Formularz ten jest bardzo prosty, zawiera po jednym polu tekstowym dla każdej kolumny tabeli users (z wyjątkiem kolumn user_id oraz registration_date, które są wypełniane automatycznie). Dane wprowadzone w poszczególnych polach są zapisywane dzięki zastosowaniu kodu w postaci value= ?php if (isset($_POST[ first_name ])) echo $_POST[ first_name ]; ? Zalecam stosowanie takich samych nazw pól formularza jak odpowiadających im kolumn bazy danych. Dobrze będzie, jeśli pola formularza będą mieć również taką samą długość jak kolumny bazy danych. Oba te rozwiązania pozwalają ograniczyć możliwość pomyłek. p Adres e-mail: input type= text name= email size= 20 maxlength= 80 value= ?php if (isset($_POST[ email ])) echo $_POST[ email ]; ? / /p p Hasło: input type= password name= pass1 size= 10 maxlength= 20 value= ?php if (isset($_POST[ pass1 ])) echo $_POST[ pass1 ]; ? /p p Potwierdź hasło: input type= password name= pass2 size= 10 maxlength= 20 value= ?php if (isset($_POST[ pass2 ])) echo $_POST[ pass2 ]; ? /p p input type= submit name= submit value= Zarejestruj / /p /form Ta część formularza jest podobna do stworzonej w punkcie 12., lecz dodatkowo został w niej umieszczony przycisk przesyłający formularz. W przypadku wprowadzania haseł nie muszę się stosować do sugestii dotyczącej ograniczania długości pola za pomocą atrybutu maxlength (patrz punkt 12.), ponieważ hasła są szyfrowane za pomocą funkcji SHA2(), która zawsze zwraca łańcuch o stałej długości. A ponieważ są dwa pola służące do podania hasła, zatem oba nie mogą jednocześnie mieć tej samej nazwy co kolumna w bazie danych. 14. Zakończ stronę stopką HTML. ?php include ( includes/stopka.html ); ? 308 Rozdział 9. Poleć książkęKup książkę 15. Zapisz plik pod nazwą rejestracja.php, wgraj go na serwer i przetestuj w przeglądarce internetowej. Zwróć uwagę, że jeśli w którymś polu formularza wprowadzisz znak apostrofu, to prawdopodobnie spowoduje to błędy podczas wykonywania ). Sposób rozwiązania polecenia SQL (patrz tego problemu zostanie pokazany w podrozdziale „Bezpieczeństwo zapytań”. Wskazówki  Po wywołaniu skryptu możesz zawsze sprawdzić, czy zadziałał on jak trzeba, wywołując monitor mysql lub aplikację phpMyAdmin i oglądając zmiany wprowadzone w tabeli.  Gdy korzystasz z PHP, nie powinieneś kończyć zapytań SQL średnikiem, tak jak robiłeś to w monitorze mysql. Jest to niegroźny, choć często popełniany błąd w pracy z MySQL-em. Jednak w przypadku innych baz danych, takich jak na przykład Oracle, uniemożliwia on wykonanie zapytania.  Funkcja mysqli_query() zwraca wartość TRUE, jeżeli udało się wykonać jakieś zapytanie na bazie danych. Nie oznacza to jeszcze, że efekty tej operacji są zgodne z Twoimi oczekiwaniami. W kolejnych skryptach zobaczysz, jak można bardziej precyzyjnie określać efekty wykonania zapytania.  Nie musisz koniecznie tworzyć zmiennej $q tak jak ja. Możesz wstawić treść zapytania bezpośrednio do funkcji mysqli_query(). Jednak w miarę jak Twoje zapytania będą się stawać coraz bardziej złożone, dojdziesz do momentu, w którym użycie zmiennej będzie jedynym rozwiązaniem.  Za pomocą funkcji mysqli_query() można wykonać praktycznie każde zapytanie, które działa w monitorze mysql.  Za pomocą funkcji mysqli_multi_query() można wykonywać wiele zapytań za jednym razem. Jednak składnia jest wtedy dość skomplikowana, zwłaszcza gdy zapytania zwracają wyniki. Apostrofy wprowadzone w polach formularza (w tym przypadku w nazwisku) spowodują konflikt z apostrofami używanymi do wyodrębniania wartości w zapytaniach SQL PHP i MySQL 309 Poleć książkęKup książkę Odczytywanie wyników zapytania W poprzednim podrozdziale pokazałem Ci, jak można wykonywać proste zapytania na bazie danych MySQL. Przez proste zapytania rozumiem tu te, które zaczynają się od słów INSERT, UPDATE, DELETE lub ALTER. Mają one wszystkie jedną wspólną cechę — nie zwracają żadnych danych, a jedynie informację, czy udało się je wykonać. Z kolei zapytania SELECT generują informacje (na przykład rekordy), które muszą być obsłużone przez funkcje PHP. Podstawowym narzędziem, które to umożliwia, jest funkcja mysqli_fetch_array(). Pobiera ona zmienną, w której zapisano wynik zapytania (ja nadaję jej nazwę $r), i zwraca po jednym wierszu danych naraz w formacie tablicowym. Funkcję tę wykorzystuje się w pętli, uzyskując za każdym razem dostęp do kolejnego rekordu. Podstawowa konstrukcja językowa umożliwiająca odczytanie każdego rekordu zwróconego przez zapytanie wygląda tak: while ($row = mysqli_fetch_array($r)) { // Zrób coś z $row. } Praktycznie zawsze będziesz używać pętli while, aby pobrać wyniki zapytania SELECT. Funkcja mysqli_fetch_array() pobiera też opcjonalny parametr określający rodzaj zwracanej tablicy (asocjacyjna, indeksowana lub dwuformatowa). Tablica asocjacyjna pozwala odwoływać się do wartości przechowywanych w kolumnach po ich nazwach, podczas gdy tablica indeksowana wymaga stosowania oznaczeń liczbowych (gdzie 0 oznacza pierwszą kolumnę). Każdy parametr jest definiowany przez jedną ze stałych wymienionych w tabeli 9.1, przy czym domyślnie używany jest MYSQLI_BOTH. Zazwyczaj korzystam z ustawienia MYSQLI_NUM, które jest nieco szybsze (i wymaga mniej pamięci) od pozostałych. Inni programiści wolą MYSQLI_ASSOC, ponieważ jest ono bardziej precyzyjne i działa nawet po zmianie struktury tabeli ($rekord[ kolumna ] zamiast $rekord[3]). Gdy korzystasz z funkcji mysqli_fetch _array(), możesz zwolnić zasoby, które nie są Ci już potrzebne: mysqli_free_result($r); To wyrażenie zwalnia pamięć zajmowaną przez zmienną $r. Podobnie jak mysqli_close() jest ono opcjonalne, ponieważ PHP automatycznie zwalnia wszystkie zasoby po dojściu do końca skryptu. Jednak stosowanie go jest dobrą praktyką programistyczną. Aby pokazać Ci, jak należy obsługiwać wyniki zapytania, utworzę prosty skrypt wyświetlający listę aktualnie zarejestrowanych użytkowników. Aby odczytać wyniki zapytania: 1. W edytorze tekstów lub IDE utwórz nowy dokument PHP (listing 9.4). ?php # Skrypt 9.4 - pokaz_uzytkownikow.php $page_title = Wykaz obecnych użytkownikow ; include ( includes/naglowek.html ); echo h1 Zarejestrowani użytkownicy /h1 Tabela 9.1. Stałe używane w funkcji mysql_fetch_array() Stała Przykład MYSQL_ASSOC $rzad[ kolumna ] MYSQL_NUM MYSQL_BOTH $rzad[0] $rzad[0] lub $rzad[ kolumna ] 310 Rozdział 9. Poleć książkęKup książkę 2. Połącz się z bazą danych i wykonaj na niej 3. Wyświetl wyniki zapytania. zapytanie. require( ../mysqli_connect.php ); $q = SELECT CONCAT(last_name, , , first_name) AS name, DATE_FORMAT(registration_date, d M Y ) AS dr FROM users ORDER BY registration_date ASC ; $r = @mysqli_query ($dbc, $q); Pokazane tu zapytanie zwróci dwie kolumny (patrz ): nazwiska użytkowników (w formacie Nazwisko, Imię) i daty ich rejestracji (w formacie Miesiąc DD, RRRR). Ponieważ obie kolumny zostały sformatowane przy użyciu funkcji MySQL-a, to zwróconym wynikom nadałem aliasy (name i dr). Jeśli składnia wydaje Ci się skomplikowana, to wróć do lektury rozdziału 5. Wyniki zapytania wykonanego za pomocą klienta mysql if ($r) { echo table width= 60 thead tr th ali
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP i MySQL. Dynamiczne strony WWW. Szybki start. Wydanie V
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: