internetowe bazy danychroman.ptak.staff.iiar.pwr.wroc.pl/ibd_wyklad_2017_nr3.pdf · internetowe...
TRANSCRIPT
![Page 2: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/2.jpg)
Plan wykładu 3.
• PHP
• MySQL
• Dostęp do bazy danych z PHP
• Przekazywanie danych w aplikacjach webowych
• Sesje
• Ciasteczka
• Uwierzytelnienie i bezpieczeństwo w kontekście
PHP i baz danych
2
![Page 3: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/3.jpg)
PHP
PHP Hypertext Preprocessor
![Page 4: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/4.jpg)
PHP
• PHP Hypertext Preprocessor
• Dawniej skrót rozwijano jako Personal
Home Page
• Skryptowy język programowania stosowany
głównie do tworzenia dynamicznych stron
WWW
• Wykonywany po stronie serwera
4
![Page 5: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/5.jpg)
PHP
• Powstanie: 1995 r.
• Aktualna wersja: 7.1.11
– wcześniejsza wersja: 5.6.15
• Składnia wywodzi się z PERLa, skryptów
powłoki
• Duże podobieństwo do C
• Model obiektowy wzoruje się na językach
C++ i Java
5
![Page 6: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/6.jpg)
Silnik języka PHP
• Mechanizm skryptowy: Zend Engine
firmy Zend Technologies
• Dostępny od PHP 4
• PHP 5 używa późniejszej wersji, tj. Zend
Engine 2 (2.6.0); PHP 7 – Zend Engine 3
• Zend Engine składa się z:
– kompilatora kodu źródłowego do kodu
bajtowego,
– maszyny wirtualnej wykonującej ten kod.
6
![Page 7: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/7.jpg)
PHP
• Zalety:
Obsługa bardzo wielu platform,
Licencjonowanie – OpenSource,
Zachowanie poufności kodu – wykonywanie po stronie
serwera,
Dostępność narzędzi wspomagających.
• Wady:
Trudności z przenaszalnością (ze względu na
bezpośredni dostęp do bazy danych),
Obsługi wyjątków dopiero od wersji 5 i to częściowo.
7
![Page 8: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/8.jpg)
PHP: Hello world
<html>
<head>
<title>Przyklad</title>
</head>
<body>
<?php echo "Witaj swiecie!"; ?>
</body>
</html>
8
![Page 9: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/9.jpg)
PHP dla programistów C/C++
• „PHP jako interpretowane C”
• Podobieństwa
– składania
– operatory, struktury sterujące (if, switch,
while, do/while, for)
– funkcje
• Różnice
– brak typów zmiennych
– zmienne poprzedzone znakiem $ - np. $zm 9
![Page 10: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/10.jpg)
Różnice pomiędzy PHP a C
• PHP - słabe typowanie
• Typy numeryczne, tylko: integer, double
• Ciągi:
– apostrofy 'Dowolny tekst'
– cudzysłowie "Inny tekst $zm" "Inny {$zm}tekst"
– składnia heredoc $my_string = <<<ETYKIETA tekst
– operator dla ciągów: kropka (.)
– funkcje operujące na ciągach
• Typ boolen (wartości TRUE lub FALSE) 10
![Page 11: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/11.jpg)
Przykład składni HEREDOC
<?php
$str = <<<ABC
Przykład łańcucha znaków,
zajmującego kilka linii,
zapisanego w składni heredoc.
Przykładowe zastosowanie w przezentacji liryki.\n
Litwo! Ojczyzno moja! ty jesteś jak zdrowie;
Ile cię trzeba cenić, ten tylko się dowie,
Kto cię stracił. Dziś piękność twą w całej ozdobie
Widzę i opisuję, bo tęsknię po tobie.
\tAdam Mickiewicz - Pan Tadeusz
ABC;
?> 11
![Page 12: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/12.jpg)
Różnice pomiędzy PHP a C
• Konwersja typów automatyczne w PHP
• Tablice w PHP są tablicami asocjacyjnymi
lub wartościami mieszanymi
• Brak struktur w PHP
• Brak wskaźników w PHP
• Brak prototypów w PHP
12
![Page 13: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/13.jpg)
Style programowania w PHP
• Istnieje duża liczba sposobów polaczenia PHP i
HTML, dających ten sam efekt końcowy. Wybór
może zależeć od czynników zewnętrznych, np.
od sposobu pracy zespołu.
Minimalny
Maksymalny
Średni
13
![Page 14: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/14.jpg)
Minimalny styl PHP
14
![Page 15: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/15.jpg)
Maksymalny styl PHP
15
![Page 16: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/16.jpg)
Średni styl PHP
16
![Page 17: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/17.jpg)
Tworzenie tablic
• Tablice indeksowane liczbami $tecza = array("czerwony", "pomarańczowy",
$tecza[2] = "żółty";
$tecza[3] = "zielony";
• Tablice asocjacyjne $osoba['nazwisko']= "Kowalski";
$osoba['imie'] = "Jan";
17
![Page 18: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/18.jpg)
Klasy i obiekty
<?php
class MojaKlasa
{
public $zm_publiczna; //definiowanie pola publicznego
private $zm_prywatna; //definiowanie pola prywatnego
protected $zm_chroniona; //definiowanie pola chronionego
const STALA = 124; //definiowanie stałej, stała musi
//zostać określona (jeśli nie - błąd składni)
//(…)
}
?>
18
![Page 19: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/19.jpg)
Klasy i obiekty - metody
<?php
class MojaKlasa {
(…)
public function __construct()
{ echo 'Jestem konstruktorem klasy MojaKlasa. Za każdym razem
gdy powołasz mój obiekt do życia, wykonam operacje zawarte w tej
metodzie.<br />'; }
public function zrob_cos()
{ echo 'Właśnie wykonywana jest funkcja zrob_cos()<br />'; }
public function __destruct()
{ echo 'Jestem destruktorem klasy MojaKlasa. Za każdym razem gdy
usuniesz mój obiekt, wykonam operacje zawarte w tej metodzie.<br
/>'; }
}
?> 19
![Page 20: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/20.jpg)
Klasy i obiekty
<?php
//(…)
$mojobiekt = new MojaKlasa(); //powoła do życia obiekt
//i wykona operacje zawarte w funkcji __construct()
$mojobiekt -> zrob_cos(); // Wydrukuje komunikat
//kończąc kod PHP, wszystkie zmienne są usuwane,
//wywoływana jest funkcja __destruct()
?>
20
![Page 21: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/21.jpg)
Frameworki PHP
• Laravel (Model-View-Controller, MVC)
• Symfony (MVC)
• CodeIgniter (MVC)
• Zend Framework (wiele uniwersalnych
wzorców projektowych)
• Yii (MVC)
• Kohana (Hierarchical Model–View–
Controller, HMVC), fork CodeIgnitera
21
![Page 22: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/22.jpg)
Funkcje obsługi baz danych
• PHP udostępnia funkcje obsługujące wiele
różnych baz danych, posługując się przy
tym ich rodzimymi interfejsami
programistyczniymi (API)
• dBase, DBA (klucz-wartość), DBM,
Informix, mSQL, MySQL, ODBC, Oracle,
PostgreSQL, Sybase
22
![Page 23: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/23.jpg)
Funkcje MySQL (PHP 4, PHP 5)
• http://php.net/manual/en/ref.mysql.php
23
![Page 24: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/24.jpg)
Funkcje MySQL (1)
• mysql_affected_rows — Get number of affected rows in previous
MySQL operation
• mysql_client_encoding — Returns the name of the character set
• mysql_close — Close MySQL connection
• mysql_connect — Open a connection to a MySQL Server
• mysql_create_db — Create a MySQL database
• mysql_data_seek — Move internal result pointer
• mysql_db_name — Retrieves database name from the call to
mysql_list_dbs
• mysql_db_query — Selects a database and executes a query on it
• mysql_drop_db — Drop (delete) a MySQL database
• mysql_errno — Returns the numerical value of the error message
from previous MySQL operation 24
![Page 25: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/25.jpg)
Funkcje MySQL (2)
• mysql_error — Returns the text of the error message from previous
MySQL operation
• mysql_escape_string — Escapes a string for use in a mysql_query
• mysql_fetch_array — Fetch a result row as an associative array, a
numeric array, or both
• mysql_fetch_assoc — Fetch a result row as an associative array
• mysql_fetch_field — Get column information from a result and
return as an object
• mysql_fetch_lengths — Get the length of each output in a result
• mysql_fetch_object — Fetch a result row as an object
• mysql_fetch_row — Get a result row as an enumerated array
• mysql_field_flags — Get the flags associated with the specified field
in a result
• mysql_field_len — Returns the length of the specified field 25
![Page 26: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/26.jpg)
Funkcje MySQL (3)
• mysql_field_name — Get the name of the specified field in a result
• mysql_field_seek — Set result pointer to a specified field offset
• mysql_field_table — Get name of the table the specified field is in
• mysql_field_type — Get the type of the specified field in a result
• mysql_free_result — Free result memory
• mysql_get_client_info — Get MySQL client info
• mysql_get_host_info — Get MySQL host info
• mysql_get_proto_info — Get MySQL protocol info
• mysql_get_server_info — Get MySQL server info
• mysql_info — Get information about the most recent query
26
![Page 27: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/27.jpg)
Funkcje MySQL (4)
• mysql_insert_id — Get the ID generated in the last query
• mysql_list_dbs — List databases available on a MySQL server
• mysql_list_fields — List MySQL table fields
• mysql_list_processes — List MySQL processes
• mysql_list_tables — List tables in a MySQL database
• mysql_num_fields — Get number of fields in result
• mysql_num_rows — Get number of rows in result
• mysql_pconnect — Open a persistent connection to a MySQL server
• mysql_ping — Ping a server connection or reconnect if there is no
connection
• mysql_query — Send a MySQL query
27
![Page 28: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/28.jpg)
Funkcje MySQL (5)
• mysql_real_escape_string — Escapes special characters in a string
for use in an SQL statement
• mysql_result — Get result data
• mysql_select_db — Select a MySQL database
• mysql_set_charset — Sets the client character set
• mysql_stat — Get current system status
• mysql_tablename — Get table name of field
• mysql_thread_id — Return the current thread ID
• mysql_unbuffered_query — Send an SQL query to MySQL without
fetching and buffering the result rows.
28
![Page 29: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/29.jpg)
Nowe funkcje do MySQL
• Powyższe funkcje od PHP 5.5.0 są niezalecane
(ang. deprecated) a w PHP 7.0.0 zostały usunięte
• Rozwiązaniem alternatywnym są:
– MySQL Improved Extension
– PDO_MYSQL
• np. dla mysql_query
– mysqli_query()
– PDO::query()
29
![Page 30: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/30.jpg)
MYSQL/MARIADB
30
![Page 31: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/31.jpg)
MySQL
• SZRBD dla Linux/Unix, Windows, …
• Pierwsze wydanie: 1995 r.
• Licencja: GPL lub komercyjna (Oracle)
MariaDB – GPL wersja 2
• Aktualna wersja stabilna: 5.7.20
• Posiada wiele silników bazy danych (motor,
ang. engine, back end)
• Dostęp z poziomu wielu języków programowania:
m.in. C/C++, Delphi, PHP.
31
![Page 32: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/32.jpg)
Silniki baz danych MySQL
• InnoDB – domyślny od wersji 5.5, obsługuje
transakcje
• MyISAM – starszy typ, nie obsługuje transakcji
• MEMORY (HEAP) - najszybszy typ silnika, gdyż
wszystko jest przechowywane wyłącznie w pamięci
RAM. Posiada jednak kilka ograniczeń, między
innymi nie przechowuje danych po wyłączeniu
serwera MySQL.
• Inne: XtraDB, ISAM, BerkeleyDB (BDB), MERGE, …
CREATE TABLE test ENGINE=MEMORY 32
![Page 33: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/33.jpg)
Silniki baz danych MariaDB
• MyISAM
• XtraDB – kompatybilny z InnoDB
• Aria – nowy silnik bazy danych
• Inne: FederatedX, OQGRAPH, SphinxSE, …
33
![Page 34: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/34.jpg)
MyISAM
• Domyślny silnik dla wcześniejszych wersji MySQL
• Rozszerzenie silnika ISAM
• Zaprojektowane z myślą o podstawowych
aplikacjach internetowych i prostocie działania
• Stosowany ciągle w hurtowniach danych ze
względu na możliwość zapytań do bardzo dużych
tabel
34
![Page 35: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/35.jpg)
MyISAM - architektura fizyczna
• Każda tabela zapisywana w trzech plikach:
– nazwa_tabeli_.FRM – definicja tabeli (ang. format)
– nazwa_tabeli_.MYD – dane (ang. data)
– nazwa_tabeli_.MYI – indeksy (ang. index)
35
![Page 36: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/36.jpg)
MyISAM
• Zalety
szybki odczyt z tabel
prostsze wykonywanie kopii zapasowych
• Wady
brak obsługi transakcji
brak mechanizmów odpowiedzialnych za integralność
danych
przy dużych tabelach, długie czasy wykonywania
REPAIR TABLE po awarii serwera
źródło: http://osworld.pl/czym-sie-rozni-innodb-od-myisam/ 36
![Page 37: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/37.jpg)
InnoDB
• Zapewnia integralności danych oraz spójności i
bezpieczeństwa transakcji.
• Standard ACID
• ACID jest skrótem od angielskich słów: atomicity
– atomowość, consistency – spójność, isolation –
izolacja, durability – trwałość.
• Mechanizm kluczy obcych
źródło: http://osworld.pl/czym-sie-rozni-innodb-od-myisam/ 37
![Page 38: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/38.jpg)
ACID
• Atomowość transakcji oznacza, że albo wykonujemy ją w
całości albo wcale. Nie może dojść do sytuacji, w której
wykona się część zapytań.
• Spójność oznacza, że po wykonaniu transakcji system będzie
spójny, czyli nie zostaną naruszone żadne zasady
integralności.
• Izolacja transakcji oznacza, iż jeżeli dwie transakcje
wykonują się współbieżnie, to zazwyczaj (zależnie od poziomu
izolacji) nie widzą zmian przez siebie wprowadzanych.
• Trwałość danych oznacza, że system potrafi uruchomić się i
udostępnić spójne, nienaruszone i aktualne dane zapisane w
ramach zatwierdzonych transakcji, na przykład po nagłej
awarii zasilania.
38
![Page 39: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/39.jpg)
a. Wymagana obecność danych
b. Więzy dziedziny atrybutów
c. Integralność encji/relacji
d. Integralność referencyjna
e. Więzy ogólne
Więzy integralności:
39
![Page 40: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/40.jpg)
• Niektóre atrybuty zawsze muszą mieć
określoną wartość
• NN – not null
• N – nullable
znacznik języka SQL: NULL – logika
trójwartościowa
Ad. A. Wymagana obecność danych
40
![Page 41: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/41.jpg)
• Z każdym atrybutem związana jest
dziedzina – zbiór dopuszczalnych
wartości
• Np. atrybut płeć może przyjmować
wartości: „K” i „M”
Ad. B. Więzy dziedziny atrybutów
41
![Page 42: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/42.jpg)
• Klucz główny zbioru encji nie może
przyjmować wartości pustych (NULL)
Ad. C. Integralność encji/relacji
42
![Page 43: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/43.jpg)
• Klucz obcy wiąże krotkę relacji
podrzędnej z krotką relacji nadrzędnej o
pasującej wartości odpowiedniego
klucza głównego.
• DRI (ang. Declarative Referential Integrity)
Ad. D. Integralność referencyjna
43
![Page 44: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/44.jpg)
1. Wstawienie krotki do relacji podrzędnej
2. Usuwanie krotki z relacji podrzędnej *
3. Modyfikacja klucza obcego krotki w relacji podrzędnej
4. Wstawienie krotki do relacji nadrzędnej *
5. Usunięcie krotki z relacji nadrzędnej NO ACTION, CASCADE, SET NULL, SET DEFAULT,
NO CHECK
6. Modyfikacja klucza głównego krotki nadrzędnej
* – nie następuje naruszenie integralności ref.
Ad. D. Integralność referencyjna
44
![Page 45: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/45.jpg)
• Reguły biznesowe
• Zasady działania
• Np. zasada, że personel obsługuje nie
więcej niż 10 nieruchomości
Ad. E. Więzy ogólne
45
![Page 46: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/46.jpg)
InnoDB - architektura fizyczna
• Definicja (ang. format) tabeli w pliku:
– nazwa_tabeli_.FRM
• Dane tabeli są zarządzane w obszarze tabel
InnoDB wraz z innymi tabelami
46
![Page 47: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/47.jpg)
InnoDB
• Zalety
obsługa transakcji
gwarantuje integralność danych
lepiej sprawuje się podczas replikacji typu master –
slave
• Wady
wolniejszy odczyt danych
trudniejsze wykonywanie backupów
źródło: http://osworld.pl/czym-sie-rozni-innodb-od-myisam/ 47
![Page 48: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/48.jpg)
DOSTĘP DO BAZY DANYCH
Z PHP
![Page 49: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/49.jpg)
Łączenie z serwerem i bazą danych
<?php
// nawiazujemy polaczenie
$connection = @mysql_connect('localhost', 'uzytkownik', 'haslo')
// w przypadku niepowodznie wyświetlamy komunikat
or die('Brak połączenia z serwerem MySQL.<br />Błąd: '.mysql_error());
// połączenie nawiązane ;-)
echo "Udało się połączyć z serwerem!<br />";
// nawiązujemy połączenie z bazą danych
$db = @mysql_select_db('nazwa_bazy', $connection)
// w przypadku niepowodzenia wyświetlamy komunikat
or die('Nie mogę połączyć się z bazą danych<br />Błąd:
'.mysql_error());
// połączenie nawiązane ;-)
echo "Udało się połączyć z bazą danych!";
// zamykamy połączenie
mysql_close($connection);
?> 49
![Page 50: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/50.jpg)
Tworzenie bazy danych
<?php
// otwiera połączenie
$polaczenie = mysql_connect("localhost", "juzer", "samopas");
// wybiera bazę
mysql_select_db("test",$polaczenie);
// tworzy instrukcję SQL
$sql = "CREATE TABLE tabelaProbna (id int not null primary key
auto_increment,
poleProbne varchar (75))";
// wykonuje instrukcję SQL
$wynik = mysql_query($sql, $polaczenie) or die(mysql_error());
// wyświetla identyfikator wyniku
echo $wynik;
?>
50
![Page 51: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/51.jpg)
Wstawianie danych do bazy
<?php
// otwiera połączenie
$polaczenie = mysql_connect("localhost", "juzer",
"samopas");
// wybiera bazę
mysql_select_db("test",$polaczenie);
// tworzy instrukcję SQL
$sql = "INSERT INTO tabelaProbna values ('', 'jakaś
wartość')";
// wykonuje instrukcję SQL
$wynik = mysql_query($sql, $polaczenie) or
die(mysql_error());
// wyświetla identyfikator wyniku
echo $wynik;
?> 51
![Page 52: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/52.jpg)
Pobieranie danych z bazy
<?php
// otwiera połączenie
$polaczenie = mysql_connect("localhost", "juzer", "samopas");
// wybiera bazę
mysql_select_db("test",$polaczenie);
// tworzy instrukcję SQL
$sql = "SELECT * FROM tabelaProbna";
// wykonuje instrukcję SQL
$wynik = mysql_query($sql, $polaczenie) or die(mysql_error());
//przechodzi przez każdy wiersz zbioru wyników i wyświetla dane
while ($nowaTablica = mysql_fetch_array($wynik)) {
// nadaje polom nazwy
$id = $nowaTablica['id'];
$poleProbne = $nowaTablica['poleProbne'];
//wyświetla rezulaty na ekranie
echo "Identyfikator to $id a tekst w polu to $poleProbne <br>";
}
?>
52
![Page 53: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/53.jpg)
PHP Data Objects (PDO)
53
• Rozszerzenie języka PHP.
• Jednolity interfejs baz danych w postaci
pojedynczej klasy z metodami wspólnymi
dla różnych SZBD.
• Dostępne w PHP od wersji 5.1.
• Obsługuje: MSSQL (dla systemu Windows
tylko w wersji PHP ≤ 5.2.9), MySQL,
Oracle, PostgreSQL, Firebird.
![Page 54: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/54.jpg)
Użycie PDO do łączenia się z MySQL
<?php
// połączenia z bazą MySQL
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8',
'login', 'haslo');
// proste zapytania do bazy
foreach($db->query('SELECT * FROM tabela') as $wiersz) {
echo $wiersz['kolumna1'],' ',$wiersz['kolumna2'];
}
// zwracanie kolejno pojedynczych wyników
$stmt = $db->query('SELECT * FROM tabela');
while($wiersz = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $wiersz['kolumna1'],' ',$wiersz['kolumna2'];
}
?>
54
zwraca tablice z kluczami
odzwierciedlającymi nazwy
kolumn
![Page 55: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/55.jpg)
PRZEKAZYWANIE DANYCH
Aplikacje webowe
![Page 56: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/56.jpg)
Protokoły warstwy aplikacji
• HTTP (ang. HyperText Transfer Protocol)
• HTTPS • WebDAV (ang. Web-based Distributed Authoring and Versioning) –
rozszerzenie protokołu HTTP 1.1
REST - doświadczenia przy specyfikacji protokołu
HTTP styl architektury oprogramowania dla
systemów rozproszonych
56
![Page 57: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/57.jpg)
Metody HTTP/1.1
1. GET – pobranie zasobu
2. HEAD – pobranie informacji o zasobie
3. POST – przesłanie danych do serwera
4. PUT – przesłanie danych w celu aktualizacji
5. DELETE – żądanie usunięcia zasobu
6. OPTIONS – informacje o opcjach w kanale
komunikacyjnym
7. TRACE – diagnostyka kanału komunikacyjnego
8. PATCH – aktualizacja części danych
9. CONNECT – żądanie do serwerów pośredniczących 57
![Page 58: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/58.jpg)
Zmienne PHP związane z WWW
• PHP automatycznie zamienia wszelkie dane
otrzymane w żądaniu HTTP na zmienne.
• Dotyczy to danych przesłanych metodami GET i
POST, informacji zapisanych w cookies oraz
zmiennych środowiskowych.
• Przykład formularza <FORM ACTION="test.php3" METHOD="POST"
<INPUT TYPE=text NAME=var>
</FORM>
• Przekazanie zmiennej przez adres http://twoj.serwer/test.php3?var=Witam+Cie
58
![Page 59: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/59.jpg)
Przekazywanie danych
• Metoda GET
– parametr=wartość
– np.: sklep.php?kategoria=samochod&strona=2
– dane przesłane tą metodą trafiają do tablicy $_GET
• Metoda POST
– dane metodą POST przesyłane są w obszarze danych
pakietu i umieszczane w superglobalnej tablicy
$_POST
– możliwość przekazywania wielu parametrów
59
![Page 60: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/60.jpg)
GET – cechy:
• URL przechowuje pewien stały stan
aplikacji, zawsze można do niego wrócić
(np. przez zapisaną zakładkę w
przeglądarce),
• zapytania z GET mogą być cache'owane,
pozostają też w historii przeglądarki,
• zapytania z GET mogą być łatwo
rozpowszechniane.
60
![Page 61: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/61.jpg)
GET a POST
• GET stosujemy dla akcji bezpiecznych
• POST stosujemy dla akcji niebezpiecznych
61
![Page 62: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/62.jpg)
HTTP a stany procesów
• HTTP protokołem bezstanowym
• Rozwiązanie:
– wprowadzenie mechanizmu ciasteczek,
– sesje po stronie serwera,
– ukryte parametry (gdy aktualna strona
zawiera formularz),
– parametry umieszczone w URL-u (jak np.
/index.php?userid=3).
62
![Page 63: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/63.jpg)
REST (ang. REpresentational State Transfer)
• pol. zmiana stanu poprzez reprezentacje
• RESTful web services
• pomysł Roya Fieldinga z 2000 r.
• Każda z usług opisania jest osobnym
adresem URL
• Używa metod HTTP(S) do mapowania
operacji CRUD (create, retrieve, update,
delete)
• Wymiana danych w formacie JSON 63
![Page 64: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/64.jpg)
SESJE
![Page 65: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/65.jpg)
Sesje
• SESJA (ang. session) – nieformalnie, czas
od rozpoczęcia pierwszej operacji do
zakończenia ostatniej
65
![Page 66: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/66.jpg)
Podstawowa zasada działania sesji
• Sesje w PHP są prowadzone przez
unikatowy identyfikator sesji,
kryptograficznie losową liczbę.
• Identyfikator sesji jest generowany przez
PHP i przechowywany po stronie klienta
podczas trwania sesji.
• Może on być przechowywany w
komputerze użytkownika jako cookie lub
przekazywany przez URL-e. 66
![Page 67: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/67.jpg)
Podstawowe etapy sesji:
1. Rozpoczynanie sesji session_start()
2. Zgłaszanie zmiennych sesji session_register(nazwa_zmiennej)
3. Korzystanie ze zmiennych sesji
4. Usuwanie zmiennych i niszczenie sesji session_unregister(nazwa_zmiennej),
session_unset(), session_destroy()
67
![Page 68: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/68.jpg)
Mechanizm sesji w PHP
• Inicjalizacja: wywołanie funkcji
session_start()
• Powstaje globalna tablica $_SESSION
– wszystkie zapisane do niej dane są przesyłane
między kolejnymi żądaniami
68
![Page 69: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/69.jpg)
Przykład 1. realizacja licznika odwiedzin
<?php
session_start();
if(!isset($_SESSION['licznik']))
$_SESSION['licznik'] = 0;
$_SESSION['licznik']++;
echo 'Odwiedziles
już'.$_SESSION['licznik'].' podstron!';
?>
• PHP zapisuje zmienną $licznik i przesyła ją między naszymi żądaniami
69
![Page 70: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/70.jpg)
CIASTECZKA
![Page 71: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/71.jpg)
Ciasteczka
• COOKIES (ciasteczka) - porcja informacji
przechowywana w komputerze klienta lub
pamięci przeglądarki, albo jako plik na
dysku.
71
![Page 72: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/72.jpg)
Zastosowania
• liczniki,
• sondy,
• sklepy internetowe,
• do uwierzytelniania (np. śledzenie sesji,
uprawnienia do przeglądania stron WWW,
przekierowania adresów)
72
![Page 73: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/73.jpg)
Przykład 2. licznik odwiedzin strony
73 źródło: https://pl.wikipedia.org/wiki/HTTP_cookie
![Page 74: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/74.jpg)
Ustawa o „ciasteczkach”
• 22 marca 2013 roku weszły w życie
znowelizowane przepisy ustawy Prawa
Telekomunikacyjnego.
• Dz.U. 2012, poz. 1445
• Najważniejszą zmianą z punktu widzenia
internautów są art. 173, 174, 209
74
![Page 75: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/75.jpg)
Przykładowa informacja o „cookies”
Ta strona wykorzystuje pliki cookies.
Dowiedz się więcej o celu ich używania i
zmianie ustawień plików cookies w
przeglądarce internetowej. Niedokonanie
zmian ustawień na ustawienia blokujące
zapisywanie plików cookies jest
jednoznaczne z wyrażeniem zgody na ich
zapisywanie.
źródło: http://www.pkobp.pl 75
![Page 76: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/76.jpg)
Rekomendacje
• Weryfikacja czy serwis korzysta z plików
„cookies” innych niż niezbędne do
świadczenia usługi;
• Przygotowanie i udostępnienie w serwisie
Polityki Prywatności mówiącej o plikach
„cookies”;
• Implementacja w serwisie internetowym
stosownego komunikatu dotyczącego
plików „cookies”.
76
![Page 77: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/77.jpg)
Ustawienia cookies w przeglądarce
FIREFOX
77
![Page 78: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/78.jpg)
Tworzenie ciasteczek
• PHP automatycznie odczytuje ciasteczka i
zamienia je na zmienne.
• Są one przechowywane w tablicy
asocjacyjnej $_COOKIE, w której kluczami
są nazwy ciasteczek.
78
![Page 79: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/79.jpg)
Funkcja setcookie()
• int setcookie (string nazwa
[, string wartość [, int wygasa
[, string sciezka [, string domena
[, int bezpieczne]]]]])
79
![Page 80: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/80.jpg)
Argumenty setcookie():
• nazwa – nazwa cookie (analogicznie do nazwy zmiennej),
• wartość – wartość cookie,
• wygasa – określa czas ważności cookie (w sekundach),
domyślna wartość 0 – oznacza ważność do „zamknięcia
przeglądarki”,
• ścieżka – można podać katalog główny serwisu WWW „/”
lub podkatalog w którym cookie obowiązuje,
• domena – domyślnie nie jest sprawdzana, wartość ”” domena
wywoływana przez klienta dla której dostępne jest cookie,
• bezpieczne – domyślnie 0 (nie wymagamy bezpiecznego
połączenia); jeśli ustawimy 1 – cookie będzie wysyłane
tylko przez zabezpieczone gniazdo (https). 80
![Page 81: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/81.jpg)
Funkcja setcookie() - przykład:
• ustawianie: setcookie ('powitanie', 'Witaj wodzu!',
time() + (60*60*24), "/",
"www.moja.edu.pl", "1");
• odczytywanie: $tu_wpisz_powitanie=$_COOKIE['powitanie'];
81
![Page 82: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/82.jpg)
Odczytywanie ciasteczek
<?php
setcookie("uzytkownik", "Marian", time()+3600);
setcookie("haslo", "AlaMaKota", time()+3600);
?>
<?php
echo "Nazwa użytkownika: ".$_COOKIE['uzytkownik'];
echo "Hasło: ".$_COOKIE['haslo'];
?>
82
![Page 83: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/83.jpg)
Uwagi odnośnie cookies
• Ciasteczka przekazywane są za pomocą
nagłówków HTTP.
• Jeśli chcemy podać późniejsze argumenty, to w
poprzednich podajemy wartości domyślne.
• Przeglądarki interpretują w różnej kolejności
ustawienie tej samej cookie (kolejno lub w
odwrotnej kolejności)!
• Jeśli ustawiamy cookie w skrypcie, to zostanie
ono wykonane dopiero po wysłaniu całej strony
(na tej stronie posługujemy się zmienną, a
ciasteczkiem dopiero później). 83
![Page 84: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/84.jpg)
Uwagi odnośnie cookies (2)
• Ponieważ cookie są zapisane po stronie klienta,
to może się do nich „dobrać”! - w ważnych
zastosowaniach zastosujemy np. szyfrowanie.
• Cookie musi zostać ustawione zanim wyślemy
zawartość strony (aby nie wystąpił błąd):
<?php
setcookie ('cos', 'tez_cos');
?>
<HTML> … </HTML> 84
![Page 85: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/85.jpg)
Uwagi odnośnie cookies (3)
• użytkownik zawsze może zablokować obsługę
ciasteczek, dwie możliwości: nie obsługujemy
takich, implementujemy inną metodę np. z zastosowaniem funkcji skrótu
85
![Page 86: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/86.jpg)
Porównanie mechanizmów
• Różnica pomiędzy sesjami, a ciastkami
jest taka, że w pierwszym przypadku dane
w ogóle nie opuszczają serwera WWW, są
przez to (teoretycznie) bezpieczniejsze.
86
![Page 87: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/87.jpg)
BEZPIECZEŃSTWO W PHP
![Page 88: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/88.jpg)
Bezpieczeństwo w PHP
• Bezpieczna konfiguracja PHP
– ustawienia w plikach php.ini, .htaccess i httpd.conf
• Pisanie bezpiecznych skryptów
– Analiza sytuacji awaryjnych, np. gdy nie będzie
działała baza MySQL lub gdy w parametrze
przekazywanym metodą GET protokołu HTTP
zabraknie jednej z przewidzianych wartości
• Kontrola wprowadzonych danych
– SQL Injection, XSS
• Inne 88
![Page 89: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/89.jpg)
php.ini – bezpieczna konfiguracja
• register_globals – opcja jest odpowiedzialna za
rejestrowanie danych otrzymanych z formularzy, ciastek,
sesji czy serwera jako zmienne globalne.
• Przy opcji on wszystkie zmienne przekazane do skryptu
dostępne są w postaci $nazwa_zmiennej.
• Zmienne tworzone jako globalne mogą spowodować
nadpisywanie wcześniej ustalonych wartości zmiennych o
takich samych nazwach.
• Nie można stwierdzić, czy dana wartość pochodzi z sesji
czy może została podana w URLu metodą GET.
• Tym samym możliwe staje się np. oszukiwanie
mechanizmów autoryzacji.
89
![Page 90: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/90.jpg)
php.ini – bezpieczna konfiguracja (2)
• ZALECENIE: Zmienne globalne (register_globals) – wyłączone (off)
• Przy wyłączonej opcji register_globals do przekazywanej
zmiennej należy się odwoływać za pomocą specjalnych
tablic:
– $HTTP_POST_VARS['zmienna'],
– $HTTP_GET_VARS['zmienna'],
– lub w skróconej formie: $_POST['zmienna'] i $_GET['zmienna'].
90
![Page 91: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/91.jpg)
Dalsze aspekty związane z bezpieczeństwem
• zabezpieczenie dostępu do baz danych,
serwerów itp.
• przechowywanie haseł,
• złożoność zagadnień.
• Rozdział o bezpieczeństwie:
http://php.net/manual/pl/security.php
91
![Page 92: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/92.jpg)
Kontrola wprowadzonych danych:
• użytkownicy mogą wpisywać w pola z
danymi skrypty, zapytania do bazy,
polecenia wykonania operacji itp.
• przykład nazwiska w księdze gości: <SCRIPT LANGUAGE="JavaScript">
window.location="http://www.costam.pl"</SCRIPT>
• rozwiązanie: $nazwisko=$_POST['nazwisko'];
$popr_nazw=htmlspecialchars($nazwisko);
92
![Page 93: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/93.jpg)
Kontrola wprowadzonych danych:
• problemy związane z udostępnieniem plików
• przykład miało być: http://nasz.pl/bajki.php?plik=jas.html
jest: http://nasz.pl/bajki.php?plik=/etc/passwd
• przykładowe rozwiązanie:
porównać nazwę pliku z listą w bazie danych,
jeśli inna to coś z tym zrobić
93
![Page 94: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/94.jpg)
Kontrola wprowadzonych danych:
• uruchomienie programów z nieoczekiwanymi
danymi
przykład: <?php system("finger", $nazwa_uzyt); ?>
podana nazwa: "); vi /etc/passwd
rozwiązanie: użyć funkcji escapeshellcmd()
– unieszkodliwia znaki specjalne w łańcuchu
wykonywalnym takie jak średnik
• Napisać własną funkcję do weryfikacji danych
• Inne przypadki 94
![Page 95: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/95.jpg)
Szyfrowanie haseł
• Jeśli nastąpi włamanie na serwer BD, to
jest to podstawowa metoda
zabezpieczenia przed uzyskaniem dostępu
z kont użytkowników
• Przykład:
– użycie szyfrowania w bazie danych MySQL
funkcja password():
select count(*) from pracownicy where
login='$login' and haslo = password('$haslo');
95
![Page 96: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/96.jpg)
Funkcje haszujące (skrótu)
• md5 (algorytm RSA, 128-bitowy skrót)
• Przykład: $haslo = "hasło";
$hash = md5($haslo . "sól" );
– Metoda bezpieczniejsza – ochrona przed
tęczowymi tabelami: „sól” dodaje swoją
zawartość do hasła użytkownika, dzięki czemu
bez znajomości soli, haker nie skorzysta z
tęczowych tabel.
• sha1 … sha512 96
![Page 97: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/97.jpg)
Przykład – hasło z funkcją haszującą
<?php
// przechowywania hasza hasła
$query = sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
addslashes($username), md5($password));
$result = pg_query($connection, $query);
// sprawdzenie czy użytkonwik wprowadził właściwe hasło
$query = sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
addslashes($username), md5($password));
$result = pg_query($connection, $query);
if (pg_num_rows($result) > 0) {
echo 'Welcome, $username!';
} else {
echo 'Authentication failed for $username.';
}
?> 97
![Page 98: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/98.jpg)
Podsumowanie PHP + MySQL
• Sprawdzone rozwiązanie do tworzenia aplikacji
internetowych
• PHP oferuje mechanizm sesji m.in. w oparciu o
ciasteczka
• Ujmuje aspekty bezpieczeństwa
98
![Page 99: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/99.jpg)
Dalsze lektury
99
![Page 100: Internetowe Bazy Danychroman.ptak.staff.iiar.pwr.wroc.pl/IBD_wyklad_2017_nr3.pdf · Internetowe Bazy Danych dr inż. ... •dBase, DBA (klucz-wartość), ... •Trwałość danych](https://reader031.vdocuments.mx/reader031/viewer/2022022802/5c77241909d3f2cd0e8b57a7/html5/thumbnails/100.jpg)
DZIĘKUJĘ ZA UWAGĘ
Pytania?