Návrh a tvorba WWW Cvičení 5

Slides:



Advertisements
Podobné prezentace
Přístup k databázím z WWW
Advertisements

(instance konkrétní třídy)
Databázové systémy 2 Cvičení č. 8
Základy jazyka SQL Jan Tichava
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
Návrh a tvorba WWW Přednáška 6 PHP II – Databáze.
LOV, Listbox, Poplist a Combobox v Oracle Forms LOV – seznam hodnot, které se zobrazí po stisku klávesy Enter v textovém poli. LOV – seznam hodnot, které.
Pole, ukazatele a odkazy
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Informační systémy Nástroje pro sběr dat, návrh a realizace databáze.
„Programátor by měl být v prvé řadě líný.“. PIFovo Web API (API = Application Programming Interface)
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Informatika pro ekonomy II přednáška 11
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Návrh a tvorba WWW Cvičení 6
Databázové systémy II Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Materiály k přednášce Úvod do programování Ondřej Čepek.
Radek Špinka Přepínače MSSQL výběr.
PL/SQL Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd. Rozšířením jazyka SQL.
PHP a MySQL Připojení k databázi:
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Caché Security. Jak vypadá zabezpečení dnes Jak bude vypadat a co by Caché měla umět v budoucnu Včera, dnes a zítra.
Procedurální rozšíření Transact SQL Michal Kopecký Výběr ze slajdů k 3. přednášce předmětu Databázové Aplikace (DBI026) na MFF UK.
Databázové systémy teorie a návrh relačních databázových systémů část II.
Vypracoval: Ondřej Dvorský Třída: VIII.A
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Počítače a programování 1
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
Ing. Tomáš Váňa, Ing. Jiří Zechmeister
Číslo šablony: III/2 VY_32_INOVACE_P4_3.8 Tematická oblast: Aplikační software pro práci s informacemi II. Databáze – základy SQL Typ: DUM - kombinovaný.
KIV/PPA1 cvičení 8 Cvičící: Pavel Bžoch. Osnova cvičení Objekty v Javě Třída Konstruktor Metody Metody a proměnné třídy x instance Program sestávající.
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
C# - předávání parametrů Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Návrh a tvorba WWW Přednáška 5 Úvod do jazyka PHP.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Transakční zpracování v SQL P. Částek. Transakce Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT Jestliže.
Databázové systémy 2 Zkouška – 8:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK2(p_table_name VARCHAR2, p_min_nuls NUMBER, p_drop.
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Aplikační a programové vybavení
123.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Počítače a programování 1 7.přednáška. Základy Pole ve třídách a metodách Pole Arrays.
Databázové systémy Zabezpečení DBS. Cíle, které je třeba vzít v úvahu při návrhu databázové aplikace z pohledu bezpečnosti: Důvěrnost - informace by neměly.
ZÁKLADNÍ POJMY. ZDROJOVÝ TEXT PROGRAMU Tvoří: klíčová slova komentáře identifikátory.
Jazyk C A0B36PRI - PROGRAMOVÁNÍ Část II.
Kam se ubírá jazyk C#? Dr. Ing. Dalibor Kačmář Academic Developer Evangelist Developer & Platform Evangelist Group Microsoft Czech & Slovakia Anders Hejlsberg.
Dynamické SQL (dynamic SQL)‏ Dotazovací jazyky Šárka Hlušičková.
Databázové systémy I Cvičení č. 8 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2015.
Roman Danel Institut ekonomiky a systémů řízení 2016
Dotazovací jazyk SQL - III
Databázové systémy a SQL
Databázové systémy I Přednáška 11 Databázové systémy 1 – KIT/IDAS1
Dotazovací jazyk SQL I.
Databázové systémy a SQL
Databázové systémy a SQL
Databázové systémy a SQL
C# přehled vlastností.
Přednáška 9 Triggery.
NÁZEV ŠKOLY: S0Š Net Office, spol. s r.o., Orlová-Lutyně
Databázové systémy a SQL
Databázové systémy a SQL
Transkript prezentace:

Návrh a tvorba WWW Cvičení 5 PHP (OOP, DB)

OOP v PHP Deklarace třídy Tvorba objektů Construktor, Destruktor Deklaraci třídy (šablony objektu) provádíme prostřednictvím klíčového slova class, následuje název třídy a ve složených závarkách uvádíme seznam vlastností a metod. Tvorba objektů Instance objektů vytváříme pomocí klíčového slova new. Construktor, Destruktor Při vytvoření instance třídy je alokován v paměti prostor, dojde k vytvoření kopie všech vlastností třídy a je vykonán konstruktor (je-li definován). Destruktor je naopak vykonán v okamžiku kdy je objekt odebrán z paměti. $instance = New MojeTrida(); class MojeTrida { //seznam vlastnost function __construct() { ... } //seznam metod function __destruct() {

Metody a vlastnosti objektu Metody a vlastnosti objektu jsou dostupné prostřednictvím speciální proměnné $this, která je odkazem na objekt. Za tuto proměnou lze pomocí zápisu „-> název“ přistupovat k vlastnostem i metodám objektu. Základními modifikátory pro přístup k vlastnostem a metodám jsou v PHP: public, protected, private. $this->mojeMetoda(); class MojeTrida { public $v = “Veřejný člen”; protected $c = “Chráněný člen”; private $s = “Soukromý člen”; public function vMetoda() { ... } protected function cMetoda() { private function sMetoda() {

Statické metody a vlastnosti Statické metody a vlastnosti nepatří instancím, ale třídám. Deklarují se pomocí klíčového slova static. Dostupné jsou pomocí zápisu „jméno třídy::název vlastnosti/metody“. Uvnitř třídy lze použít identifikátor self. class MojeTrida { static $statickaVlastnost = 0; static function sV1() { self::sV2; } static function sV2() { echo “Statická metoda”; MojeTrida::$statickaVlastnost++; MojeTrida::$sV1();

Konstanty třídy Konstanty lze ve třídě definovat pomocí klíčového slova const. Názvy konstant se píši velkými písmeny. Práce s konstatntami je stejná jako s statickými vlastnostmi, nenáleží třídě, ale instanci. Konstanty nelze měnit ani odstranit. class MojeTrida { const BARVA = “modrá”; const CISLO = 1; static function tisk() { echo self::BARVA; } echo MojeTrida::CISLO;

Autoload tříd Funkce __autoload() zahrnuje do kódu automatickým způsobem třídy. Aplikace může obsahovat pouze jeden výskyt této funkce. MojeTrida.php autoload.php index.php class MojeTrida { const CISLO = 1; static function tisk() { echo self::CISLO; } function __autoload ($trida) { require_once (“/class/”.$trida.“.php”); } require_once “autoload.php”; MojeTrida::tisk();

Oracle DB v PHP Podpora databázového stroje Oracle je zajištěna prostřednictvím extenzí: Oracle OCI8 PDO Oracle Instant client (http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html). Účet na DB vám vytvoří cvičící předmětu Databázové systémy 2. The Undeground PHP and Oracle Manual Christopher Jones, Alison Holloway http://www.oracle.com/us/technologies/026973.pdf

Spojení Otevření spojení Uzavření spojení Změna hesla $c=oci_connect($username, $password, $dbname, $charset); oci_close($c); oci_password_change($c, $username, $oldPassword, $newPassword);

Select Rozebrání příkazu (Parse) – parsování dotazu pro vykonání Přiřazení dat (Bind) – přiřazení dat do dotazu pro lepší výkon a bezpečnost Vykonání (Execute) – vykonání dotazu Načtení (Fetch) – vrácení výsledku dotazu z databáze $c = oci_connect("hr", "hrpwd", "localhost/XE"); $s = oci_parse($c, 'select city, postal_code from location'); oci_execute($s); print '<table border="1">'; while ($row = oci_fetch_array($s, OCI_NUM+OCI_RETURN_NULLS)) { print '<tr>'; foreach ($row as $item) print '<td>'.htmlentities($item).'</td>'; print '</tr>‘; } print '</table>'; oci_free_statement($s);

Zpracování výsledku Parametry pro funkci oci_fetch_array() Funkce načtení oci_fetch_all() – vrátí výsledek najednou oci_fetch_array() – vrátí výsledek v poli oci_fetch_assoc() – vrátí výsledek v asociativním poli oci_fetch_object() – vrátí výsledek jako objekt oci_fetch_row() – vrátí výsledek v indexovaném poli Parametry pro funkci oci_fetch_array() OCI_ASSOC – vrátí výsledek jako asociativní pole OCI_NUM – vrátí výsledek jako číselně indexované pole OCI_BOTH – vrátí výsledek jako indexované i asociativní pole (výchozí hodnota) OCI_RETURN_NULLS – vrátí PHP NULL hodnotu pro NULL data OCI_RETURN_LOBS – vrátí aktuální LOB data místo OCI- LOB zdroje. $rowarray = oci_fetch_array($statement, $mode); $rowarray = oci_fetch_array($s, OCI_NUM + OCI_RETURN_NULLS);

Insert, delete, update, create, drop Pro vykonání Data Definition Language (DDL) and Data Manipulation Language (DML) dotazů, jako například CREATE, INSERT, atd. je nejjednodušší použít příkaz pro parsování SQL dotazu (oci_parse) a jeho následné vykonání (oci_execute). $s = oci_parse($conn, "create table i1test (col1 number)"); oci_execute($s);

Transakce Transakce je logická jednotka zpracování dat, která se skládá z jednoho nebo více SQL příkazů provedených jedním uživatelem. Transakce končí buď úspěšným „commitnutím“, tedy promítnutím změn do databáze, nebo rollbackem, vrácením databáze do původního stavu, resp. neprovedením změn naakumulovaných v průběhu transakce. Funkce související s transakcemi oci_execute($s, OCI_DEFAULT); - bez provedení commitu oci_rollback($c); - vrácení databáze do původního stavu $c = oci_connect('hr', 'hrpwd', 'localhost/XE'); $s = oci_parse($c, "insert into mytable values ('abc')"); oci_execute($s, OCI_DEFAULT); // don't commit $s = oci_parse($c, "begin updatelog('INSERT attempted'); end;"); oci_rollback($c);

Obsluha chyb Obsluha chyb je v knihovně OCI řešena funkcí oci_error(). Funkce vyžaduje různé argumenty závisející na kontextu předešlého volání. Návratová hodnota funkce je pole. Prvky pole vrácen funkcí oci_error(): $e["code"] – číslo chyby $e["offset"] – pozice chyby v SQL dotazu $e["message"] – chybová zpráva $e["sqltext"] – SQL dotaz $c = oci_connect("hr", "not_hrpwd", "localhost/XE"); if (!$c) { $e = oci_error(); // No parameter passed var_dump($e); } $s = oci_parse($c, "select city from locations"); $rc = oci_execute($s); if (!$rc) { $e = oci_error($s); // Statement resource passed $rc = oci_fetch_all($s, $results);

Přiřazení dat Binding je vysoce doporučovaným prostředkem pro cachování dotazu na databázovém serveru a znovupoužití exekučních plánů. Dále nabízí způsob jak chránit dotazy proti SQL injection. $s = oci_parse($c, "select last_name from employees where employee_id = :eidbv"); $myeid = 101; oci_bind_by_name($s, ":eidbv", $myeid); oci_execute($s); $row = oci_fetch_array($s, OCI_ASSOC); echo "Last name is: ". $row['LAST_NAME'] ."<br>\n";

Omezení počtu řádku výsledku (limit) Oracle nezná klíčové slovo LIMIT a proto je pro omezení počtu řádků výstupu SQL dotazu potřeba použít speciální konstrukci, která prostřednictvím vnořeného selectu toto omezení zprostředkuje. select * from ( select a.*, rownum as rnum from (-- Váš dotaz --) a where rownum <= MAX_ROWS ) where rnum >= MIN_ROWS

Omezení počtu řádku výsledku (limit) Oracle nezná klíčové slovo LIMIT a proto je pro omezení počtu řádků výstupu SQL dotazu potřeba použít speciální konstrukci, která prostřednictvím vnořeného selectu toto omezení zprostředkuje. select * from ( select a.*, rownum as rnum from (-- Váš dotaz --) a where rownum <= MAX_ROWS ) where rnum >= MIN_ROWS

Auto-increment Autoinkrementování hodnoty sloupečku tabulky je v prostředí Oracle realizováno prostřednictvím sequence a trigeru. Vytvoření sequence a trigeru Příklad konkrétního použití při konstrukci dotazu acreate sequence myseq; create trigger mytrigger before insert on mytable for each row begin select myseq.nextval into :new.myid from dual; end; $s = oci_parse($c, "insert into mytable (mydata) values ('Hello')"); oci_execute($s);

Získání posledního vloženého ID OCI8 nemá žádnou explicitní funkci “insert_id”, která by vracela poslední vložené ID. Místo toho lze použít RETURN INTO. Obdobně pomocí descriptoru $s = oci_parse($c, "insert into mytable (mydata) values ('Hello') return myid into :id"); oci_bind_by_name($s, ":id", $id, 20, SQLT_INT); oci_execute($s); echo "Data inserted with id: $id\n"; $rid = oci_new_descriptor($c, OCI_D_ROWID); $s = oci_parse($c, "insert into mytable (mydata) values ('Hello') return rowid into :rid"); oci_bind_by_name($s, ":rid", $rid, -1, OCI_B_ROWID); oci_execute($s);

Třída FORM zdrojový kód: blok_5/class/Form.php

Autoload tříd zdrojový kód: blok_5/c01.php

Použití třídy Form v kontaktu zdrojový kód: blok_5/include/kontakt.php

Použití třídy Form v kontaktu I. zdrojový kód: blok_5/include/kontakt.php

Použití třídy Form v kontaktu II. zdrojový kód: blok_5/include/kontakt.php

Domácí úkol Doplňte třídu Form o formulářový prvek výběru (select).

Příprava pro práci s DB Vytvořte si tabulku users se sloupci username, password, realname, email, description, created. Vytvořte si tabulku emails se sloupci id, name, subject, email, message, created. Vytvořte si sekvenci a triger pro autoinkremetování hodnoty id pro tabulku emails.

Napojení na Oracle DB zdrojový kód: blok_5/c02.php

Vložení emailu do DB zdrojový kód: blok_5/include/kontakt2.php

Domácí úkol Vytvořte si třídu pro práci s DB Orace.

Kontrolní otázky Co je to instance třídy? Co je statická metoda třídy? K čemu slouží v PHP funkce __autoload()? K čemu slouží knihovna OCI8? Jak omezíme v PHP počet řádků výsledků dotazu do DB? Jak u DB Oracle zajistíme inkrementování hodnoty?