CO JE DOBRE VEDET: Vývojové prostředí doma =========================== * Easy PHP pro Win uživatele (naisntaluje Apache, PHP, MySQL a phpMyAdmin najednou, umožní jejich snadné spouštění) * PDT-all-in-one ( free a docela kvalitní vývojové prostředí postavené nad eclipse) * Pluginy do Firefoxu (např firebug, dom inspector) Ovládání a zprovoznění MySQL ============================= * Na wětšině hostingů si ho musíte zvlášť povolit někde v nastavení * Tady ve škole se o něj žádá taky zvlášť - PHP MyAdmin * sada skriptů, webová aplikace. * nepotřebujete vnější přítup na server (pokud běží webový server na stejném stroji jako databázový) AJAX ============================= Prohlížeč na pozadí komunikuje se serverem a mění obsah stránky, aniž by se celá "reloadovala". - tak by se dnes měl dělat web - Pekny uvod zde: https://developer.mozilla.org/cs/AJAX/Jak_za%C4%8D%C3%ADt, jen to to XML na webu bude typicky generované PHP se dá použít na kde co: ============================= Jednak na hodně věcí existují nativní (funkcionalita je napsaná v C++ a "přilinkovaná" k interpreteru), druhak existuje po webu hromada knihoven a tříd. - rozšiřující moduly * toto jsou např rozšiřující moduly ze standardní distribuce Suse 11.3: * Grafika, matematika, exif, operace se soubory, (např i pdf, doc), sqllite, email, práce s XML a kdecovšecko, co by v PHP bylo pomalé a je lepší to mít implementované nativně [ ] php5-bcmath-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 19K Details [ ] php5-bz2-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 15K Details [ ] php5-calendar-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 16K Details [ ] php5-ctype-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 9.6K Details [ ] php5-curl-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 27K Details [ ] php5-dba-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 25K Details [ ] php5-devel-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 412K Details [ ] php5-dom-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 50K Details [ ] php5-enchant-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 13K Details [ ] php5-exif-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 26K Details [ ] php5-fastcgi-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 921K Details [ ] php5-fileinfo-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 145K Details [ ] php5-ftp-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 22K Details [ ] php5-gd-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 86K Details [ ] php5-gettext-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 10K Details [ ] php5-gmp-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 18K Details [ ] php5-hash-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 76K Details [ ] php5-iconv-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 20K Details [ ] php5-imap-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 33K Details [ ] php5-intl-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 53K Details [ ] php5-json-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 18K Details [ ] php5-ldap-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 21K Details [ ] php5-mbstring-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 383K Details [ ] php5-mcrypt-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 16K Details [ ] php5-mysql-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 58K Details [ ] php5-odbc-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 33K Details [ ] php5-openssl-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 40K Details [ ] php5-pcntl-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 15K Details [ ] php5-pdo-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 39K Details [ ] php5-pgsql-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 50K Details [ ] php5-phar-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 108K Details [ ] php5-posix-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 14K Details [ ] php5-pspell-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 12K Details [ ] php5-readline-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 11K Details [ ] php5-shmop-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 10K Details [ ] php5-snmp-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 14K Details [ ] php5-soap-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 117K Details [ ] php5-sockets-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 20K Details [ ] php5-sqlite-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 46K Details [ ] php5-suhosin-5.3.2-1.31.i586.rpm 06-Jul-2010 00:29 66K Details [ ] php5-sysvmsg-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 12K Details [ ] php5-sysvsem-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 9.9K Details [ ] php5-sysvshm-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 11K Details [ ] php5-tidy-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 20K Details [ ] php5-tokenizer-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 11K Details [ ] php5-wddx-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 19K Details [ ] php5-xmlreader-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 16K Details [ ] php5-xmlrpc-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 37K Details [ ] php5-xmlwriter-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 16K Details [ ] php5-xsl-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 17K Details [ ] php5-zip-5.3.2-1.31.i586.rpm 06-Jul-2010 00:30 36K Details PHP Manual ============================= - obsahuje v podstatě skoro všecko, co můžete najít, je to nejspíš lepší zdroj informací než většina knih - obsahuje příklady, diskuse... * http://php.net/manual/en/index.php * index funkcí: http://www.php.net/manual/en/funcref.php Frameworky, Redakční a šblonovací systémy v PHP ============================= Vetší aplikace se obvykle neprogramují "from scratch" v PHP, ale v nějakém šablonovacím systému (HTML kódér napíše šablonu a jiný PHP programátor naprogramuje přiřazení proměnných do šablony), redakčního systému (umožňuje nějakou dobře známou funkcionalitu, např publikovat články, webový obchod,...) či frameworku (třeba ucelený soubor knihoven usnadňujících práci, například správa uživatelů, přístup k databázi, obsluha chyb...) - Smarty - šablonovací systém (z mé zkušenosti rozumná kombinace jednoduchosti a množství možností) http://smarty.ronnieweb.net/ - Zend kompletní framework, společnost zend dnes hodně "stojí" za vývojem a rozvojem PHP - Drupal, Joomla - redakční systémy. Ideální pokud chcete prostě jen rychle publikovat články - ale je mnohoho jiných, stačí zagooglit Frameworky pro JS ============================= - jQuery (můj oblíbený, dema a tutorialy zde: http://jqueryui.com/demos/) - Dojo - ale je jich mnohem víc http://en.wikipedia.org/wiki/Comparison_of_JavaScript_frameworks Výrazně zrychlují práci a navíc se nemusíte strat o kompatibilitu prohlížečů Ostatní způsoby webového programování než PHP ============================================= - ASP, ASP.NET (MS, jazyky .NET technologie) - JSP (Sun, Java)... - GWT Celkem zajímavé je GWT (Google web toolkit), kde aplikaci píšete v něčem, jako je Java, ale překládá se do několika typů JavaScriptů, pro různé prohlížeče. Je to už otestovaná technologie, jede na ní třeba Gmail. - Python, Perl, Rubby... !!! Ikdyž tu o těhle technologiích píšu, zápočťáky v čemkoli jiném než PHP je potřeba dopředu dohodnout. !!! HTML šablony ===================== - Většinou není úplně šikovné tvořit vzhled stránky od začátku - když si dáte do Googlu "free html templates" vyjede spousta odkazů na stránky, kde jsou již připravené vzhledy k použití, které pouze upravíte. Trendy ====================== - nové prohlížeče podporují novou verzi CSS - CSS3, jde tam udělat hodně věcí, které dříve bylo nutné naprogramovat v JS - blíží se HTML 5, bude obsahovat video, canvas... Příklad jak by měla vypadat Vaše databáze: (Podobně velkou databázi budu očekávat jako zdravé minimum v zápočťácích) =========================================== -- KTERAKO SI UDELAT DATABAZI A V NI PROVAZANE TABULKY: [UZIVATEL] n <--> 1 [GALERIE] n <--> 1 [OBRAZEK], -- tj muze byt neomezene uzivatelu, kazdy uzivatel muze mit neomezene galerii a v kazde galerii je -- neomezene obrazku. -- naopak, kazdy obrazek patri do jedne galerie, kazda galerie patri jednomu uzivateli -- po nainstalovani databaze si vytvorte krom admin nebo root uzivatele pro kazdou DB zvlastniho uzivatele -- zde tvorime uzivatele 'nswi096' s heslem GRANT USAGE ON * . * TO 'nswi096'@'localhost' IDENTIFIED BY 'kokos'; -- vytvoreni databaze -- pozor, prikaz CREATE DATABASE neni soucasti standardu! -- v MySQL funguje. CREATE DATABASE `nswi096-cvika` DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci; -- uzivateli ktereho jste si udelali pridelte prave jan pro tuhle databazi GRANT ALL PRIVILEGES ON `nswi096-cvika` . * TO 'nswi096'@'localhost' WITH GRANT OPTION ; -- a ted ty tabulky: CREATE TABLE `uzivatele` ( `id` INT NOT NULL AUTO_INCREMENT , `login` VARCHAR( 32 ) NOT NULL , `jmeno` VARCHAR( 64 ) NOT NULL , PRIMARY KEY ( `id` ) ) TYPE = InnoDB; CREATE TABLE `galerie` ( `id` INT NOT NULL AUTO_INCREMENT , `id_uzivatele` INT NOT NULL , `jmeno` VARCHAR( 32 ) NOT NULL , `popis` TEXT NOT NULL , PRIMARY KEY ( `id` ) , INDEX ( `id_uzivatele` ) ) TYPE = InnoDB; -- jestle asi odkaz na obrazek nebo polozka jako tzv BLOB - pro data. CREATE TABLE `obrazky` ( `id` INT NOT NULL AUTO_INCREMENT , `id_galerie` INT NOT NULL , `jmeno` VARCHAR( 32 ) NOT NULL , `popis` TEXT NOT NULL , PRIMARY KEY ( `id` ) , INDEX ( `id_galerie` ) ) TYPE = InnoDB; -- tabulky provazeme cicimi klici -- to zaruci konzistenci dat (tj, ze se z treba nebudeme odkazovat z galerii na uzivatele, ktery uz je smazany) ALTER TABLE galerie ADD CONSTRAINT FK_galerie_uzivatele FOREIGN KEY ( id_uzivatele ) REFERENCES uzivatele( id ) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE obrazky ADD CONSTRAINT FK_obrazky_galerie FOREIGN KEY ( id_galerie ) REFERENCES galerie( id ) ON DELETE CASCADE ON UPDATE CASCADE; -- naplnit daty INSERT INTO `uzivatele` ( `id` , `login` , `jmeno` ) VALUES ('', 'tom', 'Tomas P'), ('', 'oskar', 'Oskar Oskarovic'); INSERT INTO `galerie` ( `id` , `id_uzivatele` , `jmeno` , `popis` ) VALUES ('', '1', 'Galerie 1', 'Toto je prni galerie'); INSERT INTO `obrazky` ( `id` , `id_galerie` , `jmeno` , `popis` ) VALUES ('', '1', 'Obrazek 1', 'Toto je prvni obrazek'); -- a ted uz se nad tim celym jenom dotazovat: -- vsechny nazvy galerii uzivatele tom -- najdete si v manualu co je LEFT JOIN, RIGHT JOIN, OUTER JOIN, INNER JOIN. SELECT galerie.jmeno FROM galerie JOIN uzivatele ON galerie.id_uzivatele = uzivatele.id; -- vsechny obrazky uzivatele tom SELECT obrazky.id, obrazky.jmeno FROM (galerie JOIN uzivatele ON galerie.id_uzivatele = uzivatele.id) JOIN obrazky on obrazky.id_galerie = galerie.id;