Webbutvecklare CMS, Yh-utbildning, 2 år, 400 Yhp, Medieinstitutet, www.m Webbutvecklare CMS, Yh-utbildning, 2 år, 400 Yhp, Medieinstitutet, www.medieinstitutet.se, sida 3/12 3. Dynamiska webbplatser, 20 Yhp (4 v) ynamiska webbplatser, 20 Yhp (4 v) Kursens innehåll Kursen syftar till att lära de studerande produktion av databasdrivna webbplatser. De studerande lär sig att skapa en enkel databas samt ett webbgränsnitt för inmatning och utvisning av data: grundläggande PHP-programmering skapa och modellera databaser datatyper hämta, sortera och filtrera data databaskoppling mot webben mata in data från webbformulär visa ut data på webben sens innehåll n syftar till att lära de studerande produktion av databasdrivna webbplatser. De stude ett webbgränsnitt för inmatning och utvisning av data: grundläggande Efter avslutad kurs PHP-programmering ska den studerande kunna: arbeta med variabler och arrayer i PHP skapa och funktioner modellera och logiska jämförelser databaser kontrollstrukturer och loopar datatyper de vanligaste datatyperna förstå relationsdatabaser hämta, sortera skapa och modellera och filtrera databaser enligt data de 3 första normalformerna grundläggande SQL-kommandon databaskoppling ställa frågor över mot relationer, webben JOIN databaskoppling via webbgränssnitt mata in data hämta, visa från ut och webbformulär ändra i data från webbgränssnitt visa ut data på webben Betygskriterier För godkänt: Modellera en relationsdatabas som uppfyller första och andra normalformerna. Kunna använda CRUD i MySQL. Kunna använda Inner Joins i MySQL. Kommunicera med MySQL ifrån PHP. Publicera en databas på en webbserver. r avslutad kurs ska den studerande kunna: arbeta med variabler och arrayer i PHP funktioner och logiska jämförelser kontrollstrukturer och loopar de vanligaste datatyperna För väl Godkänt: Utöver ovanstående kriterier för godkänt ska den studerande kunna modellera en databas från grund enligt de tre första normalformerna, samt skriva komplexa SQL-satser för att hantera data i flera tabeller. Kunskapskontroll Salstentamen. förstå relationsdatabaser skapa och modellera databaser enligt de 3 första normalformerna Rekommenderad litteratur och dokumentation grundläggande Avgörs av föreläsarna (bl.a. SQL-kommandon diverse artiklar och tutorials på webben). ställa frågor över relationer, JOIN databaskoppling via webbgränssnitt hämta, visa ut och ändra i data från webbgränssnitt 2015 Coder s Academy för Medieinstitutet, delkursöversikt
Dag 1: Introduktion till SQL Vecka: 45 Datum: 2015-11-02 Veckodag: måndag Tid: 13.00-17.00 Thomas (+ Peter närvarande) Historik: Relationsdatabaser och SQL, MySQL/MariaDB. Skapa nya databaser på ert serverkonto, med DirectAdmin. (codersacademy.se:2222) Obs! De två första veckorna jobbar vi på direkt på servern med MyWebSQL! Introduktion till verktyget MyWebSQL. (codersacademy.se/myweb) Begreppet CRUD. Skapa en tabell (med MyWebSQL notera att den skapar SQL-frågor åt dig) Lägg till data (med MyWebSQL notera att den skapar SQL-frågor åt dig) Primärnyckel - varför är den viktig (autoincreement vs. annan unik nyckel) Syntax: SELECT, FROM, WHERE och ORDER BY (ASC, DESC) Operatorer: AND, OR, NOT Skapa en tabell med kunder (e-post, förnamn, efternamn, lösenord). Skapa en tabell med adresser till kunder (e-post, gatunamn, postnr, ortnamn). https://en.wikipedia.org/wiki/relational_database https://en.wikipedia.org/wiki/sql https://en.wikipedia.org/wiki/mysql https://en.wikipedia.org/wiki/mariadb https://en.wikipedia.org/wiki/create,_read,_update_and_delete http://mywebsql.net/docs/ (documentation mywebsql) https://www.youtube.com/watch?v=9xeoudodfu8 (creating a database with DirectAdmin) 2015 Coder s Academy för Medieinstitutet, sida 1/17
Dag 2: Mer om SQL, CRUD och datatyper Vecka: 45 Datum: 2015-11-03 Veckodag: tisdag Tid: 13.00-17.00 Peter SELECT (repetition). Övriga kommandon som motsvarar CRUD: UPDATE, INSERT, DELETE. CREATE TABLE (+ CREATE DATABASE, går ej att använda på servern, använd DirectAdmin istället). Olika datatyper och när de används (VARCHAR, INT, FLOAT, TEXT, BLOB etc). Lämplig längd (storlek) på datatyper. Skillnad: Olika citattecken och backticks. Lägga in 20 kunder i kundtabellen med INSERT. Lägg in 15 adresser i adresstabellen med INSERT. Ändra med UPDATE så att minst 3 personer bor på samma adress. Minst 5 personer ska vara bostadslösa. http://dev.mysql.com/doc/refman/5.7/en/select.html http://dev.mysql.com/doc/refman/5.7/en/insert.html http://dev.mysql.com/doc/refman/5.7/en/insert.html http://dev.mysql.com/doc/refman/5.7/en/delete.html http://dev.mysql.com/doc/refman/5.7/en/data-types.html https://dev.mysql.com/doc/refman/5.0/en/non-typed-operators.html 2015 Coder s Academy för Medieinstitutet, sida 2/17
Dag 3: Relationer och kommandot JOIN Vecka: 45 Datum: 2015-11-04 Veckodag: onsdag Tid: 09.00-12.00, 13.00-16.00 Peter Relationsdatabaser: Hur uttrycker man relationer i SQL? Relationer: 1-många (1:n), många till många (m:n). Hur löser man detta? Vanlig INNER JOIN (hur kan den skrivas på olika sätt, med och utan ordet JOIN). Tabellalias, varför och hur (syntax för AS). LEFT [OUTER] JOIN och RIGHT [OUTER] JOIN syntax, varför och hur används dessa? FULL [OUTER] JOIN och CROSS JOIN syntax, varför och hur används dessa? PRIMARY KEY repetition + sammansatta primärnycklar. FOREIGN KEY CONSTRAINTS - syntax + varför? (Diskussion: Undvik att sätta för tidigt vid modellering av databas?) UNIQUE CONSTRAINT syntax + varför? Skriv ut var folk bor med hjälp av en INNER JOIN. Skriv ut en lista över bostadslösa (lös först med en LEFT JOIN och sedan med en RIGHT JOIN). Lägg till personnummer som en kolumn för kunder/personer. Gör en unique constraint som inte tillåter samma personnummer för flera personer. Vilka FOREIGN KEY CONSTRAINTS vore lämpliga? http://www.sql-join.com/ http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ http://www.sitepoint.com/understanding-sql-joins-mysql-database/ http://www.w3schools.com/sql/sql_unique.asp 2015 Coder s Academy för Medieinstitutet, sida 3/17
Dag 4: PHP och SQL Vecka: 45 Datum: 2015-11-05 Veckodag: torsdag Tid: 13.00-17.00 Peter Arbeta lokalt (AMPPS/LAMP-stack) med databaser. (OBS! Övergång till arbeta lokalt) Introduktion till PHP (variabler, echo, var_dump). Att använda PDO-objektet för att koppla upp sig mot MySQL/MariaDB. Vikten av att använda PDO-objektet på ett säkert sätt! (Baka ej in variabelvärden i själva frågan.) Varför mysqli och mysql-biblioteken för PHP INTE bör användas. (Säkerhet + flyttbarhet.) Vad är en associativ array? Att titta på resultatet från en SELECT-sats som en associativ array. Att loopa genom en associativ array (som är resultatet av en SELECT) Hur fungerar foreach-loopen? Att spara resultatet av en SELECT-fråga som bas för en ny fråga. Loopar i loopar nestled loops (en SELECT per iteration av den yttre loopen). Diskussion: Varför ska man hellre låta JOINS och SUBSELECTS och VYER göra jobbet? (Istället för att ställa många frågor från PHP) Exportera din databas från servern till din lokala server - dvs. din dator. Skriv ut resultatet av ett par SELECTS som en var_dump Skriv ut på ett trevligare sätt (en HTML-tabell) genom att använda en foreach-loop. http://php.net/manual/en/function.echo.php http://php.net/manual/en/function.var-dump.php http://php.net/manual/en/language.types.array.php http://php.net/manual/en/control-structures.foreach.php http://php.net/manual/en/book.pdo.php http://php.net/manual/en/book.mysqli.php (ANVÄND INTE!) 2015 Coder s Academy för Medieinstitutet, sida 4/17
Dag 5: PHP och HTML-formulär Vecka: 46 Datum: 2015-11-09 Veckodag: måndag Tid: 13.00-17.00 Peter Skapa ett formulär i HTML Vad är GET och POST? Läsa av GET och POST-parametrar i PHP Loopa genom GET- och POST-parametrar Skriv ut ett resultat till en sida beroende på hur ett formulär är ifyllt. If- och else-satser i PHP Se ovan. (Praktisk orienterad föreläsning.) http://www.w3schools.com/html/html_forms.asp http://www.w3schools.com/php/php_forms.asp http://www.w3schools.com/tags/ref_httpmethods.asp http://www.tutorialspoint.com/php/php_get_post.htm http://www.w3schools.com/php/php_if_else.asp 2015 Coder s Academy för Medieinstitutet, sida 5/17
Dag 6: Att låta PHP spara formulär-data till DB Vecka: 46 Datum: 2015-11-10 Veckodag: tisdag Tid: 13.00-17.00 Peter Ta emot POST-data från ett formulär med PHP och spara till en databas (INSERT). Populera ett formulär från PHP (SELECT). Spara ändringar från ett formulär med PHP (UPDATE, DELETE). Se ovan. (Praktisk orienterad föreläsning.) http://php.net/manual/en/book.pdo.php http://www.tutorialspoint.com/php/php_get_post.htm http://webdevelopingcat.com/php-mysql-tutorial-for-beginners-inserting-rows-withpdo/ 2015 Coder s Academy för Medieinstitutet, sida 6/17
Dag 7: Normalformer och mer om joins Vecka: 46 Datum: 2015-11-11 Veckodag: onsdag Tid: 09.00-12.00, 13.00-16.00 Hugo INNER JOIN (repetition). LEFT [OUTER] JOIN och RIGHT [OUTER] JOIN (repetition). FULL [OUTER] JOIN och CROSS JOIN syntax, varför och hur används dessa? NATURAL JOIN (undvik normalt sett, varför?) JOINS över fler än två tabeller. Vad innebär första, andra och tredje normalform (1N, 2N, 3N)? Fler operatorer: IS NOT NULL, >, <, >=, <=, LIKE, IN ALTER TABLE för att lägga till kolumner Skapa en mellantabell för att lösa problemet att flera personer kan på flera adresser. En person kan även bo på flera adresser. (Dvs. ett många-till-många-förhållande.) Vad ska den innehålla för kolumner? (Ändra om i övriga tabeller.) Hade vi behövt en mellantabell om man bara fick vara skriven/bo på en adress? Om inte? Hur hade vi löst detta ett-till-många (1:n)-förhållande) Är dina tabeller nu i normalform? Vilken normalform? (Uppnå minst 2N.) Hitta personer som bor på en adress som innehåller gatan. Hitta personer som bor på en adress som innehåller vägen. (Om du inte har sådana gatunamn ändra så att du har det...) Samma som igår, bl.a http://blog.codinghorror.com/a-visual-explanation-of-sql-joins/ http://www.sitepoint.com/understanding-sql-joins-mysql-database/ Samt: http://www.databasteknik.se/webbkursen/normalisering/ http://www.w3schools.com/sql/sql_foreignkey.asp 2015 Coder s Academy för Medieinstitutet, sida 7/17
Dag 8: Gruppering (GROUP BY) och funktioner Vecka: 46 Datum: 2015-11-12 Veckodag: torsdag Tid: 13.00-17.00 Peter Några enkla funktioner: COUNT, SUM, AVG, MAX, MIN. GROUP BY - syntax. Att använda COUNT, SUM, AVG, MAX och MIN som aggregeringsfunktioner (aggregate functions) med GROUP BY. Att använda HAVING (syntax, tillsammans med GROUP BY). Lägg till ålder och kön för alla personer/kunder. Vad är folks genomsnittliga ålder? Hur många kvinnor och hur många män finns? Hur många personer bor på en viss adress? Hitta den äldsta personen på varje adress. Hitta den yngsta personen på varje adress. Hitta en genomsnittlig ålder per adress. http://www.w3schools.com/sql/sql_groupby.asp https://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html http://www.w3schools.com/sql/sql_having.asp 2015 Coder s Academy för Medieinstitutet, sida 8/17
Dag 9: Underfrågor, sub-queries Vecka: 47 Datum: 2015-11-16 Veckodag: måndag Tid: 13.00-17.00 Hugo Olika typer av sub-queries (IN, FROM, EXISTS, NOT EXISTS). När används helst sub-queries, när används helst joins? EXPLAIN för att analysera databasfrågor. Lista alla adresser en person bor på med hjälp av en sub-query. Lista alla adresser en person inte bor på med hjälp av en sub-query Välj först ut alla män. Använd denna fråga som en sub-query. Välj ut alla personer under 30 från alla män. När är sub-queries befogade? Finns det bättre exempel? http://dev.mysql.com/doc/refman/5.7/en/subqueries.html http://www.tutorialspoint.com/sql/sql-sub-queries.htm http://www.toadworld.com/platforms/mysql/w/wiki/6352.introduction-to-subqueries 2015 Coder s Academy för Medieinstitutet, sida 9/17
Dag 10: Att slå samman tabeller till sets Vecka: 47 Datum: 2015-11-17 Veckodag: tisdag Tid: 13.00-17.00 Thomas Slå samman tabeller (eller tabellurval) med UNION, UNION ALL. INTERSECT och EXCEPT/MINUS - anvädnning av, samt varför finns de inte i MySQL? Alernativ syntax som motsvarar INTERSECT och EXCEPT i MySQL. SELECT DISTINCT Folk vill inte bara byta bostäder. De vill även kunna köpa? Skapa en ny tabell med bostäder till salu (deras adresser). Pris ska finnas med för bostäder till salu. Kan du slå ihop med adresstabellen med tabellen med bostäder till salu med en UNION eller UNION ALL. Hur undviker man dubletter? http://www.w3schools.com/sql/sql_distinct.asp https://en.wikipedia.org/wiki/set_operations_(sql) http://www.bitbybit.dk/carsten/blog/?p=71 2015 Coder s Academy för Medieinstitutet, sida 10/17
Dag 11: Snabba upp SQL med indexering Vecka: 47 Datum: 2015-11-18 Veckodag: onsdag Tid: 09.00-12.00, 13.00-16.00 Peter Repetition JOINS. Repetition sub-selects. Repetition normalformer och varför de är viktiga. Skapa index för tabeller - varför och hur. Hur index kan göra väldigt stor skillnad för hastighet. Överindexering, diskussion: Index tar plats och tid... EXPLAIN före och efter indexering. Vi ska utveckla databasen så att den utgör underlag för en webbapplikation där man kan byta bostäder. Hur ska vi uttrycka detta? Behövs fler tabeller? Vi vill kunna säga jag vill byta min bostad och vilka jag kan tänka mig att byta till (för varje person). Behöver vi indexera några foreign keys eller andra fält/kolumner för att snabba upp databasen (om den hade innehållet många poster)? https://dev.mysql.com/doc/refman/5.5/en/optimization-indexes.html https://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html http://www.tutorialspoint.com/mysql/mysql-indexes.htm https://www.dreamhost.com/blog/1713/08/27/mysql-indexing-basics/ 2015 Coder s Academy för Medieinstitutet, sida 11/17
Dag 12: Vyer, ett sätt att spara komplexa frågor Vecka: 47 Datum: 2015-11-19 Veckodag: torsdag Tid: 13.00-17.00 Thomas Skapa vyer av olika frågor (bl.a. JOIN:s, GROUP BY:s och UNION:s). Skapa vyer baserade på andra vyer. Hur snabba/långsamma är vyer? Prestandaöverväganden. Skapa en vy som ger oss alla som saknar bostad. Skapa vyer som visar alla som vill byta bostad. Skapa en vy från vyn över alla som saknar bostad, med bara de kvinnor som saknar bostad. http://dev.mysql.com/doc/refman/5.7/en/create-view.html http://www.mysqltutorial.org/create-sql-views-mysql.aspx http://www.w3schools.com/sql/sql_view.asp 2015 Coder s Academy för Medieinstitutet, sida 12/17
Dag 13: Stored procedures och variabler Vecka: 48 Datum: 2015-11-23 Veckodag: måndag Tid: 13.00-17.00 Hugo Vad är en stored procedure? ( Programmering i SQL). Vad är en variabel? Hur kan variabler användas i en stored procedure? Stored procedures vs. vyer när är det bäst att använda vilket? Skapa en stored procedure som ger en sammanfattning av olika saker - såsom genomsnittliga bostadspriser, antal lediga bostäder till salu, samt antal lediga bostäder för inbyte, hur många kvinnor som finns bland våra kunder och hur många män. https://dev.mysql.com/doc/connector-net/en/connector-net-tutorials-stored-procedures.html https://dev.mysql.com/doc/refman/5.0/en/user-variables.html http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx http://code.tutsplus.com/articles/an-introduction-to-stored-procedures-in-mysql-5-- net-17843 2015 Coder s Academy för Medieinstitutet, sida 13/17
Dag 14: CRUD i repris, RESTful services Vecka: 48 Datum: 2015-11-24 Veckodag: tisdag Tid: 13.00-17.00 Thomas CRUD-repetition POST, GET, PUT och DELETE motsvarar INSERT, SELECT, UPDATE, DELETE. Innebär decoupling av backend och frontend, varför skrivs webbapplikationer. alltmer på detta vis? Fördelar? Vad är JSON? Jämförelse med PHP:s associativa arrayer. Kommandona json_encode och json_decode i PHP. Ett färdigt REST-bibliotek för PHP, pröva att använda. Att använda verktyget Advanced REST-client. Använd Advanced REST-client för att via vår REST-ful service läsa av, skapa, ändra och radera i tabeller. https://sv.wikipedia.org/wiki/representational_state_transfer http://www.infoq.com/articles/rest-introduction https://chrome.google.com/webstore/search/advanced%20rest%20client 2015 Coder s Academy för Medieinstitutet, sida 14/17
Dag 15: Halvdag mer om REST + halvdag övningstenta Vecka: 48 Datum: 2015-11-25 Veckodag: onsdag Tid: 09.00-12.00, 13.00-16.00 Hugo (halvdag), Peter (halvdag) Förmiddag: HTML - populera och skicka data från formulär via en RESTful service. (Användning av färdigt JS-bibliotek för detta.) Kan Drupal och WordPress användas med REST? Fördelar, nackdelar? Eftermiddag: Övningstenta inför tentan på fredag. Koppla ihop ett HTML-formulär med en REST-ful service med hjälp av ett färdigt JavaScript-bibliotek. Vad händer? Kan man undvika sidomladdningar genom att arbeta så här? Går det snabbare/långsammare? Om man jobbar i team? Finns det fördelar med decoupling/rest då? Vilka? http://wp-api.org/ http://pingv.com/blog/an-introduction-drupal-7-restful-services http://wptavern.com/decoupling-wordpress http://buytaert.net/the-future-of-decoupled-drupal 2015 Coder s Academy för Medieinstitutet, sida 15/17
Dag 16: Orientering - databasstrukturer i WordPress och Drupal Vecka: 48 Datum: 2015-11-26 Veckodag: torsdag Tid: 13.00-17.00 Thomas Hur ser WordPress-databaser ut? Varför? Struktur? Tankar bakom? Hur ser Drupals-databaser ut? Varför? Struktur? Tankar bakom? Varför är ett fält i Drupal en hel tabell? Varför kan plugins (WordPress) och moduler (Drupal) leda till fler taballer? Finns det andra saker än plugins och moduler som skapar fler tabeller? (Innehållstyper etc.) Sista en-två timmarna: Frågestund inför tentan. Inga övningar. Detta är mer av en kort orientering kring databaser och WCMS:er (WordPress och Drupal). Förbered dock frågor inför frågestunden. https://codex.wordpress.org/database_description https://www.drupal.org/node/1785994 (Drupal Database Schema) http://posulliv.github.io/1712/08/02/drupal-er-diagram/ 2015 Coder s Academy för Medieinstitutet, sida 16/17
Dag 17: Salstentamen på delkursen Vecka: 48 Datum: 2015-11-27 Veckodag: fredag Tid: 13.00-16.00 Tentamen på delkursen. 2015 Coder s Academy för Medieinstitutet, sida 17/17