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

Slides:



Advertisements
Podobne prezentacje
Marcin Piotrowski. Najpopularniejszymi darmowymi przeglądarkami są Internet Explorer, Opera, Mozilla Firefox, Google Chrome.
Advertisements

Procedury wyzwalane Procedura wyzwalana (ang. trigger) - stanowi kod użytkownika przechowywany wewnątrz bazy i uruchamiany w określonych sytuacjach np.
SQL INJECTION Wykorzystanie błędów w językach skryptowych
Wprowadzenie do języka skryptowego PHP
Wprowadzenie do języka skryptowego PHP
Wprowadzenie do języka skryptowego PHP – cz. 2
Kamil Smitkiewicz Bezpieczeństwo w PHP.
PROGRAMOWANIE STRUKTURALNE
PHP + MySQL część II.
Komponenty bazy danych Baza danych Jest to uporządkowany zbiór powiązanych ze sobą danych charakterystycznych dla pewnej klasy obiektów lub zdarzeń,
WPROWADZENIE DO BAZ DANYCH
MS Access 2003 Kwerendy Paweł Górczyński.
MS Access 2000 Kwerendy Piotr Górczyński 25/08/2001.
25/08/ Bazy danych II Piotr Górczyński MS Access – Action Query.
MS Access 2000 Tworzenie tabel Piotr Górczyński 2005.
20/09/ Języki programowania 1 Piotr Górczyński Kreator form.
Kwerendy, formularze, relacje, raporty i makra
ODE Informacje wstępne. Pojęcia podstawowe n Obiektowa baza danych u język komunikacji u ziarnistość obiektów u identyfikacja obiektów n Transakcja -
Metody autoryzacji użytkowników wymaga integracji z systemem operacyjnym nie wymaga logowania mała pewność mechanizmu wymaga logowania duża pewność mechanizmu.
Obsługa bazy danych z poziomu phpMyAdmin
Bezpieczeństwo Procedury składowane Funkcje i Wyzwalacze
Wykład 8 Wojciech Pieprzyca
Programowanie wizualne PW – LAB5 Wojciech Pieprzyca.
Systemy zarządzania treścią CMS
Zarządzanie stanem aplikacji Mechanizm Sesji
Hibernate uzupełnienie
Język SQL (Structured Query Language) DDL (Data Definition Language)
Przykład włamania do aplikacji internetowej poprzez modyfikację zapytań SQL Skrypty ASP Serwer bazy danych MS SQL Server Piotr Kuźniacki BDi.
Wprowadzenie do JSP Copyright © Politecnico di Milano September 2003 Translation: Kamil Żyła, Politechnika Lubelska.
MySQL – ODBC - ACCESS.
Konfiguracja kont w programie Adobe Dreamweaver
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 7.
Instrukcje: CREATE, INSERT, UPDATE, DELETE, DROP
dr hab. Ryszard Walkowiak prof. nadzw.
ANNA BANIEWSKA SYLWIA FILUŚ
Użytkownicy i przywileje Sesja - przykład Błędy Komunikacja międzyskryptowa Wykład 83PD Technologie internetowe.
Tworzenie Aplikacji Internetowych
Bazy danych.
Informatyka Relacyjne bazy danych.
ASP BAZY. 2.2 S. Wolek Wst. do Inf. Połączenie z bazą danych przez ADO (ActiveX Data Object) do: - źródła ODBC - bazy z podanie nazwy sterownika ODBC.
SQL - Structured Query Language
Aplikacje bazodanowe ADO.NET PHP i MySQL
Tworzenie Aplikacji Internetowych
Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 8.
Jak zacząć w MS SQL? USE master; GO IF DB_ID (Nbaza') IS NOT NULL DROP DATABASE baza; GO CREATE DATABASE baza; GO USE baza; GO.
Komendy SQL do pracy z tabelami i bazami
MICROSOFT Access TWORZENIE MAKR
18/11/ Języki programowania 1 Piotr Górczyński Kontrolki.
ASP BAZY DANYCH. 2 S. Wolek Wst. do Inf. Połączenie z bazą danych przez ADO (ActiveX Data Object) do: - źródła ODBC - bazy z podanie nazwy sterownika.
SYSTEMY TELEINFORMATYCZNE
PL/SQL – dalsza wędrówka
Autor: Damian Urbańczyk
Konfiguracja VPN Serwera – Windows 7
PHP + MySQL Podstawy pracy z bazą danych Damian Urbańczyk.
Piotr Czapiewski Wydział Informatyki ZUT Wykład 2.
Podstawy języka skryptów
Jak wykonać prosty licznik odwiedzin strony internetowej?
Komendy SQL do pracy z danymi
.NET i Bazy Danych Projekt: Wadim Grasza.
Konfiguracja HIBERnate, postgresQL + przykładowa aplikacja
Wykład 3 Prowadzący: dr Paweł Drozda. Użytkownik bazy danych – osoba lub aplikacja, mająca dostęp do części danych zgromadzonych w bazie Uprawnienia –
Partnerstwo dla Przyszłości 1 Lekcja 28 Dziedziczenie i rodzaje dziedziczenia.
Współpraca PHP i MySQL Wygodniejszym i wydajniejszym sposobem przechowywania i korzystania z danych zapisanych na serwerze jest współpraca z relacyjna.
ASP.NET Dostęp do bazy danych z poziomu kodu Elżbieta Mrówka-Matejewska.
Zarządzanie stanem w aplikacjach ASP.NET Elżbieta Mrówka-Matejewska
Temat: Tworzenie bazy danych
Strukturalny język zapytań SQL - historia
Aplikacje i usługi internetowe
Technologie Informacyjne Bazy danych
Zapis prezentacji:

Tworzenie Aplikacji Internetowych dr Wojciech M. Gańcza 3

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ć…

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.

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

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

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ść

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

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ć

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ć

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;

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

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

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.

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

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!

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

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

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

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); }

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.

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

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

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

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

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"; }

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;"); }

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

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

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);"); }

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