270 likes | 478 Views
Workshop PHP. Een productencatalogus Met database. Relationele database. Gegevens gestructureerd in tabellen Tabellen bestaan uit rijen (records) en kolommen (velden) Tabellen kunnen onderling relaties hebben, op basis van sleutelgegevens Sleutels kunnen primair zijn of referentieel
E N D
Workshop PHP Een productencatalogus Met database
Relationele database • Gegevens gestructureerd in tabellen • Tabellen bestaan uit rijen (records) en kolommen (velden) • Tabellen kunnen onderling relaties hebben, op basis van sleutelgegevens • Sleutels kunnen primair zijn of referentieel • Primaire sleutels maken elk record uniek in de hele tabel • Geschikte primaire sleutel in bijvoorbeeld EAN
Typische productentabel • Een typisch voorbeeld van een productentabel is: • Veld Type Null? • EAN bigint(13) not null • Naam varchar(255) not null • Prijs float not null • Omschr. Text not null • Details Mediumtext
Database systemen • MySQL (zeer vaak i.c.m. PHP) • Access • PostgreSQL • MS SQL Server
SQL • Universele taal om: • Database te creëren • Tabellen te creëren • Gegevens in te voeren in tabellen • Gegevens te muteren in tabellen • Gegevens te verwijderen uit tabellen • Gegevens op te vragen uit tabellen
SQL (2) • Elk database systeem maakt gebruik van SQL code • Vaak GUI om SQL te genereren • Basis statements SQL: • CREATE tabel aanmaken • INSERT records toevoegen in tabel • SELECT records selecteren uit tabel • UPDATE records bijwerken in tabel • DELETE records verwijderen uit tabel
CREATE statement • CREATE TABLE naam-tabel ( • veld1veldtype1veldspec1, • veld2veldtype2veldspec2, • …. • veldnveldtypenveldspecn, • PRIMARY KEY (veldx), • );
CREATE statement – voorbeeld • CREATE TABLE `producten` ( • `ean` BIGINT(13) NOT NULL, • `naam` VARCHAR(255) NOT NULL, • `prijs` FLOAT NOT NULL, • `omschrijving` TEXT NOT NULL, • `details` MEDIUMTEXT, • PRIMARY KEY (`ean`), • INDEX (`naam`, `prijs`), • );
SELECT statement • SELECT veld1, veld2, …, veldn • FROM tabel1, tabel2, …, tabeln • WHERE conditie • ORDER BY veldx
SELECT statement – voorbeeld • SELECT ‘ean’, ‘naam’, ‘prijs’ • FROM ‘producten’ • WHERE ‘ean’ > 9789045638379 • ORDER BY ‘prijs’ DESC;
Database gebruiken in PHP • Verbinding maken met databaseserver: • Server • Gebruiker • Wachtwoord • Selecteer database • Query(‘s) uitvoeren • Records verwerken • Verbinding verbreken
Verbinding maken met databaseserver • $verbinding = mysql_connect(“localhost”, “root”, “”) or die(mysql_error());
Selecteren database • mysql_select_db("test") or die(mysql_error());
Query samenstellen • $resultaat = mysql_query("SELECT * FROM `producten`") or die(mysql_error());
Geselecteerde records verwerken while ($rij = mysql_fetch_assoc($resultaat)) { … echo $rij["omschrijving"]; … }
Verbinding met databaseserver verbreken • mysql_free_result($resultaat); • mysql_close($verbinding); Let op! • Open connectie zo laat mogelijk • Sluit connectie zo vroeg mogelijk
Structuur typische webwinkel • Tabellen: • Klanten(klantid, wachtwoord, NAW) • Producten(ean, naam, prijs, omschrijving) • Orders(ordernr, klantid, datum, status) • Orderregels(ordernummer, ean, aantal)
KLANTEN ORDERS PRODUCTEN ORDERREGELS Datamodel webwinkel
Functies van webwinkel • PHP scripts/functies maken voor: • Account aanmaken/registreren als klant • Tonen productenoverzicht • Tonen product detailgegevens • Toevoegen product aan winkelwagen • Tonen inhoud winkelwagen • Verwijderen product uit winkelwagen • Afrekenen
Pseudocode Account • Formulier lezen en controleren • Als geen fouten in formulier: • Databaseverbinding openen • Controleer of gebruiker bestaat • Als gebruiker nog niet bestaat • Voeg nieuwe account toe in tabel • Anders • Geef foutmelding • Databaseverbinding sluiten • Anders: • Stuur formulier uit op scherm • Ga naar Stap 1
Pseudocode Winkelwagen (1) • Check ordernummer (session-id) • Als bestaat • Lees ordernummer uit sid (session-id) • Anders • Genereer nieuw ordernummer (random) • Open databaseverbinding • Voeg record toe aan tabel Orders • Sluit databaseverbinding (z.o.z.)
Pseudocode Winkelwagen (2) • Als actie = Toevoegen (via GET) • Als product bestaat (komt via URL) • Open databaseverbinding • Als Orderregel bestaat • Hoog aantal op met 1 in Orderregel • Anders • Maak nieuwe Orderregel met aantal 1 • Sluit databaseverbinding (z.o.z.)
Pseudocode Winkelwagen (3) • Als actie = Verwijderen (via GET) • Als product bestaat • Als order bestaat • Open databaseverbinding • Verwijder Orderregel voor deze order (z.o.z.)
Pseudocode Winkelwagen (4) • Inhoud winkelwagen weergeven • ….
Pseudocode Winkelwagen (5) • Afrekenen • ….