Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 3.

Podobne prezentacje


Prezentacja na temat: "Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 3."— Zapis prezentacji:

1 Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 3

2 Zasięg zmiennych W PHP skrypt tworzący stronę zachowuje się jak program Gdy generowanie strony się kończy – program się kończy Wszystkie zmienne przestają istnieć Wszystkie zasoby otwarte lub utworzone przez skrypt – są zamykane lub usuwane A czasem warto coś zapamiętać…

3 Sesja Jeśli informacje powinny przetrwać do następnej strony – możemy użyć sesji Do obsługi sesji służą polecenia session_start session_register I inne (->manual php) Oraz globalna tablica asocjacyjna $_SESSION Dane sesji obsługiwane są jako cookie.

4 Ograniczenia sesji Sesja dotyczy pojedynczego użytkownika – nie można dzielić danych pomiędzy różnych użytkowników Sesja wygasa – po krótkim okresie nieaktywności – tracimy informacje zawarte w sesji Sesja wymaga akceptowania cookie

5 Inne sposoby pamiętania Zamiast w sesji możemy pamiętać dane W ukrytych elementach formularza (nie można dzielić z innymi) W plikach (podobnie – problem wielodostępu) W bazie danych – tu jest najlepiej: dane mają strukturę i wszyscy mają dostęp – serwer bazy danych rozwiązuje konflikty wielodostępu

6 Baza danych W bazie dane podzielone są na tabele Każda tabela zawiera rekordy o takiej samej strukturze Dane w bazie są chronione – by uzyskać dostęp musimy się autoryzować Baza zapewnia mechanizmy wyszukiwania danych Wiele baz zapewnia tranzakcyjność

7 Dostęp do danych Mimo, że PHP zapewnia spory repertuar funkcji do obsługi bazy – wszystkie operacje możemy wykonywać komunikując się w języku SQL (sequence query language) Język ten składa się tylko z kilku poleceń Musimy jednak wcześniej nawiązać połączenie z bazą danych

8 Połączenie - przykład Wszystkie polecenia jakie będziemy omawiali – dotyczą serwera MySQL Połączenie – mysql_connect Nazwa serwera Identyfikator użytkownika Hasło autoryzujące użytkownika Wartości połączenia mogą być określone w konfiguracji PHP Funkcja zwraca identyfikator połączenia – który można zapamiętać

9 Pytanie SQL Do przesłania zapytania służy polecenie mysql_query Tekst zapytania (string) Opcjonalnie – identyfikator połączenia Jeśli nie określimy połączenia – będzie użyte ostatnio nawiązane Wynikiem może być identyfikator recordsetu zawierającego wynik działania zapytania Zapytanie może też nic nie zwracać

10 Inne funkcje W manualu PHP można znaleźć sporo innych funkcji – jednak nie będziemy ich używać. Zamiast tego – skorzystamy z poleceń języka SQL Przykład – zamiast wyboru bazy użyjemy use nazwa_bazy Warto poinformować bazę w jakim kodowaniu będą przychodzić polecenia set names utf8;

11 Klasa połączenia class DatabaseAccess { var $connection; function DatabaseAccess() { //… } function query($query) { //… }

12 Konstruktor Czy do konstruktora powinniśmy przekazywać parametry połączenia? Tak – bo to on decyduje z jakim serwerem i jaką bazą należy się połączyć Nie – bo różne serwery baz danych wymagają różnego określenia parametrów połączenia – a chcemy mieć możliwość podmienienia połączenia

13 Klasa określająca konfigurację class DatabaseConfiguration { var $database_server; var $database_user; var $database_password; var $database_name; function DatabaseConfiguration() { $this->database_server = "localhost"; $this->database_user = "root"; $this->database_password= ""; $this->database_name= "UUK"; } }; Definicje obiektu konfiguracji po prostu dołączamy do plików włączanych w skrypt.

14 Konstruktor function DatabaseAccess() { $config = new DatabaseConfiguration(); $this->connection = mysql_connect( $config->database_server, $config->database_user, $config->database_password); mysql_query("set names utf8;"); mysql_query("use ". $config->database_name. ";", $this->connection); } Przy połączeniu wybieramy bazę i ustawiamy sposób komunikacji! Po konstrukcji dostęp do bazy ma być przygotowany

15 Metoda query() Wystarczyłoby napisać function query($query) { return mysql_query( $query, $this->connection)); } Jednak sposób czytania zasobu zwracanego przez mysql_query – jest typowy dla serwera MySQL!

16 Recordset Dodajmy klasę recordset implementującą źródło danych Zapytanie może zwrócić pusty zbiór danych – musimy się na to przygotować (zwraca false zamiast identyfikatora zasobu) Metoda mysq_fetch_row zwraca tablicę lub false gdy nie ma więcej danych – a to za pózno (eof powinien zgłosić true przed pobraniem

17 Recordset… class Recordset { var $recordset; var $record ; function Recordset($records) { …} function get() { … } function eof() { … } };

18 Recordset… function Recordset($records) { $this->recordset = $records; if (gettype($records) != "resource") { $this->record = false; } else { $this->get(); }

19 Recordset… function get() { $previousRecord = $this->record; $this->record = ($this->recordset ? mysql_fetch_row($this->recordset) : false); return $previousRecord; } function eof() { return ($this->record ? false : true); }

20 Teraz możemy: … zakończyć pisanie dostępu do bazy danych: function query($query) { return new Recordset( mysql_query($query, $this->connection)); } Klasy DatabaseAccess i Recordset – powinny być umieszczone w jednym pliku.

21 Konstrukcja bazy W czasie pracy nad programem często testujemy Testy często polegają na zmianie danych Testy powinny być powtarzalne Dane powinno się łatwo przywracać Z kopii zapasowej, lub Przy użyciu skryptów tworzących Wole to drugie rowzwiązanie

22 Konstrukcja bazy Bazę tworzymy poleceniem SQL create database nazwabazy; Po utworzeniu – powinniśmy przejść do tej bazy Całą bazę danych możemy usunąć poleceniem drop database nazwabazy Jeśli coś jest tworzone poleceniem create – to jest usuwane przez drop

23 Konstrukcja bazy … Tabele konstruujemy poleceniem create table nazwatabeli ( pola i inne elementy tabeli); Tabelę usuwamy poleceniem drop table nazwatabeli. Usunięcie tabeli bezpowrotnie usuwa wszystkie zawarte w niej dane Różne serwery stosują różną składnię do określenia pól i innych elementów tabeli

24 Klasy tworzące bazę DBDatabaseCreator – tworzy pustą bazę DBTableCreator – tworzy tabelę pozwalając dodawać pole po polu DBFieldTypes – zawiera określenia typów pól zrozumiałych przez bazę Wszystkie operacje tworzenia bazy muszą być wykonane jedynie przy użyciu tych klas

25 DBFieldTypes class DBFieldTypes { var $primaryKey; var $refrence; var $title; var $name; var $description; var $money; function DBFieldTypes() { $this->primaryKey = "INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY"; $this->reference = "INTEGER"; $this->title = "VARCHAR(160)"; $this->name = "VARCHAR(64)"; $this->description = "VARCHAR(255)"; $this->money = "REAL"; }

26 DBDatabaseCreator class DBDatabaseCreator { var $database; function DBDatabaseCreator(&$database) { $this->database = &$database; } function createDatabase($name) { $this->database->query("create database $name default character set utf8;"); $this->database->query("set names utf8;"); $this->database->query("use $name;"); }

27 DBTableCreator class DBTableCreator { var $database; var $fieldTypes; var $definitionOfTable; function DBTableCreator(&$database) { $this->database = &$database; $this->fieldTypes= new DBFieldTypes(); $this->definitionOfTable = ""; }

28 DBTableCreator … function startTable($name) { $this->definitionOfTable = "create table $name (". $name. "ID ". $this->fieldTypes->primaryKey; } function addField($name, $type) { $this->definitionOfTable.= ", ". $name. " ". $this->fieldTypes->$type; }

29 DBTableCreator … function createTable() { $this->database->query( $this->definitionOfTable. ") DEFAULT CHARSET utf8;"); } function createIndex($tableName, $fieldName) { $this->database->query("create index ${tableName}${fieldName} on ${tableName}($fieldName);"); }

30 W następnym odcinku Poprawiamy konstruktor bazy Tworzymy bazę Wypełniamy bazę Tworzymy pierwszy widok danych z bazy Poznajemy ciekawe konstrukcje języka SQL Dowiemy się dlaczego nasza baza jest określana jako relacyjna


Pobierz ppt "Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 3."

Podobne prezentacje


Reklamy Google