Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00260 014430 12792849 na godz. na dobę w sumie
PHP, MySQL i JavaScript. Wprowadzenie. Wydanie IV - książka
PHP, MySQL i JavaScript. Wprowadzenie. Wydanie IV - książka
Autor: Liczba stron: 704
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-0842-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> webmasterstwo >> jquery - programowanie
Porównaj ceny (książka, ebook (-25%), audiobook).

Przewodnik twórcy stron i aplikacji sieciowych!

PHP wraz z bazą danych MySQL oraz językiem JavaScript to potężne trio, dzięki któremu możesz zbudować aplikację internetową dowolnej wielkości. Jeżeli do tego dołożysz możliwości najnowszej wersji języka HTML (oznaczonej cyfrą 5), CSS3 oraz bibliotekę jQuery, nic nie będzie w stanie zatrzymać Twojej kreatywności.

Jeżeli chcesz opanować te narzędzia i stworzyć atrakcyjną oraz funkcjonalną aplikację internetową, trafiłeś na idealną książkę. Znajdziesz tu niezbędną wiedzę o języku PHP, bazie danych MySQL, HTML5, CSS3, JavaScripcie i jQuery. Już od pierwszych stron zaczniesz poznawać składnię oraz konstrukcje języka programowania PHP, techniki programowania obiektowego oraz praktyczne porady związane z używaniem PHP. Następnie uzupełnisz wiedzę na temat bazy danych MySQL. Dowiesz się, jak tworzyć zapytania SQL oraz w jaki sposób wykorzystać dane zawarte w bazie z poziomu PHP. Po opanowaniu „strony serwerowej” przejdziesz do nauki technik tworzenia interaktywnych stron WWW. Zobaczysz, jak używać języka JavaScript, jakie nowości zawiera HTML5 oraz jak wielki potencjał kryją w sobie CSS3 i jQuery. Książka ta jest ciekawą lekturą dla pasjonatów chcących tworzyć własne, zaawansowane aplikacje.
  • Dogłębnie opanuj język PHP, począwszy od podstaw aż do metod programowania obiektowego.
  • Zapoznaj się z MySQL, od struktury bazy danych do skomplikowanych zapytań.
  • Naucz się używać rozszerzenia MySQLi — udoskonalonego interfejsu PHP dla MySQL.
  • Twórz dynamiczne strony PHP, które dostosowują się do użytkownika.
  • Zarządzaj ciasteczkami i sesjami, z zachowaniem wysokich standardów bezpieczeństwa.
  • Opanuj język JavaScript i wzbogać go z użyciem jQuery.
  • Wykorzystaj żądania Ajax do komunikacji między przeglądarką a serwerem.
  • Użyj CSS2 i CSS3 do opracowania profesjonalnej szaty graficznej stron WWW.
  • Poznaj nowe funkcje HTML5, w tym geolokację, obsługę dźwięku i filmów oraz elementu canvas.

Kompendium wiedzy dla twórcy stron i aplikacji sieciowych

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

Darmowy fragment publikacji:

Tytuł oryginału: Learning PHP, MySQL JavaScript, 4th Edition Tłumaczenie: Piotr Cieślak ISBN: 978-83-283-0842-8 © 2015 Helion S.A. Authorized Polish translation of the English edition of Learning PHP, MySQL JavaScript, 4th Edition, ISBN 9781491918661 © 2015 Robin Nixon. This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. 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 the Publisher. 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 Wydawnictwo HELION 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. Wydawnictwo HELION 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) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/phmyj4 Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/phmyj4.zip Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:316)ci HTTP i HTML: podstawy wynalazku Bernersa-Lee Procedura (cid:276)(cid:241)danie/odpowied(cid:274) Zalety PHP, MySQL, JavaScriptu, CSS i HTML5 Zastosowanie PHP Zastosowanie MySQL Zastosowanie JavaScriptu Zastosowanie CSS I HTML5 na dok(cid:228)adk(cid:246) Serwer WWW Apache Kilka s(cid:228)ów o Open Source Zgrany zespó(cid:228) Pytania Przedmowa .................................................................................................................. 21 1. Wst(cid:253)p do dynamicznych stron internetowych ..........................................................25 26 26 28 29 30 31 32 33 34 35 35 37 2. Konfigurowanie serwera ............................................................................................39 39 40 47 49 49 50 50 50 51 51 52 54 3. Wst(cid:253)p do PHP ...............................................................................................................55 55 56 WAMP, MAMP, LAMP — a có(cid:276) to takiego? Instalowanie pakietu XAMPP w systemie Windows Dodawanie elementów PHP do kodu HTML Przyk(cid:228)ady z tej ksi(cid:241)(cid:276)ki Testowanie instalacji Instalowanie pakietu XAMPP w Mac OS X Dost(cid:246)p do g(cid:228)ównego foldera Instalowanie pakietu LAMP pod Linuksem Praca zdalna Logowanie Obs(cid:228)uga FTP Obs(cid:228)uga edytora kodu Obs(cid:228)uga (cid:264)rodowiska IDE Pytania 5 Kup książkęPoleć książkę Pytania Wyra(cid:276)enia Prawda czy fa(cid:228)sz? Litera(cid:228)y i zmienne Operatory Priorytet operatorów Asocjacyjno(cid:264)(cid:232) Operatory relacji Wyra(cid:276)enia warunkowe P(cid:246)tle Sk(cid:228)adnia PHP Zastosowanie komentarzy Podstawowa sk(cid:228)adnia Zmienne Operatory Przypisywanie warto(cid:264)ci zmiennym Instrukcje wielowierszowe Deklaracja typu zmiennych Sta(cid:228)e Sta(cid:228)e predefiniowane Ró(cid:276)nica mi(cid:246)dzy instrukcjami echo i print Funkcje Zasi(cid:246)g zmiennych 57 57 58 59 63 66 68 70 71 71 72 73 74 78 4. Wyra(cid:348)enia i sterowanie dzia(cid:293)aniem programu w PHP .............................................. 81 81 81 83 84 84 86 87 91 91 92 93 95 97 98 98 100 101 102 103 104 105 105 106 5. Funkcje i obiekty w PHP ............................................................................................. 107 107 109 110 111 111 113 114 Definiowanie funkcji Zwracanie warto(cid:264)ci Zwracanie tablicy Nie przekazuj argumentów przez referencj(cid:246) Zwracanie zmiennych globalnych Przypomnienie informacji o zasi(cid:246)gu zmiennych Rzutowanie jawne i niejawne Dynamiczne linkowanie w PHP Dynamiczne linkowanie w praktyce Pytania P(cid:246)tla while P(cid:246)tla do … while P(cid:246)tla for Przerywanie p(cid:246)tli Instrukcja continue Instrukcja if Instrukcja else Instrukcja elseif Instrukcja switch Operator ? Funkcje PHP 6 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę Do(cid:228)(cid:241)czanie i wymaganie plików Pytania Prosty dost(cid:246)p is_array count sort shuffle explode extract compact reset end Pytania Instrukcja include Zastosowanie instrukcji include_once Zastosowanie instrukcji require i require_once Sprawdzanie zgodno(cid:264)ci wersji PHP Obiekty w PHP Terminologia Deklarowanie klasy Tworzenie obiektu Odwo(cid:228)ywanie si(cid:246) do obiektów Klonowanie obiektów Konstruktory Destruktory w PHP 5 Tworzenie metod Metody statyczne w PHP 5 Deklarowanie w(cid:228)a(cid:264)ciwo(cid:264)ci Deklarowanie sta(cid:228)ych Zasi(cid:246)g w(cid:228)a(cid:264)ciwo(cid:264)ci i metod w PHP 5 W(cid:228)a(cid:264)ciwo(cid:264)ci i metody statyczne Dziedziczenie 114 114 114 115 115 116 116 118 118 119 120 121 122 122 123 123 124 124 125 126 130 6. Tablice w PHP ..............................................................................................................131 131 131 133 133 134 136 139 139 139 139 140 140 141 142 143 143 143 7. PHP w praktyce .......................................................................................................... 145 145 146 148 149 149 150 150 Tablice indeksowane numerycznie Tablice asocjacyjne Dodawanie pozycji do tablicy przy u(cid:276)yciu s(cid:228)owa kluczowego array Zastosowanie funkcji printf Okre(cid:264)lanie precyzji Dope(cid:228)nianie (cid:228)a(cid:254)cuchów tekstowych Zastosowanie funkcji sprintf Funkcje do obs(cid:228)ugi daty i czasu Sta(cid:228)e zwi(cid:241)zane z dat(cid:241) Zastosowanie funkcji checkdate P(cid:246)tla foreach … as Tablice wielowymiarowe Zastosowanie funkcji do obs(cid:228)ugi tablic Spis tre(cid:316)ci (cid:95) 7 Kup książkęPoleć książkę Obs(cid:228)uga plików Podstawy MySQL Podsumowanie poj(cid:246)(cid:232) dotycz(cid:241)cych baz danych Dost(cid:246)p do MySQL z poziomu wiersza polece(cid:254) Uruchamianie wiersza polece(cid:254) Obs(cid:228)uga serwera z poziomu wiersza polece(cid:254) Instrukcje MySQL Typy danych Sprawdzanie istnienia pliku Tworzenie pliku Odczytywanie zawarto(cid:264)ci plików Kopiowanie plików Przenoszenie pliku Kasowanie pliku Aktualizowanie plików Ochrona plików przed wielokrotnym otwarciem Odczytywanie ca(cid:228)ego pliku Wysy(cid:228)anie plików 152 152 152 153 155 155 155 156 157 158 159 163 165 166 8. Wst(cid:253)p do MySQL ....................................................................................................... 167 167 168 168 168 172 173 177 185 185 190 198 201 201 201 203 9. Zaawansowana obs(cid:293)uga MySQL ..............................................................................205 205 206 207 207 209 212 214 214 214 215 216 217 217 218 219 Projektowanie bazy Klucze g(cid:228)ówne, czyli kluczowy element relacyjnych baz danych Normalizacja Funkcje MySQL Dost(cid:246)p do MySQL za po(cid:264)rednictwem aplikacji phpMyAdmin Pytania Tworzenie indeksu Tworzenie zapyta(cid:254) do bazy MySQL (cid:227)(cid:241)czenie tabel Zastosowanie operatorów logicznych Pierwsza posta(cid:232) normalna Druga posta(cid:232) normalna Trzecia posta(cid:232) normalna Kiedy nie stosowa(cid:232) normalizacji Relacje Jeden do jednego Jeden do wielu Wiele do wielu Bazy danych i anonimowo(cid:264)(cid:232) Transakcje Wywo(cid:228)ania systemowe XHTML czy HTML5? Pytania Indeksy Mechanizmy sk(cid:228)adowania danych z obs(cid:228)ug(cid:241) transakcji Instrukcja BEGIN 8 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę Tworzenie zapyta(cid:254) do bazy MySQL za po(cid:264)rednictwem PHP Pytania Proces Tworzenie pliku logowania Nawi(cid:241)zywanie po(cid:228)(cid:241)czenia z MySQL Praktyczny przyk(cid:228)ad Tablica $_POST Usuwanie rekordu Wy(cid:264)wietlanie formularza Wysy(cid:228)anie zapyta(cid:254) do bazy danych Dzia(cid:228)anie programu Instrukcja COMMIT Instrukcja ROLLBACK Instrukcja EXPLAIN Archiwizacja i przywracanie danych Instrukcja mysqldump Tworzenie pliku z kopi(cid:241) zapasow(cid:241) Odtwarzanie danych z pliku kopii zapasowej Zapisywanie danych w formacie CSV Planowanie tworzenia kopii zapasowych 219 219 220 221 221 222 224 225 225 226 10. Korzystanie z MySQL za po(cid:316)rednictwem PHP ..........................................................227 227 227 228 229 233 235 236 237 237 238 239 239 240 241 241 242 242 243 243 245 246 247 248 249 251 252 11. Obs(cid:293)uga formularzy ...................................................................................................253 253 254 256 257 258 264 266 MySQL w praktyce Tworzenie tabeli Wy(cid:264)wietlanie informacji o tabeli Usuwanie tabeli Dodawanie danych Odczytywanie danych Aktualizowanie danych Usuwanie danych Zastosowanie opcji AUTO_INCREMENT Wykonywanie zapyta(cid:254) pomocniczych Zapobieganie próbom ataków Dzia(cid:228)ania prewencyjne Zastosowanie elementów zast(cid:246)pczych Zapobieganie przekazywaniu niepo(cid:276)(cid:241)danych danych przez HTML Opcja register_globals — rozwi(cid:241)zanie przestarza(cid:228)e, ale wci(cid:241)(cid:276) spotykane Warto(cid:264)ci domy(cid:264)lne Rodzaje pól Oczyszczanie danych wej(cid:264)ciowych Proceduralny wariant zastosowania mysqli Pytania Tworzenie formularzy Odczytywanie przes(cid:228)anych danych Przyk(cid:228)adowy program Spis tre(cid:316)ci (cid:95) 9 Kup książkęPoleć książkę Funkcje oczekuj(cid:241)ce na pe(cid:228)n(cid:241) implementacj(cid:246) Pytania Zastosowanie ciasteczek w PHP Tworzenie ciasteczka Dost(cid:246)p do ciasteczka Usuwanie ciasteczek Autoryzacja HTTP Przechowywanie loginów i hase(cid:228) „Solenie” Obs(cid:228)uga sesji Co nowego w HTML5? Atrybut autocomplete Atrybut autofocus Atrybut placeholder Atrybut required Atrybuty nadpisania Atrybuty width i height Atrybut form Atrybut list Atrybuty min oraz max Atrybut step Pole wej(cid:264)ciowe typu color Pola wej(cid:264)ciowe typu number i range Selektory daty i czasu 268 269 269 269 269 270 270 270 270 271 271 271 272 272 272 272 12. Ciasteczka, sesje i autoryzacja ..................................................................................275 275 276 277 277 278 281 281 285 285 288 289 289 292 13. Zapoznanie z JavaScriptem .......................................................................................293 293 295 295 296 297 299 299 299 300 300 300 301 301 302 302 Zastosowanie skryptów w nag(cid:228)ówku dokumentu Starsze i niestandardowe przegl(cid:241)darki Do(cid:228)(cid:241)czanie plików JavaScript Debugowanie kodu JavaScript Zastosowanie komentarzy (cid:263)redniki Zmienne Zmienne znakowe Zmienne numeryczne Tablice Operatory Inicjowanie sesji Ko(cid:254)czenie sesji Okre(cid:264)lanie czasu trwania sesji Bezpiecze(cid:254)stwo sesji Operatory arytmetyczne Operatory przypisania Operatory porównania Pytania JavaScript i tekst w HTML 10 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę Kilka s(cid:228)ów o document.write Ale to nie takie proste… Kolejne zastosowanie symbolu $ Zastosowanie obiektowego modelu dokumentu Zastosowanie funkcji console.log Zastosowanie funkcji alert Umieszczanie tekstu w elementach HTML Zastosowanie funkcji document.write Operatory logiczne Inkrementacja i dekrementacja zmiennych Konkatenacja (cid:228)a(cid:254)cuchów znaków Znaki modyfikuj(cid:241)ce Typowanie zmiennych Funkcje Zmienne globalne Zmienne lokalne Obiektowy model dokumentu 302 303 303 303 304 305 305 306 307 308 309 309 310 310 311 311 311 312 14. Wyra(cid:348)enia i sterowanie dzia(cid:293)aniem programu w JavaScripcie .............................. 313 313 314 315 315 316 316 319 320 321 322 322 322 323 324 325 325 326 326 327 327 328 329 15. Funkcje, obiekty i tablice w JavaScripcie .................................................................. 331 331 331 332 Wyra(cid:276)enia Litera(cid:228)y i zmienne Operatory Priorytet operatorów Asocjacyjno(cid:264)(cid:232) Operatory relacji Instrukcja with Zdarzenie onerror Konstrukcja try … catch Wyra(cid:276)enia warunkowe Funkcje w JavaScripcie Definiowanie funkcji Tablica arguments Pytania Instrukcja if Instrukcja else Instrukcja switch Operator ? P(cid:246)tle P(cid:246)tle while P(cid:246)tle do … while P(cid:246)tle for Przerywanie p(cid:246)tli Instrukcja continue Typowanie jawne Pytania Spis tre(cid:316)ci (cid:95) 11 Kup książkęPoleć książkę Weryfikowanie wprowadzonych danych przy u(cid:276)yciu JavaScriptu Dokument validate.html (cz(cid:246)(cid:264)(cid:232) pierwsza) Dokument validate.html (cz(cid:246)(cid:264)(cid:232) druga) Wyra(cid:276)enia regularne Zwracanie warto(cid:264)ci Zwracanie tablicy Obiekty w JavaScripcie Deklarowanie klasy Tworzenie obiektu Dost(cid:246)p do obiektów S(cid:228)owo kluczowe prototype Tablice w JavaScripcie Tablice numeryczne Tablice asocjacyjne Tablice wielowymiarowe Zastosowanie metod do obs(cid:228)ugi tablic 333 334 335 335 337 337 337 339 340 341 341 342 346 16. Weryfikacja danych i obs(cid:293)uga b(cid:293)(cid:253)dów w JavaScripcie i PHP ...................................349 349 350 352 355 355 356 357 357 358 358 358 361 362 362 363 364 369 17. Zastosowanie technologii Ajax ..................................................................................371 372 372 374 378 380 384 385 18. Wst(cid:253)p do CSS .............................................................................................................387 388 388 389 389 Dopasowywanie za pomoc(cid:241) metaznaków Dopasowanie „rozmyte” Grupowanie przy u(cid:276)yciu nawiasów Klasy znaków Okre(cid:264)lanie zakresu Zaprzeczenie Kilka bardziej skomplikowanych przyk(cid:228)adów Podsumowanie metaznaków Modyfikatory ogólne Zastosowanie wyra(cid:276)e(cid:254) regularnych w JavaScripcie Zastosowanie wyra(cid:276)e(cid:254) regularnych w PHP Twój pierwszy program Ajax Zastosowanie metody GET zamiast POST Przesy(cid:228)anie (cid:276)(cid:241)da(cid:254) XML Zastosowanie platform Ajax Importowanie arkusza stylów Importowanie stylów CSS z poziomu HTML Style zagnie(cid:276)d(cid:276)one Zastosowanie identyfikatorów ID Ponowne wy(cid:264)wietlenie formularza po weryfikacji w PHP Pytania Czym jest Ajax? Zastosowanie obiektu XMLHttpRequest Pytania Pytania 12 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę Zastosowanie klas Zastosowanie (cid:264)redników Regu(cid:228)y CSS Wiele deklaracji Zastosowanie komentarzy Rodzaje stylów Style domy(cid:264)lne Style u(cid:276)ytkownika Zewn(cid:246)trzne arkusze stylów Style wewn(cid:246)trzne Style bezpo(cid:264)rednie Selektory CSS Selektor typu Selektor potomka Selektor dziecka Selektor identyfikatora Selektor klasy Selektor atrybutu Selektor uniwersalny Selekcja grupowa Dziedziczenie kaskadowe (cid:273)ród(cid:228)a stylów Metody definiowania regu(cid:228) Selektory arkuszy stylów Obliczanie specyficzno(cid:264)ci Ró(cid:276)nica mi(cid:246)dzy elementami div i span Jednostki miar Fonty i typografia font-family font-style font-size font-weight Zarz(cid:241)dzanie stylami tekstu Efekty tekstowe Odst(cid:246)py Wyrównanie Wielko(cid:264)(cid:232) znaków Wci(cid:246)cia Kolory w CSS Skrócone okre(cid:264)lenia kolorów Gradienty Rozmieszczanie elementów Po(cid:228)o(cid:276)enie bezwzgl(cid:246)dne Po(cid:228)o(cid:276)enie wzgl(cid:246)dne Po(cid:228)o(cid:276)enie sta(cid:228)e Pseudoklasy Skracanie regu(cid:228) 389 389 390 390 391 391 392 392 393 393 393 393 393 393 394 395 396 396 397 398 398 398 399 399 400 401 403 405 405 406 406 407 407 407 408 408 408 408 408 409 410 411 411 412 412 413 415 Spis tre(cid:316)ci (cid:95) 13 Kup książkęPoleć książkę Dopasowywanie fragmentów (cid:228)a(cid:254)cuchów Selektory atrybutów W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) box-sizing T(cid:228)a w CSS3 Wiele obrazów w tle Ramki w CSS3 W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) border-color W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) border-radius Cienie W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) overflow Uk(cid:228)ad wielokolumnowy Kolory i przezroczysto(cid:264)(cid:232) Definiowanie marginesów Definiowanie ramek Definiowanie odst(cid:246)pu Zawarto(cid:264)(cid:232) obiektu W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) background-clip W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) background-origin W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) background-size Zastosowanie w(cid:228)a(cid:264)ciwo(cid:264)ci auto 416 416 418 419 420 420 19. Zaawansowane regu(cid:293)y CSS w CSS3 ..........................................................................423 423 423 425 425 425 427 427 428 428 430 430 430 433 434 434 435 436 436 437 437 437 438 438 438 439 439 440 441 442 443 443 444 444 444 445 446 20. Dost(cid:253)p do CSS z poziomu JavaScriptu ..................................................................... 449 449 449 450 W(cid:228)a(cid:264)ciwo(cid:264)ci przej(cid:264)(cid:232) Czas trwania przej(cid:264)cia Opó(cid:274)nienie przej(cid:264)cia Dynamika przej(cid:264)cia Skrócona sk(cid:228)adnia Efekty tekstowe W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) text-shadow W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) text-overflow W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) word-wrap Kolory HSL Kolory HSLA Kolory RGB Kolory RGBA W(cid:228)a(cid:264)ciwo(cid:264)(cid:232) opacity Fonty internetowe Fonty Google Przekszta(cid:228)cenia Przekszta(cid:228)cenia 3D Przej(cid:264)cia Ponowne spotkanie z funkcj(cid:241) getElementById Model pude(cid:228)kowy i uk(cid:228)ad strony Pytania Pytania Funkcja O Funkcja S 14 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę Pytania Dlaczego jQuery? Do(cid:228)(cid:241)czanie jQuery Funkcja C Do(cid:228)(cid:241)czanie opisanych funkcji Dost(cid:246)p do w(cid:228)a(cid:264)ciwo(cid:264)ci CSS z poziomu JavaScriptu Usuwanie elementów Inne sposoby na dodawanie i usuwanie elementów Zastosowanie przerwa(cid:254) Niektóre typowe w(cid:228)a(cid:264)ciwo(cid:264)ci Inne w(cid:228)a(cid:264)ciwo(cid:264)ci JavaScript w kodzie HTML S(cid:228)owo kluczowe this (cid:227)(cid:241)czenie zdarze(cid:254) i obiektów w skrypcie Odwo(cid:228)ywanie si(cid:246) do innych zdarze(cid:254) Dodawanie nowych elementów Zastosowanie przerwania setTimeout Anulowanie opó(cid:274)nienia Zastosowanie przerwania setInterval Animacje na bazie przerwa(cid:254) 451 451 452 452 453 455 455 456 456 457 459 459 460 460 461 461 463 464 21. Wprowadzenie do jQuery .........................................................................................467 467 468 468 469 469 470 471 471 471 472 473 473 474 474 474 474 475 476 477 477 478 479 480 481 482 484 485 486 Zdarzenia blur i focus S(cid:228)owo kluczowe this Zdarzenia click i dblclick Zdarzenie keypress Przemy(cid:264)lane programowanie Zdarzenie mousemove Inne zdarzenia myszy Inne metody zwi(cid:241)zane z obs(cid:228)ug(cid:241) myszy Zdarzenie submit Wybór odpowiedniej wersji Pobieranie Zastosowanie sieci dostarczania tre(cid:264)ci (CDN) Zawsze najnowsza wersja Dostosowywanie jQuery Obs(cid:228)uga zdarze(cid:254) Oczekiwanie na gotowo(cid:264)(cid:232) dokumentu Funkcje i w(cid:228)a(cid:264)ciwo(cid:264)ci zwi(cid:241)zane ze zdarzeniami Selektory Metoda css Selektor elementów Selektor identyfikatorów Selektor klas (cid:227)(cid:241)czenie selektorów Sk(cid:228)adnia jQuery Prosty przyk(cid:228)ad Unikanie konfliktów mi(cid:246)dzy bibliotekami Spis tre(cid:316)ci (cid:95) 15 Kup książkęPoleć książkę Efekty specjalne U(cid:276)ycie jQuery bez selektorów Metoda $.each Metoda $.map Manipulowanie drzewem DOM Ró(cid:276)nica mi(cid:246)dzy metodami text i html Metody val i attr Dodawanie i usuwanie elementów Dynamiczne stosowanie klas Modyfikowanie wymiarów Metody width i height Metody innerWidth i innerHeight Metody outerWidth i outerHeight Nawigowanie w obr(cid:246)bie drzewa DOM Ukrywanie i wy(cid:264)wietlanie Metoda toggle Stopniowe zanikanie i wy(cid:264)wietlanie Przesuwanie elementów w gór(cid:246) i w dó(cid:228) Animacje Zatrzymywanie animacji Elementy nadrz(cid:246)dne Elementy potomne Elementy siostrzane Wybieranie poprzedzaj(cid:241)cych i kolejnych elementów Przetwarzanie selekcji w jQuery Metoda is 487 488 489 489 490 491 494 494 495 496 496 499 499 499 502 502 502 503 506 507 508 509 511 512 512 513 514 514 514 515 515 516 516 516 22. Wst(cid:253)p do HTML5 ....................................................................................................... 519 520 521 523 524 524 525 525 525 525 526 Obiekt canvas Geolokacja D(cid:274)wi(cid:246)k i filmy Formularze Magazyn danych Web workers Aplikacje sieciowe Mikrodane Podsumowanie Pytania Zastosowanie technologii Ajax Zastosowanie metody post Zastosowanie metody get Rozszerzenia jQuery User Interface Inne rozszerzenia jQuery Mobile Pytania 16 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę Tworzenie elementu canvas i dost(cid:246)p do niego Umieszczanie napisów na elemencie canvas Rysowanie linii W(cid:228)asno(cid:264)(cid:232) lineWidth W(cid:228)asno(cid:264)ci lineCap i lineJoin W(cid:228)asno(cid:264)(cid:232) miterLimit Metoda strokeText W(cid:228)asno(cid:264)(cid:232) textBaseLine W(cid:228)asno(cid:264)(cid:232) font W(cid:228)asno(cid:264)(cid:232) textAlign Metoda fillText Metoda measureText Funkcja toDataURL Okre(cid:264)lanie formatu obrazu Metoda fillRect Metoda clearRect Metoda strokeRect (cid:227)(cid:241)czenie wymienionych instrukcji Metoda createLinearGradient Szczegó(cid:228)owe informacje o metodzie addColorStop Metoda createRadialGradient Wype(cid:228)nianie wzorkami 23. Obiekt canvas w HTML5 ............................................................................................527 527 529 530 530 531 531 531 532 534 535 536 538 538 539 539 539 540 541 541 541 541 543 543 544 544 544 545 546 548 549 550 552 552 554 555 555 555 556 557 557 558 559 560 561 562 Metoda drawImage Skalowanie obrazu Wybieranie fragmentu obrazu Kopiowanie z elementu canvas Tworzenie cieni Kre(cid:264)lenie (cid:264)cie(cid:276)ek Metody moveTo i lineTo Metoda stroke Metoda rect Wype(cid:228)nianie obszarów Metoda clip Metoda isPointInPath Zastosowanie krzywych Metoda arc Metoda arcTo Metoda quadraticCurveTo Metoda bezierCurveTo Obs(cid:228)uga obrazków Przetwarzanie obrazu na poziomie pikseli Metoda getImageData Tablica data Metoda putImageData Metoda createImageData Spis tre(cid:316)ci (cid:95) 17 Kup książkęPoleć książkę Podsumowanie Pytania 25. Magazyn lokalny Zastosowanie magazynu lokalnego Obiekt localStorage Zaawansowane efekty graficzne W(cid:228)asno(cid:264)(cid:232) globalCompositeOperation W(cid:228)asno(cid:264)(cid:232) globalAlpha Przekszta(cid:228)cenia Metoda scale Metody save i restore Metoda rotate Metoda translate Metoda transform Metoda setTransform O kodekach Element audio Wsparcie dla przegl(cid:241)darek nieobs(cid:228)uguj(cid:241)cych HTML5 Element video Kodeki wideo Obs(cid:228)uga starszych przegl(cid:241)darek 562 562 564 564 564 566 566 567 568 570 570 571 24. Filmy i d(cid:346)wi(cid:253)k w HTML5 ............................................................................................573 574 575 577 578 578 581 Podsumowanie 583 Pytania 583 Inne funkcje HTML5 ...................................................................................................585 585 Geolokacja i us(cid:228)ugi GPS 586 Inne sposoby lokalizacji 586 Geolokacja i HTML5 590 590 591 593 594 596 598 601 603 603 604 26. Zastosowanie wszystkich omówionych technologii ...............................................605 605 606 606 606 608 609 611 611 Web workers Aplikacje offline Technologia przeci(cid:241)gnij i upu(cid:264)(cid:232) Komunikacja mi(cid:246)dzy dokumentami Mikrodane Inne znaczniki HTML5 Podsumowanie Pytania functions.php Funkcje header.php setup.php index.php signup.php Projektowanie serwisu spo(cid:228)eczno(cid:264)ciowego Strona WWW z przyk(cid:228)adami 18 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę Sprawdzanie dost(cid:246)pno(cid:264)ci nazwy u(cid:276)ytkownika Logowanie checkuser.php login.php profile.php Dodawanie tekstu O mnie Dodawanie zdj(cid:246)cia profilowego Przetwarzanie obrazu Wy(cid:264)wietlanie bie(cid:276)(cid:241)cego profilu members.php Wy(cid:264)wietlanie profilu u(cid:276)ytkownika Dodawanie i usuwanie znajomych Wy(cid:264)wietlanie listy wszystkich u(cid:276)ytkowników friends.php messages.php logout.php styles.css javascript.js 613 614 614 615 616 617 617 618 618 621 622 622 622 623 626 629 629 632 A Odpowiedzi na pytania kontrolne ............................................................................635 B Zasoby internetowe ..................................................................................................653 653 653 654 654 654 654 655 655 C S(cid:293)owa z grupy stopwords w MySQL .........................................................................657 D Funkcje MySQL ........................................................................................................... 661 661 663 668 E Selektory, obiekty i metody jQuery .......................................................................... 671 Selektory jQuery 671 Obiekty jQuery 674 Metody jQuery 676 Skorowidz ..................................................................................................................689 Informacje na temat PHP Informacje na temat MySQL Informacje na temat JavaScriptu Informacje na temat CSS Informacje na temat HTML5 Informacje na temat technologii AJAX Inne ciekawe strony WWW Serwisy informacyjne wydawnictwa O’Reilly Funkcje do obs(cid:228)ugi (cid:228)a(cid:254)cuchów znaków Funkcje do obs(cid:228)ugi daty Funkcje do obs(cid:228)ugi czasu Spis tre(cid:316)ci (cid:95) 19 Kup książkęPoleć książkę 20 (cid:95) Spis tre(cid:316)ci Kup książkęPoleć książkę ROZDZIA(cid:292) 10. Korzystanie z MySQL za po(cid:316)rednictwem PHP Je(cid:264)li zapozna(cid:228)e(cid:264) si(cid:246) z poprzednimi rozdzia(cid:228)ami, to powiniene(cid:264) ju(cid:276) sprawnie pos(cid:228)ugiwa(cid:232) si(cid:246) MySQL i PHP. W tym rozdziale dowiesz si(cid:246), w jaki sposób po(cid:228)(cid:241)czy(cid:232) te dwie technologie za pomoc(cid:241) wbudowanych funkcji PHP umo(cid:276)liwiaj(cid:241)cych bezpo(cid:264)redni dost(cid:246)p do MySQL. Tworzenie zapyta(cid:295) do bazy MySQL za po(cid:316)rednictwem PHP Zasadniczym powodem stosowania PHP jako interfejsu dla MySQL jest mo(cid:276)liwo(cid:264)(cid:232) sformato- wania wyników zwróconych przez zapytania SQL w sposób pozwalaj(cid:241)cy na wy(cid:264)wietlenie ich na stronie internetowej. Je(cid:264)li mo(cid:276)esz si(cid:246) zalogowa(cid:232) do MySQL za pomoc(cid:241) nazwy u(cid:276)ytkowni- ka i has(cid:228)a, to mo(cid:276)esz to zrobi(cid:232) tak(cid:276)e poprzez PHP. Ró(cid:276)nica polega na tym, (cid:276)e zamiast korzysta(cid:232) z wiersza polece(cid:254) MySQL do wprowadzania in- strukcji i wy(cid:264)wietlania wyników, b(cid:246)dziesz tworzy(cid:228) zapytania w postaci (cid:228)a(cid:254)cuchów znaków, przekazywane do MySQL. Wynik zwrócony przez baz(cid:246) nie zostanie sformatowany tak jak w przypadku pracy z wierszem polece(cid:254), lecz b(cid:246)dzie mia(cid:228) posta(cid:232) pewnej struktury, któr(cid:241) PHP potrafi zinterpretowa(cid:232). Za pomoc(cid:241) instrukcji PHP mo(cid:276)na odczytywa(cid:232) dane z tej struktury i wy- (cid:264)wietla(cid:232) je na stronie WWW. W tym rozdziale z poprzednich wyda(cid:254) ksi(cid:241)(cid:276)ki opisywa(cid:228)em stary sposób dost(cid:246)pu do bazy danych MySQL, wykorzystuj(cid:241)cy funkcj(cid:246) mysql; dopiero w kolejnym roz- dziale omawia(cid:228)em nowsze rozszerzenie o nazwie mysqli. Ale jak to mówi(cid:241), czas nie stoi w miejscu; liczba systemów ze starszymi wersjami kodu i oprogramowa- nia powinna by(cid:232) ju(cid:276) relatywnie ma(cid:228)a, w tym wydaniu postanowi(cid:228)em wi(cid:246)c od ra- zu przyst(cid:241)pi(cid:232) do omawiania nowszego rozszerzenia — które obecnie sta(cid:228)o si(cid:246) ju(cid:276) praktycznie standardem. Proces Proces komunikacji z MySQL za pomoc(cid:241) PHP wygl(cid:241)da tak: 1. nawi(cid:241)zanie po(cid:228)(cid:241)czenia z MySQL i wybór bazy danych, 227 Kup książkęPoleć książkę 2. utworzenie zapytania, 3. wykonanie zapytania, 4. pozyskanie rezultatów i wy(cid:264)wietlenie ich na stronie internetowej, 5. powtórzenie kroków od 2. do 4. a(cid:276) do uzyskania wszystkich potrzebnych danych, 6. roz(cid:228)(cid:241)czenie z MySQL. Ju(cid:276) za chwil(cid:246) zajmiemy si(cid:246) tymi punktami krok po kroku, przede wszystkim jednak powinie- ne(cid:264) skonfigurowa(cid:232) procedur(cid:246) logowania w bezpieczny sposób, by utrudni(cid:232) postronnym oso- bom przechwycenie danych dost(cid:246)powych do bazy. Tworzenie pliku logowania Wi(cid:246)kszo(cid:264)(cid:232) stron internetowych napisanych w PHP sk(cid:228)ada si(cid:246) z wielu skryptów wymagaj(cid:241)cych dost(cid:246)pu do MySQL, a tym samym — loginu oraz has(cid:228)a. Maj(cid:241)c to na uwadze, dobrze jest utwo- rzy(cid:232) osobny plik zawieraj(cid:241)cy te informacje i do(cid:228)(cid:241)cza(cid:232) go do plików strony za ka(cid:276)dym razem, gdy b(cid:246)dzie to konieczne. Przyk(cid:228)ad 10.1 przedstawia tego rodzaju plik, który nazwa(cid:228)em login.php. Przyk(cid:228)ad 10.1. Plik login.php ?php // login.php $hn = localhost ; $db = publications ; $un = u(cid:285)ytkownik ; $pw = has(cid:239)o ; ? Przepisz podany przyk(cid:228)ad, zast(cid:246)puj(cid:241)c tymczasowe warto(cid:264)ci, takie jak u(cid:285)ytkownik i has(cid:239)o, rze- czywistymi parametrami dost(cid:246)powymi do bazy MySQL, a nast(cid:246)pnie zapisz plik w folderze z projektem, który skonfigurowa(cid:228)e(cid:264) w rozdziale 2. Ju(cid:276) za chwil(cid:246) z niego skorzystamy. Nazwa hosta localhost powinna by(cid:232) poprawna, je(cid:264)li pracujesz na MySQL zainstalowanym na lokalnym komputerze, a je(cid:276)eli wykonywa(cid:228)e(cid:264) (cid:232)wiczenia opisane w poprzednich rozdzia(cid:228)ach, to na serwerze powinna si(cid:246) znajdowa(cid:232) baza danych o nazwie publications. Znaczniki ?php oraz ? s(cid:241) bardzo wa(cid:276)ne zw(cid:228)aszcza w przypadku pliku login.php przedstawio- nego w przyk(cid:228)adzie 10.1, bo wiersze pomi(cid:246)dzy nimi mog(cid:241) by(cid:232) zinterpretowane wy(cid:228)(cid:241)cznie ja- ko kod PHP. Je(cid:264)li by(cid:264) je pomin(cid:241)(cid:228), a kto(cid:264) odwo(cid:228)a(cid:228)by si(cid:246) do tego pliku bezpo(cid:264)rednio na Twojej stronie internetowej, to zosta(cid:228)by on po prostu wy(cid:264)wietlony w przegl(cid:241)darce i zdradzi(cid:228) Twoje sekrety. Dzi(cid:246)ki zastosowaniu znaczników intruz zobaczy tylko pust(cid:241) stron(cid:246). Tak przygotowa- ny plik b(cid:246)dzie mo(cid:276)na poprawnie do(cid:228)(cid:241)cza(cid:232) do innych plików PHP. Zmienna $hn informuje PHP, do jakiego serwera ma si(cid:246) odwo(cid:228)a(cid:232) przy po(cid:228)(cid:241)czeniu z baz(cid:241) da- nych. To konieczne, gdy(cid:276) za po(cid:264)rednictwem PHP mo(cid:276)esz nawi(cid:241)za(cid:232) po(cid:228)(cid:241)czenie z dowoln(cid:241) baz(cid:241) danych MySQL dost(cid:246)pn(cid:241) z poziomu Twojego systemu, w tym tak(cid:276)e z serwerami w interne- cie. Na potrzeby przyk(cid:228)adów opisanych w tym rozdziale u(cid:276)yjemy jednak lokalnego serwera i zamiast podawa(cid:232) pe(cid:228)n(cid:241) nazw(cid:246) domeny, tak(cid:241) jak mysql.mojserwer.com, wpiszemy po prostu localhost (lub adres IP 127.0.0.1). W zmiennej $db podajemy nazw(cid:246) bazy, której b(cid:246)dziemy u(cid:276)ywa(cid:232) — w tym przypadku b(cid:246)dzie to baza publications, któr(cid:241) zapewne utworzy(cid:228)e(cid:264) w rozdziale 8., b(cid:241)d(cid:274) baza udost(cid:246)pniona przez administratora serwera (wówczas musisz oczywi(cid:264)cie odpowiednio zmodyfikowa(cid:232) plik login.php). 228 (cid:95) Rozdzia(cid:293) 10. Korzystanie z MySQL za po(cid:316)rednictwem PHP Kup książkęPoleć książkę Kolejn(cid:241) zalet(cid:241) umieszczenia danych logowania w jednym miejscu jest (cid:228)atwo(cid:264)(cid:232) ak- tualizacji projektu przy zmianie has(cid:228)a: mo(cid:276)esz to robi(cid:232) tak cz(cid:246)sto, jak tylko masz ochot(cid:246), bo niezale(cid:276)nie od liczby plików PHP odwo(cid:228)uj(cid:241)cych si(cid:246) do MySQL b(cid:246)dziesz musia(cid:228) wprowadzi(cid:232) poprawk(cid:246) tylko w jednym miejscu. Nawi(cid:233)zywanie po(cid:293)(cid:233)czenia z MySQL Po zapisaniu pliku login.php mo(cid:276)na go do(cid:228)(cid:241)czy(cid:232) za pomoc(cid:241) dyrektywy require_once do dowol- nego pliku z kodem PHP, który b(cid:246)dzie wymaga(cid:228) dost(cid:246)pu do bazy danych. Takie rozwi(cid:241)zanie jest o tyle lepsze od u(cid:276)ycia instrukcji include, (cid:276)e nieodnalezienie pliku z danymi logowania spowoduje wy(cid:264)wietlenie komunikatu o krytycznym b(cid:228)(cid:246)dzie. A wierz mi, brak pliku z danymi logowania do bazy jest krytycznym b(cid:228)(cid:246)dem. Ponadto zastosowanie dyrektywy require_once zamiast require oznacza, (cid:276)e plik zostanie wczy- tany tylko wtedy, je(cid:264)li nie zosta(cid:228) do(cid:228)(cid:241)czony ju(cid:276) wcze(cid:264)niej, co pozwala zapobiec marnowaniu zasobów na niepotrzebne odwo(cid:228)ania do dysku twardego. Przyk(cid:228)ad 10.2 przedstawia niezb(cid:246)d- ny fragment kodu. Przyk(cid:228)ad 10.2. Nawi(cid:241)zywanie po(cid:228)(cid:241)czenia z serwerem MySQL za po(cid:264)rednictwem mysqli ?php require_once login.php ; $conn = new mysqli($hn, $un, $pw, $db); if ($conn- connect_error) die($conn- connect_error); ? W tym przyk(cid:228)adzie zosta(cid:228) utworzony nowy obiekt o nazwie $conn poprzez wywo(cid:228)anie meto- dy mysqli, do której zosta(cid:228)y przekazane argumenty zaczerpni(cid:246)te z pliku login.php. Za obs(cid:228)ug(cid:246) b(cid:228)(cid:246)dów odpowiada odwo(cid:228)anie do w(cid:228)a(cid:264)ciwo(cid:264)ci $conn- connect_error. Funkcja die oddaje nieocenione us(cid:228)ugi podczas programowania w PHP, ale na ser- werze produkcyjnym warto przygotowa(cid:232) specjalne komunikaty o b(cid:228)(cid:246)dach, któ- re b(cid:246)d(cid:241) znacznie przyja(cid:274)niejsze w odbiorze. W takich przypadkach nie przerywa si(cid:246) dzia(cid:228)ania programu PHP, ale odpowiednio formatuje komunikat i wy(cid:264)wietla go po zwyk(cid:228)ym zako(cid:254)czeniu pracy programu, na przyk(cid:228)ad tak: function mysql_fatal_error($msg) { $msg2 = mysql_error(); echo _END Niestety nie uda(cid:239)o si(cid:218) zrealizowa(cid:202) zadania. Komunikat b(cid:239)(cid:218)du: p $msg: $msg2 /p Kliknij przycisk Wstecz w przegl(cid:200)darce i spróbuj ponownie. W razie dalszych problemów prosimy o wys(cid:239)anie a href= mailto:admin@serwer.com maila do administratora /a . Dzi(cid:218)kujemy. _END; } Operator - oznacza, (cid:276)e element po jego prawej stronie jest w(cid:228)a(cid:264)ciwo(cid:264)ci(cid:241) albo metod(cid:241) obiektu znajduj(cid:241)cego si(cid:246) po stronie lewej. Gdyby w tym przypadku w(cid:228)a(cid:264)ciwo(cid:264)(cid:232) connect_error mia(cid:228)a Tworzenie zapyta(cid:295) do bazy MySQL za po(cid:316)rednictwem PHP (cid:95) 229 Kup książkęPoleć książkę jak(cid:241)(cid:264) warto(cid:264)(cid:232), oznacza(cid:228)oby to wyst(cid:241)pienie b(cid:228)(cid:246)du. Wywo(cid:228)ujemy wi(cid:246)c funkcj(cid:246) die, która wy(cid:264)wie- tli t(cid:246) warto(cid:264)(cid:232) — zawiera ona informacje o napotkanym b(cid:228)(cid:246)dzie. Obiekt $conn b(cid:246)dzie u(cid:276)ywany w kolejnych przyk(cid:228)adach do uzyskania dost(cid:246)pu do bazy MySQL. Konstruowanie i wykonywanie zapytania Aby wys(cid:228)a(cid:232) zapytanie do MySQL przy u(cid:276)yciu PHP, wystarczy u(cid:276)y(cid:232) metody query obiektu po- (cid:228)(cid:241)czenia. Przyk(cid:228)ad 10.3 ilustruje, jak to zrobi(cid:232). Przyk(cid:228)ad 10.3. Wysy(cid:228)anie zapytania do bazy za po(cid:264)rednictwem mysqli ?php $query = SELECT * FROM classics ; $result = $conn- query($query); if (!$result) die($conn- error); ? W tym przypadku zmiennej $query zosta(cid:228) przypisany (cid:228)a(cid:254)cuch tekstowy zawieraj(cid:241)cy zapytanie do wykonania. Zmienna ta zosta(cid:228)a nast(cid:246)pnie przekazana do metody query obiektu $conn. Z kolei metoda ta zwraca rezultat, który trafia do obiektu $result. Je(cid:264)li warto(cid:264)(cid:232) $result wynosi FALSE, to znaczy, (cid:276)e wyst(cid:241)pi(cid:228) jaki(cid:264) b(cid:228)(cid:241)d, którego opis zosta(cid:228) zapisany we w(cid:228)a(cid:264)ciwo(cid:264)ci error obiektu po(cid:228)(cid:241)czenia. W takim przypadku wywo(cid:228)ana zostaje funkcja die, która ten b(cid:228)(cid:241)d wy(cid:264)wietli. Wszystkie dane zwrócone przez MySQL trafi(cid:241) do obiektu $result w postaci, w której mo(cid:276)na je (cid:228)atwo przetwarza(cid:232). Pobieranie rezultatu Po zwróceniu rezultatu do obiektu $result mo(cid:276)esz pobra(cid:232) z niego potrzebne dane po kolei przy u(cid:276)yciu metody fetch_assoc tego obiektu. Przyk(cid:228)ad 10.4 stanowi po(cid:228)(cid:241)czenie i rozszerzenie dotychczasowych przyk(cid:228)adów. Jest to ju(cid:276) kompletny program, który mo(cid:276)esz przepisa(cid:232) i uru- chomi(cid:232), aby pozyska(cid:232) z bazy potrzebne dane (rysunek 10.1). Zalecam zapisanie go pod na- zw(cid:241) query.php w tym samym folderze co plik login.php (albo wykorzystanie pliku pobranego z darmowego archiwum przyk(cid:228)adów, dost(cid:246)pnego na stronie lpmj.net). Przyk(cid:228)ad 10.4. Zwracanie zawarto(cid:264)ci poszczególnych komórek ?php // query.php require_once login.php ; $conn = new mysqli($hn, $un, $pw, $db); if ($conn- connect_error) die($conn- connect_error); $query = SELECT * FROM classics ; $result = $conn- query($query); if (!$result) die($conn- error); $rows = $result- num_rows; for ($j = 0 ; $j $rows ; ++$j) { $result- data_seek($j); echo Autor: . $result- fetch_assoc()[ author ] . br ; $result- data_seek($j); echo Tytu(cid:239): . $result- fetch_assoc()[ title ] . br ; $result- data_seek($j); echo Kategoria: . $result- fetch_assoc()[ category ] . br ; $result- data_seek($j); echo Rok: . $result- fetch_assoc()[ year ] . br ; 230 (cid:95) Rozdzia(cid:293) 10. Korzystanie z MySQL za po(cid:316)rednictwem PHP Kup książkęPoleć książkę Rysunek 10.1. Rezultat dzia(cid:228)ania programu query.php z przyk(cid:228)adu 10.4 $result- data_seek($j); echo ISBN: . $result- fetch_assoc()[ isbn ] . br br ; } $result- close(); $conn- close(); ? W opisanym przyk(cid:228)adzie w celu odwo(cid:228)ania si(cid:246) do odpowiedniego wiersza danych przy ka(cid:276)- dej iteracji p(cid:246)tli u(cid:276)yli(cid:264)my metody data_seek obiektu $result. Nast(cid:246)pnie wykorzystali(cid:264)my meto- d(cid:246) fetch_assoc do pobrania warto(cid:264)ci przechowywanych w poszczególnych komórkach i wresz- cie warto(cid:264)ci te wy(cid:264)wietlili(cid:264)my przy u(cid:276)yciu instrukcji echo. Zapewne zgodzisz si(cid:246) ze mn(cid:241), (cid:276)e takie wyszukiwanie danych jest do(cid:264)(cid:232) uci(cid:241)(cid:276)liwe i powinna by(cid:232) jaka(cid:264) skuteczniejsza metoda na osi(cid:241)gni(cid:246)cie podobnego efektu. Taki sposób rzeczywi(cid:264)cie istnieje i polega na pobieraniu ca(cid:228)ych wierszy danych naraz. W rozdziale 9. przeczyta(cid:228)e(cid:264) o pierwszej, drugiej i trzeciej postaci normalnej bazy danych i by(cid:232) mo(cid:276)e zwróci(cid:228)e(cid:264) uwag(cid:246) na fakt, (cid:276)e tabela classics nie spe(cid:228)nia warun- ków tych postaci, poniewa(cid:276) zawiera ona informacje o autorze i o ksi(cid:241)(cid:276)ce. Wynika to z faktu, (cid:276)e tabela classics zosta(cid:228)a utworzona jeszcze przed omówieniem kwestii normalizacji. Jednak na potrzeby zilustrowania metod dost(cid:246)pu do MySQL z po- ziomu PHP ta tabela zupe(cid:228)nie wystarczy i pozwoli nam unikn(cid:241)(cid:232) (cid:276)mudnego wpi- sywania kolejnych danych — proponuj(cid:246) wi(cid:246)c si(cid:246) ni(cid:241) pos(cid:228)u(cid:276)y(cid:232). Tworzenie zapyta(cid:295) do bazy MySQL za po(cid:316)rednictwem PHP (cid:95) 231 Kup książkęPoleć książkę Pobieranie wiersza danych Aby pobra(cid:232) ca(cid:228)y wiersz danych naraz, nale(cid:276)y zast(cid:241)pi(cid:232) p(cid:246)tl(cid:246) for z przyk(cid:228)adu 10.4 tak(cid:241), jaka zosta(cid:228)a wyró(cid:276)niona pogrubieniem w przyk(cid:228)adzie 10.5. Po wykonaniu tej zmiany powiniene(cid:264) uzyska(cid:232) taki sam efekt, jaki zosta(cid:228) pokazany wcze(cid:264)niej na rysunku 10.1. Tak zmodyfikowany plik mo(cid:276)esz zapisa(cid:232) pod nazw(cid:241) fetchrow.php. Przyk(cid:228)ad 10.5. Odczytywanie zawarto(cid:264)ci kolejnych wierszy ?php //fetchrow.php require_once login.php ; $conn = new mysqli($hn, $un, $pw, $db); if ($conn- connect_error) die($conn- connect_error); $query = SELECT * FROM classics ; $result = $conn- query($query); if (!$result) die($conn- error); $rows = $result- num_rows; for ($j = 0 ; $j $rows ; ++$j) { $result- data_seek($j); $row = $result- fetch_array(MYSQLI_ASSOC); echo Autor: . $row[ author ] . br ; echo Tytu(cid:239): . $row[ title ] . br ; echo Kategoria: . $row[ category ] . br ; echo Rok: . $row[ year ] . br ; echo ISBN: . $row[ isbn ] . br br ; } $result- close(); $conn- close(); ? W tak zmodyfikowanym przyk(cid:228)adzie mamy do czynienia z pi(cid:246)ciokrotnie mniejsz(cid:241) liczb(cid:241) od- wo(cid:228)a(cid:254) do obiektu $result (w porównaniu z poprzednim kodem), a w ramach ka(cid:276)dej iteracji p(cid:246)tli nast(cid:246)puje tylko jedno takie odwo(cid:228)anie, poniewa(cid:276) przy u(cid:276)yciu metody fetch_array s(cid:241) po- bierane ca(cid:228)e wiersze kodu. Metoda ta zwraca ca(cid:228)y wiersz danych w postaci tablicy, która w na- szym programie jest nast(cid:246)pnie przypisywana do zmiennej $row. Zale(cid:276)nie od przekazanych do niej warto(cid:264)ci metoda fetch_array mo(cid:276)e zwróci(cid:232) trzy rodzaje tablic: MYSQLI_NUM Tablica numeryczna. Poszczególne kolumny pojawiaj(cid:241) si(cid:246) w tablicy zgodnie z kolejno(cid:264)ci(cid:241), w jakiej zosta(cid:228)y utworzone w tabeli (z uwzgl(cid:246)dnieniem pó(cid:274)niejszych zmian). W naszym przypadku na zerowej pozycji tablicy znajduje si(cid:246) kolumna Author, na pierwszej kolumna Title i tak dalej. MYSQLI_ASSOC Tablica asocjacyjna. Ka(cid:276)dy klucz stanowi nazw(cid:246) kolumny. Poniewa(cid:276) w tym przypadku do danych trzeba si(cid:246) odwo(cid:228)ywa(cid:232) za po(cid:264)rednictwem nazwy kolumny (a nie numeru indeksu), warto korzysta(cid:232) z tego wariantu zawsze, gdy to mo(cid:276)liwe, aby u(cid:228)atwi(cid:232) sobie debugowanie programu, a innym programistom — interpretacj(cid:246) kodu. MYSQLI_BOTH Tablica asocjacyjna i numeryczna. Tablice asocjacyjne s(cid:241) zwykle bardziej praktyczne od numerycznych, gdy(cid:276) umo(cid:276)liwiaj(cid:241) odwo- (cid:228)ywanie si(cid:246) do kolumn za pomoc(cid:241) nazw, na przyk(cid:228)ad $row[ author ], dzi(cid:246)ki czemu nie trzeba 232 (cid:95) Rozdzia(cid:293) 10. Korzystanie z MySQL za po(cid:316)rednictwem PHP Kup książkęPoleć książkę zapami(cid:246)tywa(cid:232), na którym miejscu w tabeli znajduje si(cid:246) potrzebna kolumna. W przyk(cid:228)adowym skrypcie zosta(cid:228)a u(cid:276)yta tablica asocjacyjna, o czym (cid:264)wiadczy argument MYSQLI_ASSOC. Zamykanie po(cid:293)(cid:233)czenia Po zako(cid:254)czeniu wykonywania skryptu PHP zwolni pami(cid:246)(cid:232) zaalokowan(cid:241) na potrzeby obiek- tów, wi(cid:246)c w przypadku niewielkich programów na ogó(cid:228) nie trzeba si(cid:246) troszczy(cid:232) o samodzielne zarz(cid:241)dzanie pami(cid:246)ci(cid:241). Jednak w przypadku wi(cid:246)kszej liczby rezultatów albo du(cid:276)ych porcji da- nych dobrze jest zwolni(cid:232) pami(cid:246)(cid:232), której program ju(cid:276) nie potrzebuje, aby unikn(cid:241)(cid:232) problemów z jego dalszym dzia(cid:228)aniem. Jest to szczególnie istotne na cz(cid:246)sto odwiedzanych stronach, gdy(cid:276) ilo(cid:264)(cid:232) pami(cid:246)ci zajmowanej w trakcie sesji mo(cid:276)e raptownie rosn(cid:241)(cid:232). Zwró(cid:232) uwag(cid:246) na metody close dla obiektów $result oraz $conn, które w poprzednich skryptach by(cid:228)y wywo(cid:228)ywane w sytuacji, gdy dany obiekt prze- sta(cid:228) ju(cid:276) by(cid:232) potrzebny. $result- close(); $conn- close(); Najlepiej by(cid:228)oby zamkn(cid:241)(cid:232) ka(cid:276)dy obiekt z wynikami zapytania, gdy przestanie by(cid:232) u(cid:276)ywany, a nast(cid:246)pnie zamkn(cid:241)(cid:232) obiekt po(cid:228)(cid:241)czenia w chwili, gdy komunikacja z ser- werem MySQL stanie si(cid:246) zb(cid:246)dna. Takie rozwi(cid:241)zanie gwarantuje zwolnienie zaso- bów do systemu tak szybko, jak to mo(cid:276)liwe, to za(cid:264) przek(cid:228)ada si(cid:246) na p(cid:228)ynne dzia- (cid:228)anie MySQL i eliminuje wszelkie w(cid:241)tpliwo(cid:264)ci co do tego, czy PHP sam zwróci zaj(cid:246)t(cid:241) pami(cid:246)(cid:232), zanim b(cid:246)dzie ponownie potrzebna. Praktyczny przyk(cid:293)ad Pora na napisanie pierwszego programu, który za pomoc(cid:241) PHP b(cid:246)dzie umieszcza(cid:228) dane w ta- beli MySQL i usuwa(cid:228) je stamt(cid:241)d. Sugeruj(cid:246), aby(cid:264) przyk(cid:228)ad 10.6 zapisa(cid:228) w roboczym folderze z dokumentami WWW pod nazw(cid:241) sqltest.php. Przyk(cid:228)ad dzia(cid:228)ania programu zosta(cid:228) zilustro- wany na rysunku 10.2. Przyk(cid:228)ad 10.6. Wstawianie i usuwanie danych przy u(cid:276)yciu programu sqltest.php ?php // sqltest.php require_once login.php ; $conn = new mysqli($hn, $un, $pw, $db); if ($conn- connect_error) die($conn- connect_error); if (isset($_POST[ delete ]) isset($_POST[ isbn ])) { $isbn = get_post($conn, isbn ); $query = DELETE FROM classics WHERE isbn= $isbn ; $result = $conn- query($query); if (!$result) echo Instrukcja DELETE nie powiod(cid:239)a si(cid:218): $query br . $conn- error . br br ; } if (isset($_POST[ author ]) isset($_POST[ title ]) isset($_POST[ category ]) isset($_POST[ year ]) isset($_POST[ isbn ])) { $author = get_post($conn, author ); Praktyczny przyk(cid:293)ad (cid:95) 233 Kup książkęPoleć książkę Rysunek 10.2. Rezultat dzia(cid:228)ania programu sqltest.php z przyk(cid:228)adu 10.8 $title = get_post($conn, title ); $category = get_post($conn, category ); $year = get_post($conn, year ); $isbn = get_post($conn, isbn ); $query = INSERT INTO classics VALUES . ( $author , $title , $category , $year , $isbn ) ; $result = $conn- query($query); if (!$result) echo Instrukcja INSERT nie powiod(cid:239)a si(cid:218): $query br . $conn- error . br br ; } echo _END form action= sqltest.php method= post pre Autor input type= text name= author Tytu(cid:239) input type= text name= title Kategoria input type= text name= category Rok input type= text name= year ISBN input type= text name= isbn input type= submit value= DODAJ REKORD /pre /form _END; $query = SELECT * FROM classics ; $result = $conn- query($query); if (!$result) die ( Brak dost(cid:218)pu do bazy danych: . $conn- error); $rows = $result- num_rows; for ($j = 0 ; $j $rows ; ++$j) { $result- data_seek($j); $row = $result- fetch_array(MYSQLI_NUM); 234 (cid:95) Rozdzia(cid:293) 10. Korzystanie z MySQL za po(cid:316)rednictwem PHP Kup książkęPoleć książkę echo _END pre Autor $row[0] Tytu(cid:239) $row[1] Kategoria $row[2] Rok $row[3] ISBN $row[4] /pre form action= sqltest.php method= post input type= hidden name= delete value= yes input type= hidden name= isbn value= $row[4] input type= submit value= USU(cid:148) REKORD /form _END; } $result- close(); $conn- close(); function get_post($conn, $var) { return $conn- real_escape_string($_POST[$var]); } ? W przyk(cid:228)adzie 10.6 zosta(cid:228) u(cid:276)yty typowy formularz HTML. W rozdziale 11. za- poznasz si(cid:246) ze szczegó(cid:228)owymi informacjami na temat formularzy — tymczasem przyjmij, (cid:276)e uzna(cid:228)em ich znajomo(cid:264)(cid:232) za co(cid:264) oczywistego, i skup si(cid:246) przede wszyst- kim na komunikacji z baz(cid:241) danych. Sk(cid:228)adaj(cid:241)cy si(cid:246) z ponad 80 linii program mo(cid:276)e sprawia(cid:232) wra(cid:276)enie skomplikowanego, ale nie obawiaj si(cid:246) — wi(cid:246)kszo(cid:264)(cid:232) kodu pozna(cid:228)e(cid:264) ju(cid:276) w przyk(cid:228)adzie 10.5, a jego dzia(cid:228)anie jest stosun- kowo proste. Najpierw program sprawdza, czy u(cid:276)ytkownik podj(cid:241)(cid:228) jakie(cid:264) dzia(cid:228)ania, a nast(cid:246)pnie — zgodnie z nimi — umieszcza w tabeli classics w bazie publications nowy rekord albo usuwa jeden z ist- niej(cid:241)cych. Niezale(cid:276)nie od akcji podj(cid:246)tej przez u(cid:276)ytkownika program wy(cid:264)wietla w przegl(cid:241)darce wszystkie aktualne wiersze tabeli. Przeanalizujmy dzia(cid:228)anie programu. Pierwsza cz(cid:246)(cid:264)(cid:232) nowego kodu rozpoczyna si(cid:246) od wywo(cid:228)ania funkcji isset, która sprawdza, czy wype(cid:228)nione zosta(cid:228)y wszystkie pola umo(cid:276)liwiaj(cid:241)ce dodanie nowego rekordu lub usuni(cid:246)cie go. Je(cid:264)li tak, to w ka(cid:276)dym z wierszy w ramach instrukcji if jest wywo(cid:228)ywana funkcja get_post, która zosta(cid:228)a zdefiniowana na ko(cid:254)cu programu. Funkcja ta pe(cid:228)ni prost(cid:241), ale bardzo wa(cid:276)n(cid:241) funkcj(cid:246): zbiera i przesy(cid:228)a dane z przegl(cid:241)darki. Tablica $_POST W jednym z poprzednich rozdzia(cid:228)ów wspomnia(cid:228)em, (cid:276)e dane wprowadzone przez u(cid:276)ytkow- nika w przegl(cid:241)darce s(cid:241) wysy(cid:228)ane za po(cid:264)rednictwem metody GET albo POST. Na ogó(cid:228) lepsza jest metoda POST, której tutaj u(cid:276)yli(cid:264)my (poniewa(cid:276) pozwala unikn(cid:241)(cid:232) wy(cid:264)wietlania niepo(cid:276)(cid:241)danych danych na pasku adresu przegl(cid:241)darki). Serwer WWW gromadzi wszystkie dane podane przez u(cid:276)ytkownika (nawet je(cid:264)li mowa o formularzu sk(cid:228)adaj(cid:241)cym si(cid:246) ze stu pól) i umieszcza je w ta- blicy o nazwie $_POST. Tablica $_POST ma charakter asocjacyjny — z tego rodzaju tablicami zetkn(cid:241)(cid:228)e(cid:264) si(cid:246) ju(cid:276) w roz- dziale 6. W zale(cid:276)no(cid:264)ci od tego, czy formularz zosta(cid:228) skonfigurowany z u(cid:276)yciem metody POST, Praktyczny przyk(cid:293)ad (cid:95) 235 Kup książkęPoleć książkę czy GET, dane z niego trafi(cid:241) do tablicy asocjacyjnej $_POST albo $_GET. Informacje zawarte w oby- dwu mog(cid:241) by(cid:232) odczytywane w identyczny sposób. Ka(cid:276)demu polu formularza jest przypisywany element tablicy o nazwie zgodnej z nazw(cid:241) tego pola. To oznacza, (cid:276)e je(cid:264)li w formularzu znajduje si(cid:246) pole o nazwie isbn, w tablicy $_POST po- jawi si(cid:246) element, którego klucz b(cid:246)dzie nosi(cid:228) nazw(cid:246) isbn. Program w PHP mo(cid:276)e odczyta(cid:232) za- warto(cid:264)(cid:232) takiego pola poprzez odwo(cid:228)anie w postaci $_POST[ isbn ] albo $_POST[ isbn ] (w tym przypadku pojedynczy i podwójny cudzys(cid:228)ów b(cid:246)dzie mia(cid:228) ten sam efekt). Je(cid:264)li sk(cid:228)adnia $_POST wydaje Ci si(cid:246) skomplikowana, mo(cid:276)esz po prostu skorzysta(cid:232) z rozwi(cid:241)za- nia przedstawionego w przyk(cid:228)adzie 10.6: skopiuj dane wprowadzone przez u(cid:276)ytkownika do innych zmiennych, a potem mo(cid:276)esz zapomnie(cid:232) o tablicy $_POST. To rozwi(cid:241)zanie jest cz(cid:246)sto sto- sowane w programach PHP — na samym pocz(cid:241)tku pobiera si(cid:246) dane z wszystkich pól tablicy $_POST, a potem j(cid:241) ignoruje. Nie ma powodu, by modyfikowa(cid:232) elementy tablicy $_POST. Jej rola ogranicza si(cid:246) do wymiany informacji mi(cid:246)dzy przegl(cid:241)dark(cid:241) a programem i z tego wzgl(cid:246)du lepiej najpierw przenie(cid:264)(cid:232) zawarte w niej dane do w(cid:228)asnych zmiennych. Wró(cid:232)my do wspomnianej funkcji get_post: zauwa(cid:276), (cid:276)e ka(cid:276)da informacja jest najpierw podda- wana dzia(cid:228)aniu funkcji real_escape_string w celu usuni(cid:246)cia dowolnych znaków, które haker móg(cid:228)by wykorzysta(cid:232) do w(cid:228)amania si(cid:246) do bazy lub zmodyfikowania jej zawarto(cid:264)ci. function get_post($conn, $var) { return $conn- real_escape_string($_POST[$var]); } Usuwanie rekordu Przed sprawdzeniem, czy u(cid:276)ytkownik wpisa(cid:228) nowe dane do wprowadzenia do bazy, program weryfikuje warto(cid:264)(cid:232) zmiennej $_POST[ delete ]. Je(cid:264)li taka warto(cid:264)(cid:232) istnieje, to znaczy, (cid:276)e u(cid:276)yt- kownik klikn(cid:241)(cid:228) przycisk USU(cid:253) REKORD, aby usun(cid:241)(cid:232) jeden z istniej(cid:241)cych rekordów z bazy. W takim przypadku przekazywana jest ponadto warto(cid:264)(cid:232) zmiennej $isbn. Jak zapewne pami(cid:246)tasz, numer ISBN jednoznacznie identyfikuje ka(cid:276)dy rekord. Formularz HTML uwzgl(cid:246)dnia ten numer w zawartym w zmiennej $query zapytaniu DELETE FROM, które jest nast(cid:246)pnie przekazywane do metody query obiektu $conn, sk(cid:241)d trafia do MySQL. Je(cid:264)li zmienna $_POST[ delete ] nie ma warto(cid:264)ci (co oznacza, (cid:276)e nie trzeba usuwa(cid:232) danych z ba- zy), sprawdzana jest zawarto(cid:264)(cid:232) zmiennej $_POST[ author ] i pozosta(cid:228)ych. Je(cid:264)li wszystkim zo- sta(cid:228)a przypisana warto(cid:264)(cid:232), to do zmiennej $query trafia zapytanie w postaci INSERT INTO z pi(cid:246)- cioma danymi do umieszczenia w bazie. Zmienna ta jest nast(cid:246)pnie przekazywana do metody query, która mo(cid:276)e zwróci(cid:232) warto(cid:264)(cid:232) TRUE albo FALSE. W przypadku warto(cid:264)ci FALSE generowany jest komunikat b(cid:228)(cid:246)du, który trafia do w(cid:228)a(cid:264)ciwo(cid:264)ci error obiektu $conn i mo(cid:276)e zosta(cid:232) wy(cid:264)wie- tlony na przyk(cid:228)ad tak: if (!$result) echo Instrukcja INSERT nie powiod(cid:239)a si(cid:218): $query br . $conn- error . br br ; 236 (cid:95) Rozdzia(cid:293) 10. Korzystanie z MySQL za po(cid:316)rednictwem PHP Kup książkęPoleć książkę Wy(cid:316)wietlanie formularza Nast(cid:246)pna cz(cid:246)(cid:264)(cid:232) kodu odpowiada za wy(cid:264)wietlenie niewielkiego formularza, widocznego w gór- nej cz(cid:246)(cid:264)ci rysunku 10.2. Zapewne pami(cid:246)tasz z poprzednich rozdzia(cid:228)ów konstrukcj(cid:246) echo _END… _END, która powoduje wy(cid:264)wietlenie w przegl(cid:241)darce wszystkiego, co znajduje si(cid:246) mi(cid:246)dzy znacz- nikami _END. Zamiast u(cid:276)ywa(cid:232) instrukcji echo, mo(cid:276)na by(cid:228)oby przerwa(cid:232) program PHP za pomo- c(cid:241) znacznika ? , umie(cid:264)ci(cid:232) w pliku niezb(cid:246)dny fragment dokumentu HTML, a po- tem wstawi(cid:232) znacznik ?, aby wróci(cid:232) do kodu PHP. Obrana metoda zale(cid:276)y tylko od preferencji programisty, ja jednak zawsze zalecam zrealizowanie ca(cid:228)ej operacji w kodzie PHP. Powody ku temu mam nast(cid:246)puj(cid:241)ce: (cid:120) Umieszczanie tylko kodu PHP w plikach .php jest korzystne podczas debugo- wania (tak(cid:276)e przez innych programistów). Nie ma wówczas potrzeby szuka(cid:232) wydzielonych fragmentów HTML. (cid:120) Je(cid:264)li chcia(cid:228)by(cid:264) wy(cid:264)wietli(cid:232) warto(cid:264)(cid:232) zmiennej PHP w obr(cid:246)bie kodu HTML, mo- (cid:276)esz po prostu wpisa(cid:232) jej nazw(cid:246). Je(cid:264)li zamkn(cid:241)(cid:228)by(cid:264) blok kodu PHP, musia(cid:228)- by(cid:264) najpierw zainicjowa(cid:232) nowy blok, wy(cid:264)wietli(cid:232) zmienn(cid:241), a potem wróci(cid:232) do HTML. Fragment kodu HTML z formularzem po prostu przekierowuje jego dzia(cid:228)anie na plik sqltest. php. To oznacza, (cid:276)e po wys(cid:228)aniu formularza zawarto(cid:264)(cid:232) jego pól trafia z powrotem do pliku sqltest.php, czyli naszego programu. Formularz zosta(cid:228) ponadto skonfigurowany tak, by pola by(cid:228)y wysy(cid:228)ane metod(cid:241) POST, a nie GET. Ten wybór jest podyktowany faktem, (cid:276)e w przypadku metody GET dane s(cid:241) do(cid:228)(cid:241)czane do przesy(cid:228)anego adresu URL, co mo(cid:276)e powodowa(cid:232) ma(cid:228)y ba(cid:228)a- gan w pasku adresu przegl(cid:241)darki. Poza tym metoda GET umo(cid:276)liwia (cid:228)atw(cid:241) ingerencj(cid:246) w prze- sy(cid:228)ane dane, a tym samym pozwala na podejmowanie prób w(cid:228)amania si(cid:246) na serwer. Z tego wzgl(cid:246)du zawsze gdy tylko jest to mo(cid:276)liwe, lepiej u(cid:276)ywa(cid:232) metody POST, która ma zarazem t(cid:246) zalet(cid:246), (cid:276)e ukrywa wysy(cid:228)ane dane. Poni(cid:276)ej pól formularza HTML znajduje si(cid:246) przycisk wysy(cid:228)ania danych z napisem DODAJ RE- KORD. Zwró(cid:232) uwag(cid:246) na zastosowanie znaczników pre i /pre , które zosta(cid:228)y u(cid:276)yte w celu wymuszenia fontu o sta(cid:228)ej szeroko(cid:264)ci znaków, co pozwala na eleganckie wyrównanie poszcze- gólnych wpisów w formularzu. Ponadto w obr(cid:246)bie znaczników pre s(cid:241) uwzgl(cid:246)dniane znaki ko(cid:254)ca linii. Wysy(cid:293)anie zapyta(cid:295) do bazy danych Nast(cid:246)pnie kod wraca do znajomego „terytorium” z przyk(cid:228)adu 10.5 — do bazy MySQL jest wy- sy(cid:228)ane zapytanie o wszystkie rekordy z tabeli classics: $query = SELECT * FROM classics ; $result = $conn- query($query); W dalszej kolejno(cid:264)ci zmiennej $rows jest przypisywana warto(cid:264)(cid:232) odzwierciedlaj(cid:241)ca liczb(cid:246) wier- szy w tabeli: $rows = $result- num_rows; Praktyczny przyk(cid:293)ad (cid:95) 237 Kup książkęPoleć książkę Na podstawie warto(cid:264)ci zmiennej $rows jest inicjalizowana p(cid:246)tla for, która s(cid:228)u(cid:276)y do wy(cid:264)wietla- nia zawarto(cid:264)ci poszczególnych wierszy. W ka(cid:276)dej iteracji tej p(cid:246)tli wywo(cid:228)ywana jest metoda data_seek obiektu $result, która odczytuje porcj(cid:246) interesuj(cid:241)cych nas danych: $result- data_seek($j); Nast(cid:246)pnie tablica $row jest wype(cid:228)niana poszczególnymi wierszami danych przy u(cid:276)yciu meto- dy fetch_array obiektu $result. Do metody jest przekazywana sta(cid:228)a MYSQLI_NUM, która wymusza zwrócenie tablicy numerycznej (a nie asocjacyjnej): $row = $result- fetch_array(MYSQLI_NUM); Po umieszczeniu danych w tablicy $row ich wy(cid:264)wietlenie jest ju(cid:276) proste. U(cid:276)y(cid:228)em w tym celu konstrukcji heredoc z instrukcjami echo i z zastosowaniem znaczników pre , które umo(cid:276)liwia- j(cid:241) estetyczne wyrównanie poszczególnych wierszy. Po ka(cid:276)dym wy(cid:264)wietlonym rekordzie mamy do czynienia z kolejnym formularzem, który rów- nie(cid:276) przekierowuje u(cid:276)ytkownika do pliku sqltest.php (czyli do tego samego programu). Ten formularz zawiera dwa ukryte pola: delete oraz isbn. Pole delete ma warto(cid:264)(cid:232) yes, za(cid:264) warto(cid:264)(cid:232) pola isbn jest okre(cid:264)lana na podstawie zawarto(cid:264)ci pola tablicy $row[4], w którym jest przecho- wywany numer ISBN dla danego rekordu. Formularz ko(cid:254)czy przycisk wysy(cid:228)ania danych z napisem USU(cid:253) REKORD. Nast(cid:246)pnie nawias klamrowy zamyka p(cid:246)tl(cid:246), która b(cid:246)dzie powtarzana a(cid:276) do wy(cid:264)wietlenia wszystkich rekordów. Gdy tak si(cid:246) stanie, wywo(cid:228)ywane s(cid:241) metody close obiektów $result oraz $conn w celu zamkni(cid:246)- cia po(cid:228)(cid:241)czenia i zwolnienia zasobów dla PHP. $result- close(); $conn- close(); Wreszcie na ko(cid:254)cu kodu znajduje si(cid:246) definicja funkcji get_post, której ju(cid:276) wcze(cid:264)niej si(cid:246) przy- gl(cid:241)dali(cid:264)my. I to ju(cid:276) koniec struktury naszego pierwszego programu PHP umo(cid:276)liwiaj(cid:241)cego ko- munikacj(cid:246) z baz(cid:241) danych. Przekonajmy si(cid:246), co on potrafi. Po wprowadzeniu kodu (i poprawieniu ewentualnych pomy(cid:228)ek) spróbuj wprowadzi(cid:232) nast(cid:246)- puj(cid:241)ce informacje do kolejnych pól formularza, aby doda(cid:232) do bazy nowy rekord po(cid:264)wi(cid:246)cony ksi(cid:241)(cid:276)ce Moby Dick: Herman Melville Moby Dick Fiction 1851 9780199535729 Dzia(cid:293)anie programu Po wys(cid:228)aniu powy(cid:276)szych danych do bazy za pomoc(cid:241) przycisku DODAJ REKORD przewi(cid:254) zawarto(cid:264)(cid:232) strony w dó(cid:228), aby wy(cid:264)wietli(cid:232) nowy rekord. Efekt powinien wygl(cid:241)da(cid:232) podobnie jak na rysunku 10.3. Przekonajmy si(cid:246) teraz, jak dzia(cid:228)a usuwanie danych z bazy, na podstawie przyk(cid:228)adowego re- kordu, który wpiszemy tylko w tym celu. Wprowad(cid:274) cyfr(cid:246) 1 w ka(cid:276)dym z pi(cid:246)ciu pól z infor- macjami o nowej ksi(cid:241)(cid:276)ce i kliknij przycisk DODAJ REKORD. Je(cid:264)li teraz przewiniesz zawarto(cid:264)(cid:232) okna w dó(cid:228), zobaczysz nowy wpis sk(cid:228)adaj(cid:241)cy si(cid:246) z samych jedynek. Oczywi(cid:264)cie taki rekord nie jest nam w tabeli do niczego potrzebny, kliknij wi(cid:246)c znajduj(cid:241)cy si(cid:246) pod nim przycisk USU(cid:253) 238 (cid:95) Rozdzia(cid:293) 10. Korzystanie z MySQL za po(cid:316)rednictwem PHP Kup książkęPoleć książkę Rysunek 10.3. Po dodaniu do bazy ksi(cid:241)(cid:276)ki „Moby Dick” REKORD i ponownie przewi(cid:254) zawarto(cid:264)(cid:232) okna w dó(cid:228), aby si(cid:246) przekona(cid:232), (cid:276)e rekord rzeczywi- (cid:264)cie zosta(cid:228) usuni(cid:246)ty. Przy za(cid:228)o(cid:276)eniu, (cid:276)e wszystko przebieg(cid:228)o zgodnie z planem, za pomoc(cid:241) opisanego programu mo(cid:276)esz dodawa(cid:232) i usuwa(cid:232) rekordy z bazy. Wykonaj kilka tego typu operacji, ale zostaw w tabeli dotychczasowe informacje o ksi(cid:241)(cid:276)kach (w tym rekord z ksi(cid:241)(cid:276)k(cid:241) Moby Dick), bo b(cid:246)dziemy ich jeszcze potrzebowa(cid:232). Spróbuj dwukrotnie doda(cid:232) rekord zawieraj(cid:241)cy same jedynki — przy drugiej próbie pojawi si(cid:246) komuni- kat b(cid:228)(cid:246)du wynikaj(cid:241)cy z faktu, (cid:276)e w bazie istnieje ju(cid:276) ksi(cid:241)(cid:276)ka o ISBN wynosz(cid:241)cym 1. MySQ
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

PHP, MySQL i JavaScript. Wprowadzenie. Wydanie IV
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ą: