In het headgedeelte staat een verwijzing naar het JavaScriptbestand en naar het CSSbestand. Het tekstveld getal wordt omsloten door de span-tag sprytextfield1. Achter het tekstveld komen de verschillende foutboodschappen. Elke foutboodschap wordt opnieuw omsloten door een span-tag. De bijbehorende class bevat de CSS-eigenschappen die we dadelijk gaan aanpassen. Net voor het sluiten van de body-tag, wordt het id van de eerste span-tag aan het JavaScript gekoppeld. U kan de CSS-eigenschappen van het tekstveld en van de verschillende toestanden rechtstreeks vanuit het CSS Styles palet aanpassen. De namen van de classes spreken meestal voor zich. Indien u het CSS-bestand opent in Dreamweaver, krijgt u wat extra informatie over de verschillende classes.
100 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Open SpryValidationTextField.css.
» Sluit SpryValidationTextField.css. » Pas eventueel wat eigenschappen aan vanuit het CSS Styles palet. » Open opdracht1.php opnieuw in een browser en test het resultaat.
! Vergeet de map SpryAssets niet naar de productieserver te kopiëren.
Meer informatie over de verschillende validatiewidgets vindt u op http://labs.adobe.com/technologies/spry/ (laatste release) of onder menu:Help:Spry Framework Help. ! Hou er wel rekening mee dat de laatste release waarschijnlijk extra mogelijkheden biedt dan versie 1.6.1, de versie die in Dreamweaver geïntegreerd is.
Indien u de pagina voor de eerste maal raadpleegt, verschijnt de tekst Tellen van 1 tot. Deze tekst is op dit moment niet relevant. Er is momenteel nog geen getal doorgestuurd.
U kan deze tekst verbergen door een if-instructie aan de pagina toe te voegen.
Indien $_GET['getal'] een waarde bevat, wordt de tekst zichtbaar en wordt het bijbehorend script uitgevoerd (dit komt binnen het if-blok). Indien $_GET['getal'] geen waarde bevat, wordt de tekst niet zichtbaar en het script hoeft ook niet uitgevoerd te worden.
7: Formulieren en superglobals - 101
» Plaats de cursor voor de zin Tellen van 1 tot en klik op het if-object (Insert palet, rubriek PHP). » Vervolledig het script:
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Sleep de PHP-code net voor de h1-tag. » Plaats de cursor voor de hr-tag. » Plaats hier een nieuw code-blok en sluit het if-blok af.
» Bewaar de pagina en test het resultaat.
! De If-functie wordt uitgevoerd indien de voorwaarde true (waar) is. In de code die u zonet hebt toegevoegd, staat blijkbaar nergens een vergelijking, enkel een verwijzing naar $_GET. $_GET is true indien het formulier verzonden wordt. Nog één aanpassing en de oefening is klaar. Telkens u een nieuwe waarde ingeeft en verzendt, wordt het invulveld getal opnieuw leeg gemaakt. U gaat de pagina zodanig aanpassen dat de vorige waarde terug in het tekstveld verschijnt. U maakt hiervoor gebruik van de Initial Value van het tekstveld. In deze toepassing is dit geen vaste waarde, maar een dynamische waarde die afkomstig is van $_GET['getal'].
102 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Selecteer het tekstveld getal. » Klik vanuit het Properties palet op het Bind to Dynamic Source-icoon ( ) dat achter Init val staat. » Selecteer URL getal en klik op OK.
Dit is het resultaat:
T U kan $_GET['getal'] natuurlijk ook manueel intypen of via de Bindknop, onderaan het Bindings palet, aan de Initial Value toekennen. Het kan zelfs nog makkelijker. Sleep URL getal vanuit het Bindings palet naar het tekstveld op de pagina. » Bewaar de pagina en test het resultaat.
» Bewaar en sluit de pagina.
7: Formulieren en superglobals - 103
7.5 $_POST. Met $_POST kan u alle informatie uit een formulier, dat verzonden wordt via POST, ophalen.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Open formulieren/post_1.html.
Deze pagina bevat een formulier met één tekstveld (naam). De inhoud van dit formulier wordt via de POST-methode verzonden naar post_2.php. » Open formulieren/post_2.php.
De inhoud van de variabele naam wordt via $_POST['naam'] opgevraagd en vervolgens op de pagina getoond. » Bekijk het resultaat. » Sluit de pagina. 7.5.1 Opdracht 2.
In deze toepassing gaat u beide pagina's uit voorgaand voorbeeld combineren tot één pagina. Het statisch gedeelte van de pagina is reeds klaar. » Open formulieren/opdracht2.php. » Kies Form Variable uit het Bindings palet. » Geef als Name naam in. 104 - Dreamweaver CS5 - PHP5
» » » »
Sluit de Query Builder. Maak een Dynamic Table aan. Bewaar de pagina en test het resultaat. Sluit de pagina.
11.9 Een recordset filteren op één criterium (WHERE).
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
Indien u een zoekfunctie op uw site integreert, gaat u niet alle records opvragen, maar enkel de records die aan een bepaald criterium voldoen. Op de query wordt een filter toegepast. Eerst gaat u op een vaste waarde filteren. Hiervoor gebruikt u de WHERE-instructie. In de volgende oefening gaat u een dynamisch filter toevoegen. De gebruiker geeft een zoekterm in via een formulier. De recordset wordt vervolgens gefilterd op de waarde van deze zoekterm. U kan volgende voorwaardes in een filter integreren:
Gelijk aan Groter dan Kleiner dan Groter of gelijk aan Kleiner of gelijk aan Niet gelijk aan bevat
SQL = > < >= <= <> LIKE
Dreamweaver (in Simple mode) = > < >= <= <> Contains, begins with of ends with
11.9.1 SQL-instructie.
SELECT kolom1, kolom2, ... FROM tabel WHERE voorwaarde
Selecteer titel, omschrijving en prijs uit de tabel tbl_boeken. De titel moet de letters dream bevatten. SELECT titel, omschrijving, prijs FROM tbl_boeken WHERE titel LIKE %dream%
T Het %-teken voor en achter dream geeft aan dat zowel voor als na dream nog andere letters of woorden mogen voorkomen. (% stelt het jokerteken binnen MySQL voor.)
11: Inleiding tot SQL - 201
Moet het woord beginnen met dream, dan schrijft u: SELECT titel, omschrijving, prijs FROM tbl_boeken WHERE titel LIKE dream%
Moet het woord eindigen op dream, dan schrijft u:
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
SELECT titel, omschrijving, prijs FROM tbl_boeken WHERE titel LIKE %dream
11.9.2 In Dreamweaver.
» » » »
Open sql/filter1.php. Maak in Simple mode een nieuwe recordset rsBoeken aan. Selecteer titel, omschrijving en prijs. Ga na of Titel de letters dream bevat.
» Sluit de Query Builder. » Maak een Dynamic Table. » Bewaar de pagina en test het resultaat.
Experimenteer met verschillende zoektermen. » Sluit de pagina.
202 - Dreamweaver CS5 - PHP5
11.10 Een recordset filteren via een zoekopdracht. » Open sql/zoekTitel.php.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
Op de pagina staat reeds een formulier. Het formulier bevat één tekstveld (zoekTerm) en wordt via GET verstuurd naar de pagina zelf (Action is leeg).
Het filter dat u in de recordset gaat inbouwen, test of de waarde die de gebruiker invult, voorkomt in titel. Het formulier wordt verzonden via GET, vandaar dat u filtert op $_GET['zoekTerm']. In de Recordset Builder wordt $_GET voorgesteld als URL Parameter.
» » » »
Maak, in Simple mode, een nieuwe recordset rsBoeken aan. Selecteer isbn, titel en prijs. Filter titel op URL parameter contains zoekTerm. Vervolledig het filter.
11: Inleiding tot SQL - 203
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Ga naar Advanced mode.
Merk op dat Dreamweaver in de query een variabele (colname) gebruikt. Deze variabele kan twee toestanden aannemen.
• Run-time value: gebruikt de waarde die door de gebruiker wordt ingegeven in het tekstveld zoekTerm.
• Default value: wordt de pagina voor de eerste maal geopend, dan ontbreekt $_GET['zoekTerm']. Op dat moment wordt de Default value gebruikt als waarde voor de variabele colname. Standaard krijgt deze de waarde -1. Indien u de pagina de eerste keer opent, gaat de query alle titels ophalen waar een -1 in voorkomt. Wenst u dadelijk alle opleidingen te tonen, vervang de Default value dan door "%". Wenst u geen opleidingen te tonen, vervang de Default value dan door een waarde die zeker in geen enkele titel voorkomt, bijvoorbeeld xxxxxx.
» » » »
Klik op Edit en vervang de Default value door %. Sluit de Query Builder. Plaats onder de form-tag een Dynamic Table die alle records toont, onder het formulier. Bewaar de pagina en test de zoekfunctie in een browser.
204 - Dreamweaver CS5 - PHP5
Meestal wordt de laatste zoekterm opnieuw in het tekstveld getoond.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Voeg, vanuit het Bindings palet, de URL Variable zoekTerm toe.
» Sleep de variabele zoekTerm vanuit het Bindings palet op het tekstveld.
» Bewaar de pagina en test de zoekfunctie opnieuw in een browser.
11.11 Een recordset filteren op meerdere criteria.
In deze toepassing gaat u na of de zoekterm in de titel of in het ISBN-nummer van een boek voorkomt. » Open de recordset rsBoeken in Advanced mode. » Vervang: WHERE titel LIKE %colname%
door:
WHERE titel LIKE %colname% OR isbn LIKE %varISBN%
11: Inleiding tot SQL - 205
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Voeg een nieuwe parameter varISBN toe. (Klik op het plusicoon.) Name: varISBN Type: Text Default value: % Value: $_GET['zoekTerm']
» Sluit de recordset. » Bewaar de pagina en test het resultaat in een browser.
T Met OR (of-functie) geeft u aan dat één van de voorwaardes waar moet zijn. Met AND (en-functie) moet aan alle voorwaardes voldaan zijn.
» Sluit de pagina.
206 - Dreamweaver CS5 - PHP5
11.12 Gegevens aan de database toevoegen (INSERT). Met de INSERT-instructie kan u gegevens aan de database toevoegen. 11.12.1 SQL-instructie.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
INSERT INTO tabel (kolom1,kolom2,...) VALUES (waarde1 ,waarde2,...)
Voeg een nieuwe auteur aan tbl_auteurs toe. INSERT INTO tbl_auteurs (naam,email) VALUES ('demo','[email protected]')
! Merk op dat u geen waarde aan auteurID toekent. Het ID wordt automatisch door MySQL aangemaakt. 11.12.2 In Dreamweaver.
In Dreamweaver gaat u maar zelden op bovenstaande manier gegevens aan een database toevoegen. Meestal maakt u gebruik van een formulier. De waardes die u in het formulier ingeeft, worden aan de tabel toegevoegd. » Open sql/insert.php. » Sleep het Record Insertion Form Wizard-object ( ) vanuit het Insert palet (rubriek Data) naar de pagina. » Maak een koppeling met tbl_auteurs. Alle kolommen uit de tabel verschijnen onder Form fields in de lijst. » Wis auteurID uit de lijst. » Zodra de gegevens aan de database zijn toegevoegd, gaat u automatisch terug naar insert.php.
11: Inleiding tot SQL - 207
Om na te gaan of de gegevens daadwerkelijk aan de database zijn toegevoegd, gaat u onderaan de pagina een overzicht van alle auteurs tonen.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Voeg onder de titel Toon alle auteurs een Dynamic Table toe. » Klik op Create a Recordset.
» Maak een nieuwe recordset die alle gegevens over alle auteurs bevat. Sorteer op naam.
» Toon vervolgens alle records uit de recordset die u zonet hebt aangemaakt.
208 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP » Bewaar de pagina en test het resultaat in een browser.
11.13 Gegevens aanpassen (UPDATE).
Om gegevens aan te passen en ook om gegevens te wissen, gebruikt u altijd twee pagina's. Op de eerste pagina toont u een overzicht van alle records. Per record voorziet u een link naar de pagina waar u de gegevens gaat aanpassen/wissen. Met de link stuurt u eveneens het ID mee van het record dat u gaat aanpassen/wissen. Deze ID wordt meestal via de URL meegestuurd. In deze toepassing gaat u eerst de gegevens van een auteur aanpassen. 11.13.1 SQL-instructie.
UPDATE tabel SET (kolom1=waarde1 ,kolom2=waarde2,...) WHERE voorwaarde
Pas de naam en het mailadres van auteurID = 1 aan: UPDATE tbl_auteurs SET (naam='demo',email='[email protected]') WHERE auteurID = 1
! Merk op dat u auteurID niet kan aanpassen.
11: Inleiding tot SQL - 209
11.13.2 In Dreamweaver.
De overzichtspagina hebt u reeds aangemaakt op insert.php. U moet enkel nog de links toevoegen naar pagina's waar u de gegevens gaat aanpassen/wissen.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Plaats, op de pagina insert.php, de cursor achter het woord email. » Voeg achteraan de tabel een nieuwe kolom toe. Klik rechts (snelmenu) in de cel en kies Table:Insert Rows or Columns.
» Maak de tabel iets breder. » Typ in de nieuwe cel de woorden Bewerk - Wis. Let op dat u de tekst in de juiste cel typt.
» Selecteer het woord Bewerk. » Voeg de Server Behavior Go To Detail Page toe. » Blader naar update.php en stuur auteurID als parameter mee.
» Selecteer het woord Wis. » Voeg opnieuw de Server Behavior Go To Detail Page toe. » Blader naar delete.php en stuur ook nu auteurID als parameter mee.
210 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP » Bewaar en sluit de pagina. » Open sql/update.php. » Sleep het Record Update Form Wizard-object ( Data) naar de pagina. » Klik op Create a Recordset. » Maak een nieuwe recordset rsAuteur. Filter op URL Parameter = auteurID.
) vanuit het Insert palet (rubriek
» Klik op OK. » Maak vervolgens een koppeling met tbl_auteurs. Alle kolommen uit de tabel verschijnen als Form Fields in de lijst. » Wis auteurID uit de lijst. » Zodra de gegevens zijn aangepast, gaat u automatisch terug naar insert.php.
11: Inleiding tot SQL - 211
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP » Sluit het dialoogvenster en bewaar de pagina. » Test de updatepagina.
! Om de updatepagina te testen opent u insert.php in een browser.
11.14 Gegevens uit de database verwijderen (DELETE). Met de DELETE-instructie kan u een record uit de tabel wissen. 11.14.1 SQL-instructie. DELETE FROM tabel WHERE voorwaarde
Wis de auteur met auteurID = 7 uit de database: DELETE FROM tbl_auteurs WHERE auteurID = 7
11.14.2 In Dreamweaver.
Net zoals bij een updatepagina gaat u eerst alle auteurs tonen en per auteur een link voorzien naar de deletepagina. Samen met de link wordt auteurID als parameter meegestuurd. De deletelink (Wis) hebt u reeds op insert.php aangemaakt. Op insert.php geeft u al aan welke auteur u wenst te wissen. Op delete.php wordt er helemaal geen interactie meer verwacht van de gebruiker. Het auteurID is reeds gekend, waardoor de wisoperatie dadelijk kan uitgevoerd worden. Voor de updatepagina in voorgaande toepassing is wel een interactie nodig van de gebruiker. De gebruiker moet immers eerst een nieuwe naam of een nieuw mailadres ingeven voordat de update wordt uitgevoerd.
212 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Open sql/delete.php. » Voeg het Server Behaviors Delete Record toe. » Vervolledig als volgt: (Laat After deleting, go to: leeg.)
» Klik op OK. » Bewaar de pagina.
! Wis geen auteurs die reeds op voorhand in de database aanwezig waren, maar wis enkel auteurs die u zelf hebt aangemaakt. Er bestaat een referentiële integriteit tussen tbl_auteurs en tbl_boeken. Indien u een auteur wist, worden automatisch ook alle boeken van deze auteur gewist. Alle auteurs die reeds in de database aanwezig waren, zijn allemaal verbonden met één of meerdere boeken. Om de updatepagina te testen opent u insert.php in een browser. » Test de deletepagina.
T Zodra een auteur uit de tabel gewist wordt, moet u de link op delete.php volgen om terug op de overzichtspagina terecht te komen. U kan eventueel After deleting, go to: insert.php invullen, waardoor u automatisch op de overzichtspagina terecht komt.
11.15 Gegevens uit twee tabellen samenvoegen (JOIN).
In een goed database-ontwerp zijn alle tabellen zodanig geoptimaliseerd dat gegevens over meerdere tabellen worden opgesplitst. Ook in onze database is dit zo. De tabellen tbl_auteurs en tbl_boeken horen bij elkaar. Zo bevat tbl_boeken alle informatie over een bepaald boek, maar over de auteur is enkel het auteurID beschikbaar. AuteurID is niet meer dan een getal dat voor de gebruiker totaal niets zegt over wie er achter dat ID schuilgaat. Op een pagina waar u alle informatie over één boek toont, gaat u dus nooit het auteurID tonen, maar wel de naam en het mailadres van de auteur in kwestie. U gaat dus beide tabellen via een query samenvoegen (JOIN) tot één virtuele tabel. 11: Inleiding tot SQL - 213
Er bestaan verschillende soorten joins. Meestal gaat het om een INNER JOIN. Hierbij worden records uit twee of meer tabellen samengevoegd op basis van gelijke waarden tussen één of meerdere velden in deze tabellen. 11.15.1 SQL-instructie.
U kan een INNER JOIN op verschillende manieren opbouwen. De meest gebruikte en makkelijkst te begrijpen instructie is:
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
SELECT * FROM tabel1, tabel2 WHERE tabel1.kolomX = tabel2.kolomY
Volgende instructie geeft hetzelfde resultaat, maar is iets moeilijker te begrijpen. SELECT * FROM tabel1 INNER JOIN tabel2 ON tabel1.kolomX = tabel2.kolomY
Maak een recordset die de titel van een boek bevat, samen met de naam en het mailadres van de auteur. SELECT tbl_boeken.titel, tbl_auteurs.naam, tbl_auteurs.email FROM tbl_boeken, tbl_auteurs WHERE tbl_boeken.auteurID = tbl_auteurs.auteurID
T Indien een kolomnaam niet in beide tabellen voorkomt, mag u de tabelnaam weglaten. Volgende instructie is dus ook geldig: SELECT titel, naam, email FROM tbl_boeken, tbl_auteurs WHERE tbl_boeken.auteurID = tbl_auteurs.auteurID
11.15.2 In Dreamweaver.
Gegevens uit meerdere tabellen samenvoegen, kan u enkel in Advanced mode.
» Open sql/join.php. » Maak een nieuwe recordset (rsBoeken) met volgende instellingen:
214 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP » Bewaar de recordset. » Maak een Dynamic Table. » Bewaar de pagina en test het resultaat.
11.15.3 Views in MySQL5.
De query voor deze toepassing is relatief eenvoudig. Voor complexe query's biedt Dreamweaver u weinig of geen hulpmiddelen. U zal een groot gedeelte van de query manueel moeten intypen. In MySQL5 of hoger kan u eveneens query's (views) bewaren. Een view is niet meer dan een virtuele tabel, gebaseerd op een SELECT statement. U gaat nu de query uit het voorbeeld bewaren in MySQL en vervolgens gebruiken binnen Dreamweaver.
11: Inleiding tot SQL - 215
» Open phpMyAdmin. » Selecteer de database boekengids en klik op het tabblad SQL. » Voer onderstaand script uit: CREATE OR REPLACE VIEW view_auteur_boek AS SELECT titel, naam, email FROM tbl_boeken, tbl_auteurs WHERE tbl_boeken.auteurID = tbl_auteurs.auteurID
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
U kan hiervoor het script dat we net in Dreamweaver hebben aangemaakt kopiëren en verder aanvullen.
» Klik op Start om het script uit te voeren. » Selecteer view_auteur_boek en klik op het tabblad Verkennen om het resultaat van de query te bekijken.
216 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP 11.15.4 In Dreamweaver.
In Dreamweaver kan u de views die u in MySQL hebt aangemaakt, rechtstreeks gebruiken vanuit Simple mode. » Selecteer alle Server Behaviors en klik op het minteken.
Alle Server behaviors worden gewist, maar er blijft nog wel een lege tabel op de pagina staan. » Wis de tabel die op de pagina is achtergebleven. » Maak een nieuwe recordset aan. » Selecteer als tabel view_auteur_boek.
11: Inleiding tot SQL - 217
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP » » » »
Bewaar de recordset. Maak een Dynamic Table. Bewaar en sluit de pagina. Test het resultaat in een browser.
T Bepaalde GUI's voor MySQL, zoals Navicat en MySQL Turbo Manager, zijn in staat om volledig visueel views te creëren. In phpMyAdmin moet u het SQL statement zelf intypen.
218 - Dreamweaver CS5 - PHP5
! Het overbrengen van lokale views naar de productieserver is niet evident. Vaak hebt u op de productieserver onvoldoende rechten om via een SQL-dump de views rechtstreeks te importeren en zal u de views dus manueel opnieuw moeten aanmaken. Omwille van deze beperking gaan we verder in de cursus geen views meer gebruiken.
11.16 Besluit.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
In dit hoofdstuk werden enkele basis SQL-instructies besproken die u regelmatig gaat gebruiken tijdens de volgende hoofdstukken. Een volledig overzicht van alle SQL-instructies zou ons te ver leiden. In de bronnenlijst vindt u nog enkele interessante links die u verder op weg helpen.
11.17 Bronnen.
• MySQL kennisbronnen http://www.leren.nl/rubriek/computers_en_internet/software_ontwikkelen/databases/ mysql/ http://www.databasejournal.com/features/mysql/ • Interactieve SQL-cursus http://www.sqlcourse.com/ http://www.sqlcourse2.com/ • W3schools.com http://www.w3schools.com/sql/ • Initiatie SQL http://www.baycongroup.com/tocsql.htm http://sqlzoo.net/ http://docent.ehsal.be/vakken/infoburo/Access/SQL.html
11: Inleiding tot SQL - 219
220 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
12 Webapplicatie: boekengids. In deze toepassing gaat u de boekengids in een website integreren. De applicatie bevat twee grote blokken.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
• Het publieke gedeelte. In het publieke gedeelte van de site krijgt de gebruiker een beknopt overzicht van alle boeken die in de database aanwezig zijn. Bij elk boek hoort een link die de gebruiker naar een detailpagina brengt. Op de detailpagina verschijnt ondermeer een volledige inhoud van het desbetreffende boek. • Het administratieve gedeelte. In het administratieve gedeelte kan de beheerder auteurs en boeken aan de database toevoegen, wissen en de gegevens wijzigen. Het administratieve gedeelte wordt volledig afgeschermd met een login en een paswoord. ! Voor deze applicatie is het administratieve gedeelte vanop elke pagina toegankelijk via de loginknop , bovenaan de pagina. Dit vergemakkelijkt het testen van de site. In een "echte" webapplicatie wordt het administratieve gedeelte meestal achter een verborgen URL geplaatst. U hoeft voor dit hoofdstuk geen nieuwe site te definiëren. U werkt verder aan de website PHP_Boekengids (zie hoofdstuk 11).
Alle oefenbestanden bevinden zich in de map site_ontwerp. In de map site_klaar vindt u de afgewerkte versie van de site.
12.1 De database vernieuwen.
In voorgaande hoofdstukken hebt u met de database boekengids gewerkt. Voor deze toepassing gaat u de oude database vervangen door een nieuwe versie. De nieuwe versie bevat nog een derde tabel met daarin de logingegevens van de site. » » » »
Open phpMyAdmin in een browser. Open de database boekengids. Verwijder de view view_auteur_boek. Verwijder de tabellen tbl_boeken en tbl_auteurs (in deze volgorde!).
12: Webapplicatie: boekengids - 221
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Klik vervolgens op Import en blader naar: Les DreamweaverCS5 PHP/PHP_boekengids/database/boekengids_hst12.sql. » Klik onderaan rechts op Start om de query uit te voeren.
De database bevat nu drie tabellen. tbl_boeken en tbl_auteurs staan met elkaar in relatie via auteurID. De derde tabel, tbl_login_boekengids, bevat de login en het paswoord voor de beveiligde pagina's. Om veiligheidsredenen staan de paswoorden met een MD5-hash gecodeerd in de database.
222 - Dreamweaver CS5 - PHP5
12.2 De templates. De site bevat twee templates. De template basis.dwt.php wordt gebruikt voor de oefensite waaraan u werkt. Alle pagina's zijn reeds gekoppeld aan deze template. De tweede template, basis_klaar.dwt.php, dient als basis voor de afgewerkte versie van de site.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
12.3 Het publieke gedeelte van de website. Het publieke gedeelte van de website bevat maar twee pagina's.
• index.php. Op deze pagina wordt een kort overzicht van de boeken getoond. Verder vindt u op deze pagina een zoekfunctie. • detail.php. De gebruiker kan vanaf de defaultpagina een boek aanklikken en krijgt op deze pagina alle details over het boek te zien. 12.3.1 Overzichtspagina boeken (index.php).
» Open index.php.
U gaat de pagina stelselmatig opbouwen. Eerst worden alle boeken getoond op deze pagina. Daarna wordt de zoekfunctie uitgewerkt.
De overzichtspagina bevat volgende gegevens over een boek: de titel van het boek, de auteur, het ISBN-nummer en een aanwijzing of het boek al dan niet in stock is. Omdat ook de naam van de auteur op de pagina getoond wordt, kan u tbl_boeken niet gebruiken. Hierin staat enkel auteurID vermeld en niet de naam van de auteur. De naam halen we op via een join van tbl_boeken en tbl_auteurs. » Maak vanuit het Server Behaviors palet of vanuit het Bindings palet een nieuwe recordset rsBoeken aan. » Selecteer de kolommen boekID, isbn, titel en inStock. » Sorteer de recordset op titel.
12: Webapplicatie: boekengids - 223
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP » Ga naar Advanced mode en pas de query verder aan: selecteer naam van de tabel tbl_auteurs en maak een join tussen tbl_boeken.auteurID en tbl_auteurs.auteurID. SELECT boekID, isbn, titel, inStock, naam FROM tbl_boeken, tbl_auteurs WHERE tbl_boeken.auteurID = tbl_auteurs.auteurID ORDER BY titel ASC
» Klik op Test om het resultaat van de query te bekijken.
224 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Sleep de kolomnamen vanuit het Bindings palet naar de tweede rij binnen de tabel.
» Test de pagina in Live View.
Voorlopig wordt enkel de eerste record uit de recordset getoond.
» Verlaat Live View. » Selecteer de onderste rij van de tabel (tr-tag). » Voeg de Server Behavior Repeat Region toe. Toon alle records.
» Test de pagina opnieuw in Live View.
12: Webapplicatie: boekengids - 225
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
Indien het boek in stock is, verschijnt de waarde 1 in de tabel. Laat ons deze tekst veranderen in Ja of in Neen indien het boek niet in stock is.
» » » »
Verlaat Live View. Selecteer {rsBoeken.inStock} in de tabel. Open de pagina in Code view. Vervang:
door:
! Vergeet het dubbele =-teken niet. » Bekijk het resultaat in Live View.
226 - Dreamweaver CS5 - PHP5
Voorlopig bevat de database maar 18 boeken. Voor een uitgebreide boekenlijst laat u per pagina maar een gedeelte van de lijst zien en plaatst u onderaan de pagina een navigatiebalk.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Verlaat Live View. » Open de Server behavior Repeat Region (rsBoeken). » Zet het aantal gelijktijdig getoonde records op 5.
» Plaats de cursor onder de tabel met boeken. » Voeg het Recordset Navigatie Bar-object » Maak gebruik van tekstlinks.
(rubriek: Data) toe.
» Bewaar de pagina en test het resultaat in een browser.
! U kan de navigatie niet testen vanuit Live View, vandaar dat u de pagina opent in een browser. De standaardnavigatiebalk die Dreamweaver genereert, komt niet erg professioneel over. U gaat de standaardnavigatiebalk door een ander navigatiesysteem vervangen. t Dreamweaver heeft met zijn navigatiebalk nogal wat Server Behaviors toegevoegd. De snelste methode om deze te wissen, is door gebruik te maken van het History palet. » Open het History palet (menu:Window:History). » Sleep het pijltje tot net BOVEN de laatste handeling.
12: Webapplicatie: boekengids - 227
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Plaats de Server Behavior mediaTafel:rsNavigationBar onder de tabel.
! Het navigatiescript bevindt zich in de map mtInclude. Vergeet dit bestand niet te uploaden naar de productieserver. » Bewaar de pagina en test het resultaat in een browser.
Nu gaat u de zoekfunctie implementeren.
» Selecteer de form-tag. Laat de Action leeg en zet Method op GET.
De waarde van het tekstveld zoekTerm en keuze uit het selectiemenu inStock worden via GET aan de URL toegevoegd.
228 - Dreamweaver CS5 - PHP5
We gaan na of zoekTerm in de titel van een boek voorkomt en of het boek al dan niet in stock is. Merk op dat het keuzemenu inStock drie waarden bevat. Naast Ja en Neen kan u ook n.v.t. (niet van toepassing) kiezen. Bij n.v.t. worden alle boeken die aan zoekTerm voldoen, getoond. Onafhankelijk of de boeken wel of niet in stock zijn. U gaat de zoekfunctie in twee stappen toevoegen. Eerst gaat u testen of zoekTerm in de titel voorkomt. Daarna wordt de zoekfunctie uitgebreid met inStock.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Open de recordset rsBoeken. » Pas het filter aan en test of zoekTerm in de titel voorkomt. SELECT boekID, isbn, titel, inStock, naam FROM tbl_boeken, tbl_auteurs WHERE tbl_boeken.auteurID = tbl_auteurs.auteurID AND titel LIKE %varTitel% ORDER BY titel ASC
» Klik op het +-icoon naast Parameters en voeg de parameter varTitel toe. Gebruik als Type: Text, Default value: % en als Runtime value: $_GET['zoekTerm'].
12: Webapplicatie: boekengids - 229
De eerste maal dat men de pagina opent in een browser worden alle records getoond (Default value = %). Na het verzenden van het formulier, wordt de waarde uit het tekstveld zoekTerm als filter gebruikt (Runtime value = $_GET['zoekTerm']).
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Bewaar de recordset. » Bewaar de pagina en test de zoekfunctie.
Om na te gaan of een boek al dan niet in stock is, gaat u eerst de logica achter deze functie bestuderen. » Open de recordset rsBoeken en klik op Test.
Een boek dat in stock is, bevat de waarde 1 in inStock. Is een boek niet in stock, dan bevat deze kolom de waarde 0. » Pas de WHERE-instructie van de query als volgt aan:
WHERE tbl_boeken.auteurID = tbl_auteurs.auteurID AND titel LIKE %varTitel% AND inStock LIKE varInStock
De waarde in kolom inStock wordt vergeleken met de waarde van de variabele varInStock. » Voeg de variabele varInStock toe. De Value is afkomstig van de URL parameter inStock. De Default Value is %. Gebruik het Type Text. 230 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP Ook het keuzemenu in het formulier moet de waardes %, 1 en 0 bevatten.
» Sluit de recordset. » Bewaar de pagina en test de volledige zoekfunctie in een browser.
Na elke zoekactie moet de waarde van zoekTerm opnieuw in het tekstveld verschijnen. Ook het menu inStock moet zijn vorige toestand onthouden. Dit doet u door de waarde uit de QueryString te koppelen aan InitVal van het tekstveld zoekTerm en aan het menu inStock.
» Voeg aan het Bindings de URL Variable zoekTerm toe.
» Maak een tweede URL Variable inStock aan.
12: Webapplicatie: boekengids - 231
Sleep URL:zoekTerm vanuit het Bindings palet over het tekstveld zoekTerm. Selecteer het menu inStock op de pagina. Klik op de Dynamic-knop in het Properties palet. Maak Select value equal to gelijk aan echo $_GET['inStock'].
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» » » »
» Bewaar de pagina en test de zoekfunctie in een browser.
Indien de zoekfunctie geen resultaat oplevert, verschijnt er een lege tabel op de pagina. Enkel Neen is ingevuld. Dit is afkomstig van de functie: ($row_rsBoeken['inStock'] == 1) ? 'Ja' : 'Neen'
U gaat de pagina verder aanpassen zodat de tabel verdwijnt en er een foutboodschap in de plaats komt. » Plaats een foutboodschap onder de navigatiebalk.
232 - Dreamweaver CS5 - PHP5
» Selecteer de foutboodschap (de volledige p-tag) en voeg de Server Behavior Show Region:Show Region If Recordset Is Empty toe.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Selecteer vervolgens de ganse tabel (table-tag) en voeg de Server Behavior Show Region:Show Region If Recordset Is Not Empty toe. » Bewaar de pagina en test het resultaat in een browser.
Nu nog een link naar de detailpagina voorzien en index.php is klaar.
» Selecteer {rsBoeken.titel} in de tabel op de pagina. » Voeg de Server Behavior Go To Detail Page toe. » Blader naar detail.php en zend boekID als URL parameter mee.
» Bewaar en sluit de pagina.
12: Webapplicatie: boekengids - 233
12.3.2 Detailpagina boeken (detail.php).
» Open detail.php. Op de overzichtspagina wordt de titel van een boek gelinkt aan de detailpagina. boekID wordt als unieke waarde doorgegeven via de URL.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Maak in Simple Mode een nieuwe recordset rsDetail aan. » Toon alle kolommen uit tbl_boeken en filter op de URL parameter boekID.
» Ga naar Advanced mode en pas de query als volgt aan:
SELECT * FROM tbl_boeken, tbl_auteurs WHERE boekID = colname AND tbl_auteurs.auteurID = tbl_boeken.auteurID
» Sleep titel, omschrijving, isbn, prijs, naam, inStock en pubDatum vanuit het Bindings palet naar de juiste plaats op de pagina.
Op de naam van een auteur komt een link naar zijn mailadres.
234 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Selecteer {rsDetail.naam} en klik op Browse for File in het Properties palet. » Klik op Data Sources. » Selecteer email uit Recordset(rsDetail).
Nu hebt u enkel het mailadres gekoppeld aan de naam. Om een e-mail te kunnen verzenden, moet u het mailadres laten voorafgaan door mailto:. » Vervolledig de link in het Properties palet.
De tekst die achter In stock: verschijnt, is vergelijkbaar met deze op de overzichtspagina. » » » » »
Open index.php en kopieer de inhoud van de cel In stock:. Sluit index.php. Plak de gekopieerde code op de detailpagina. Selecteer het eerste PHP-icoon. Vervang in de PHP-code $row_rsBoeken door $row_rsDetail.
12: Webapplicatie: boekengids - 235
Vervolgens gaat u de cover van het boek op de pagina plaatsen. Om dynamische afbeeldingen weer te geven, gaat u alle afbeeldingen in één map binnen de site bewaren. Voor de meeste boeken vindt u een figuur (de cover van het boek) in de map covers. Alle boeken waarvoor geen cover beschikbaar is, maken gebruik van een dummy afbeelding. Deze dummy afbeelding is een bestand van 1x1 pixel (pixel.gif). In werkelijkheid staat op elke pagina een afbeelding. Op pagina's waar de pixel getoond wordt, zal de gebruiker hier niets van merken en is het alsof er geen afbeelding staat.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
U gaat het pad naar deze afbeelding niet volledig bewaren in de database. Het pad zal immers verschillend zijn op de testserver en op de productieserver. Op de testserver gaat u het pad laten verwijzen naar: http://localhost/PHP_boekengids/covers/pixel.gif Op de productieserver wordt dit: http://www.mijnDomein.com/covers/pixel.gif
Het is dus niet verstandig de volledige URL naar de afbeelding in de database te bewaren. U moet altijd trachten de gegevens binnen de database zo universeel mogelijk te houden. Om de cover te tonen, maken we gebruik van een relatief pad. Het pad naar de cover bestaat uit twee delen. Deze naam van het document vindt u in de kolom coverURL binnen de database. Het pad dat voor de naam hoort, plaatsen we manueel.
» Sleep het Image Placeholder-object ( ) vanuit het Insert palet (rubriek: Common) naar de eerste cel binnen de tabel (linkse cel bovenaan). » Noem de placeholder cover. De breedte en de hoogte zijn onbelangrijk. Uiteindelijk neemt de afbeelding automatisch de breedte en de hoogte van de afbeelding over.
236 - Dreamweaver CS5 - PHP5
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Selecteer de placeholder op de pagina. » Selecteer coverURL in het Bindings palet en klik op Bind.
» Pas het pad naar het Src-bestand aan. (Plaats ../covers/ voor de link.) Van:
Naar:
../covers/
12: Webapplicatie: boekengids - 237
De alt-tekst op de placeholder staat momenteel op <empty>. U kan eventueel de titel van het boek aan het alt-attribuut en aan het title-attribuut koppelen. » Selecteer de placeholder en ga naar Code view. » Sleep titel vanuit het Bindings palet tussen de aanhalingstekens van de alt-tekst. » Voeg het title-attribuut toe met dezelfde inhoud als het alt-attribuut.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Bewaar de pagina en test de detailpagina in een browser.
T Vertrek vanaf de overzichtspagina en vraag de detailpagina op van de boeken Dreamweaver CS5 - Initiatie (voor dit boek is een cover beschikbaar) en Mathcad 2000 Professional (een boek zonder cover).
Voorlopig staan de datum en de prijs nog in een Amerikaanse notatie. De datum verschijnt als yyyy-mm-dd en de prijs, een kommagetal, wordt met een punt getoond. De voorstelling van beide velden kunnen we eveneens aanpassen vanuit het Bindings palet. » Selecteer {rsDetail.pubDatum} en kies uit het Formatmenu mediaTafel:Date/Time: 17 januari 2000.
238 - Dreamweaver CS5 - PHP5
De datum wordt voluit geschreven, maar verschijnt nog steeds Engelstalig (zie detailpagina Dreamweaver CS5 - PHP).
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
» Plaats de cursor net voor {rsDetail.pubDatum}. » Voeg het Server behavior mediaTafel:Set Locale Info toe en kies de gewenste taal.
De functie setlocale() in combinatie met strftime() bepaalt de taal waarin de datum verschijnt.
» Selecteer {rsDetail.prijs} en kies uit het Formatmenu mediaTafel:Number: -12 345,67. » Bewaar de pagina en bekijk het resultaat in een browser.
12: Webapplicatie: boekengids - 239
12.4 Het administratieve gedeelte van de website.
D re w am w w S w e a .m a m ed ve ple ia r C ta S fe 5 l.c - P om HP
Map: site_ontwerp/admin
• login.php. Loginpagina voor de beheerder. • index.php. De startpagina voor de beheerder. • auteurs/index.php. Toon een overzicht van alle auteurs. Voeg een nieuwe auteur toe. • auteurs/bewerk.php. Bewerk de gegevens van een auteur. • auteurs/wis.php. Verwijder een auteur uit de database. • boeken/index.php. Toon een overzicht van alle boeken. Voeg een nieuw boek toe. • boeken/bewerk.php. Bewerk de gegevens van een boek. • boeken/wis.php. Verwijder een boek uit de database.
Alle gegevens over een bepaald boek zijn verdeeld over twee tabellen (tbl_auteurs en tbl_boeken). Per tabel moet de beheerder gegevens kunnen aanpassen, toevoegen en wissen. Niet elke gebruiker heeft toegang tot deze pagina's, vandaar dat u elke pagina beveiligt met een login en een paswoord. De logingegevens worden vergeleken met de gecodeerde waardes in de tabel tbl_login_boekengids. In deze toepassing gaan we ervanuit dat één login volstaat en dat de login/paswoord-combinatie niet wijzigt. Indien u ook deze gegevens online wenst aan te passen, moet u hiervoor extra pagina's aan het administratieve gedeelte toevoegen.
240 - Dreamweaver CS5 - PHP5