Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html ....

41
Cursus PHP en MySQL Cursus PHP en MySQL ® Learnit Training 1

Transcript of Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html ....

Page 1: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Cursus PHP en MySQL

Cursus PHP en MySQL ® Learnit Training 1

Page 2: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Inhoudsopgave 1. Inleiding 4

1.1. Deze cursus 4

1.2. Wat is PHP? 4

1.3. Downloaden en installeren 5

2. Hallo wereld 8

2.1 De server 8

2.2. De Server en Bestanden 8

2.3. Extensies 8

3. Programmeren 11

3.1. Variabelen 11

3.2. Condities 15

3.3. Lussen 17

3.3.1. For-lus 17

3.4. Functies 18

4. Formulieren 19

4.1. De HTML achter een formulier 20

4.2. Get en Post 21

4.3. Een formulier verwerken 22

5. PHP en MySQL 26

5.1. Databases 26

5.2. MySQL 26

5.3. PhpMyAdmin 26

5.4. Een database 26

6. SQL 28

6.1. CREATE 28

6.2. INSERT 28

6.3. DELETE 30

6.4. UPDATE 31

6.5. SELECT 31

7. Uitgebreid voorbeeld 33

7.1. Opslaan in de database 33

Cursus PHP en MySQL ® Learnit Training 2

Page 3: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

7.2. Data weergeven 35

7.3. Verwijder data 38

Tot slot 40

8. Wil je meer weten? 41

8.1 Webdesigntrainingen bij Learnit Training 41

8.2 Aanbod Webdesign 41

Cursus PHP en MySQL ® Learnit Training 3

Page 4: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

1. Inleiding

1.1. Deze cursus

Deze online cursus is bedoeld om je kennis te laten maken met PHP en MySQL. Je wordt door de installatie en enkele voorbeelden geleid. Na deze cursus heb je een idee van wat PHP is en kun je eenvoudige PHP-pagina's maken. Mocht je interesse gewekt zijn, dan is het zeker de moeite waard een training te volgen bij Learnit Training onder leiding van een ervaren trainer.

1.1.1. Voorkennis

Om deze online cursus te kunnen volgen moet je bekend zijn met HTML. Ook is het prettig als je weet wat een server is. Ervaring met programmeren is niet noodzakelijk. Overigens kunnen sommige zaken op jouw computer net even anders worden weergegeven dan in deze cursus staat. Dat kan te maken hebben met welke browser je gebruikt, welke versie, welke taal ingesteld staat, et cetera. Het is daarom aan te bevelen om niet alleen één op één te volgen wat er staat, maar om soms ook even verder te kijken. Voorbeeld: wanneer er staat 'Klik met de rechtermuisknop en kies 'Opslaan als’, dan kan er in jouw browser/versie ook 'Bewaar als' staan of 'Save as'.

1.1.2. Samenhang met andere cursussen

PHP, zoals we het hier gebruiken, hangt erg sterk samen met HTML. Je kunt een Learnit Training HTML volgen om hier bekend mee te raken. Als je verder wilt werken met PHP, kun je bij Learnit Training een PHP basistraining of een PHP vervolgtraining volgen.

1.1.3. Opzet

Je kunt deze cursus gewoon hoofdstuk voor hoofdstuk doorlopen en de opdrachten maken. Er wordt van uitgegaan dat je de software geïnstalleerd hebt zoals hierna beschreven wordt, en dat je steeds de voorgaande hoofdstukken gelezen hebt. Verder wordt er regelmatig gebruikgemaakt van screenshots; door verschillen in het besturingssysteem en andere softwarepakketten kunnen deze afwijken van wat jij op je scherm ziet. Hecht hier niet te veel waarde aan.

1.2. Wat is PHP?

In 1994 ontwikkelde Rasmus Lerdorf van IBM de scripttaal PHP, wat toen voor Personal Home Page stond. Sinds PHP versie 3.0 in 1998 staat het voor PHP Hypertext Preprocessor. Dit is dan ook wat het doet: hypertext (HTML) voorbewerken. Een scripttaal is een high-level programmeertaal die gemaakt is om eenvoudig software te ontwikkelen. Deze taal is met name geschikt voor het ontwikkelen van dynamische webpagina's.

1.2.1. Dynamische pagina's

Webpagina's zijn van oorsprong simpele HTML-bestanden die op een server staan te wachten tot een bezoeker ze opvraagt om ze te bekijken. Dit soort pagina's wordt ook wel statisch genoemd. Hier tegenover staan dynamische pagina's. Dit zijn webpagina's die pas gegenereerd worden op het moment dat een bezoeker ze opvraagt van een server. Het mooie hieraan is dat de pagina dus keer op keer kan veranderen, afhankelijk van de tijd, bezoeker of een ingevuld webformulier.

Cursus PHP en MySQL ® Learnit Training 4

Page 5: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Er bestaan verschillende technieken om dynamische pagina's te maken. Veel gebruikte methoden zijn tegenwoordig ASP (Active Server Pages) van Microsoft, en PHP, die we hier bespreken. 1.2.2. PHP en HTML

In het bovenstaande verhaal kwam je al regelmatig de term HTML (Hypertext Markup Language) tegen. Als je niet weet wat HTML is, zal het lastig zijn de rest van deze cursus te volgen en is het aan te raden eerst een Training HTML te volgen. PHP en HTML zijn eigenlijk een onvermijdelijk tandem. Praktisch alles wat je met PHP genereert is HTML; we gebruiken PHP om automatisch, en op het moment dat daar vraag naar is, een HTML-bestand te genereren. Een bezoeker van de website surft naar een .php-bestand, de PHP-interpreter op de webserver gaat aan het werk, maakt HTML en stuurt dit terug naar de browser die het weergeeft alsof het een normale HTML-pagina is. In hoofdstuk 2 gaan we aan de slag met een eenvoudig voorbeeld dat dit zal illustreren.

1.2.3. PHP en MySQL

MySQL is een open source-database en wordt, hoewel het ook met andere databases kan, meestal gebruikt als hét opslagmechanisme achter een dynamische webpagina die ontwikkeld is met PHP. De database bewaart alle informatie en PHP zorgt ervoor dat deze data aangepast en weergegeven kan worden als webpagina. In deze cursus zullen we enkele toepassingen behandelen die gebruikmaken van MySQL.

De onderlinge samenhang van HTML, PHP en MySQL kan als volgt worden weergegeven:

Een client, in dit voorbeeld de webbrowser Firefox, vraagt een pagina op bij de server. De PHP-interpreter stuurt een SQL (Structured Query Language)-bevraging naar de MySQL-database. Deze voert de query uit en stuurt de resulterende data terug naar de PHP-interpreter die er HTML omheen genereert. Deze HTML wordt weer naar de client gestuurd. Als het bovenstaande nog een beetje raadselachtig is voor je, is dit geen reden om af te haken. In de hierop volgende hoofdstukken komt dit alles nog uitgebreid aan bod.

1.3. Downloaden en installeren

Zoals eerder gezegd, PHP is slechts een scripttaal, en het is niet mogelijk een scripttaal te downloaden of te installeren. We kunnen dus eigenlijk ook niet spreken van het "installeren van PHP". We kunnen wel een zogenaamde interpreter installeren. In deze cursus gebruiken we PHP om dynamische webpagina's te genereren. We willen dan ook een webserver installeren die PHP kan interpreteren.

Cursus PHP en MySQL ® Learnit Training 5

Page 6: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

We gaan ervan uit dat je een versie van MS Windows als je besturingssysteem gebruikt, al is dit niet noodzakelijk om deze cursus te volgen.

1.3.1. XAMPP

PHP wordt praktisch altijd gebruikt in combinatie met de webserver Apache en de databaseserver MySQL. De meest eenvoudige manier om een goed werkende server te installeren is door het XAMPP-pakket te downloaden. Het XAMPP-pakket is met name zeer geschikt voor het ontwikkelen en testen op de eigen computer. Het pakket bevat naast de Apache-webserver en de MySQL-databaseserver nog enkele vaak gebruikte toevoegingen. Hier kun je de installer downloaden. Het maakt voor deze cursus niet uit welke versie van XAMPP je gebruikt. Na het downloaden open je de installer, en volg je de aanwijzingen op het scherm.

Opmerking

Onthoud of noteer waar je XAMPP installeert.

Na de installatie wordt de vraag gesteld of je het "XAMPP control panel" wilt starten. Antwoord "ja". Met het XAMPP Control Panel kun je de Apache-webserver en MySQL-database starten en stoppen. Voor de cursus is het van belang dat beide worden gestart.

Om te controleren of dit goed is gegaan surf je naar http://localhost. Als alles goed is gegaan, ziet je scherm er ongeveer uit als:

Cursus PHP en MySQL ® Learnit Training 6

Page 7: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Mocht dit niet het geval zijn, controleer dan eerst of je niet al een server heeft geïnstalleerd (IIS bijvoorbeeld) en schakel deze uit. Ook Skype kan de boosdoener zijn. Het is van belang Skype helemaal af te sluiten voordat je de webserver start. Mocht het dan nog steeds niet werken, dan kun je de veelgestelde vragen lezen op de XAMPP-website. Naast XAMPP zijn er andere pakketten waaruit je kunt kiezen. In deze cursus gaan we er echter vanuit dat je XAMPP geïnstalleerd hebt.

Cursus PHP en MySQL ® Learnit Training 7

Page 8: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

2. Hallo wereld

2.1 De server In deze cursus werken we alleen op de zojuist geïnstalleerde lokale server. Het is dus niet mogelijk de dynamische pagina's die je maakt vanaf een andere plek dan de computer waarop je ze maakt te zien. Dit is uiteraard niet de manier waarop het uiteindelijk gaat werken. Op het moment dat je écht je dynamische webpagina wilt publiceren zul je gebruik moeten maken van óf een provider die PHP ondersteunt, óf je moet je eigen PHP-webserver opzetten die openstaat voor het internet. Deze beperking is echter totaal geen belemmering voor het leren werken met PHP. Integendeel, in deze enigszins vereenvoudigde opzet hoef je je nog even geen zorgen te maken om beveiliging en ingewikkelde serverinstellingen.

2.2. De Server en Bestanden

In het vorige hoofdstuk zag je al dat het surfen naar http://localhost/ de standaard XAMPP-pagina opleverde. Uiteindelijk willen wij dat http://localhost/phpcursus onze bestanden op gaat leveren. De vraag is nu dus hoe wij onze bestanden op die plek krijgen, of eigenlijk meer: waar staan de bestanden die te zien zijn op http://localhost/? Het antwoord op deze vraag is afhankelijk van je installatie. In het vorige hoofdstuk installeerde je XAMPP, en als je niets veranderd hebt is dit gebeurd in de map c:\xampp. Als dit het geval is, staan de bestanden die op de server staan in de map c:\xampp\htdocs\. Mocht je het programma ergens anders geïnstalleerd hebben, dan kun je de bestanden vinden in c:\mijn\eigen\map\htdocs\. Dit wordt de rootmap genoemd. Vanuit je ervaring met HTML weet je waarschijnlijk al dat normaal gesproken standaard het bestand index.html wordt weergegeven als je naar een map surft. Op een PHP-server wordt standaard index.php uitgevoerd als je naar een map surft en dit bestand aanwezig is. Als je dus naar http://localhost/ surft, verwijst dit dus automatisch naar http://localhost/index.php, en in het standaard geval betekent dat dus dat het bestand c:\xampp\htdocs\index.php uitgevoerd wordt.

2.3. Extensies

Gebruik de Windows Verkenner om naar de rootmap te bladeren. Maak hier een nieuwe map phpcursus aan (rechtermuisknop > Nieuw > Map). In deze map maak je een nieuw bestand aan (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html. Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave > Extensies voor bekende bestandstypen verbergen):

Cursus PHP en MySQL ® Learnit Training 8

Page 9: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Pas de naam van het bestand eventueel aan, zodat er niet index.html.txt maar index.html staat. Open dit bestand in Kladblok en typ:

<?php

echo "Hallo Wereld";

?>

Sla het bestand op en surf naar http://localhost/phpcursus om het resultaat in een browser te zien. Het resultaat is, als het goed gegaan is, een lege pagina. Maar als je in de broncode van de pagina kijkt (Beeld > Bron óf Paginabron weergeven), zie je de exacte tekst die je intypte. Hernoem nu het bestand naar index.php en surf opnieuw naar http://localhost/phpcursus (of druk F5 om te vernieuwen). Nu zie je slechts de tekst 'Hallo Wereld', ook in de broncode. De PHP-interpreter is aan het werk geweest!

Cursus PHP en MySQL ® Learnit Training 9

Page 10: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

De server herkent dat het om een PHP-bestand gaat. Dit is niet zo moeilijk, want de bestandsnaam eindigt op php. Het gevolg is dat eventuele PHP-code die in het bestand staat, geïnterpreteerd wordt. PHP-code is de tekst die tussen <?php en ?> staat. Dit is niet bepaald wereldschokkend, je had hetzelfde effect gehad wanneer index.php er zo uit had gezien (probeer dit!):

Hallo Wereld

Het enige dat de opdracht 'echo' doet is dat wat erachter staat naar de uitvoer schrijven. Maar 'echo' is natuurlijk niet alles wat PHP te bieden heeft. In het volgende hoofdstuk behandelen we een aantal programmeervaardigheden die het werken met PHP wel zinvol maken.

Cursus PHP en MySQL ® Learnit Training 10

Page 11: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

3. Programmeren

3.1. Variabelen

3.1.1. Wat is een variabele?

Het geheugen van een computer wordt wel eens vergeleken met een ladenkast, met laden die een naam kunnen hebben en allerlei inhoud kunnen bevatten. Dit is een goede manier om over variabelen te denken. Een variabele is zo'n lade, met een naam en een inhoud. Verschillende laden kunnen niet dezelfde naam hebben, dat zou verwarring opleveren. Het is echter geen enkel probleem als ze dezelfde inhoud hebben. De naam van een lade zou bijvoorbeeld "plaats" kunnen zijn en de inhoud "Amsterdam". Er is dan een variabele die "plaats" heet en de waarde "Amsterdam" heeft. In PHP schrijven we dat zo op:

$plaats = "Amsterdam";

Opmerking

Het $-teken staat altijd voor de naam van een variabele. Het = teken wordt gebruikt om een waarde toe te wijzen; dat wat rechts van het = teken staat wordt toegewezen aan de variabele links van het teken. De " tekens om de waarde heen worden gebruikt om aan te geven dat wat er tussen staat een zogenaamde string is (hier later meer over). Verder wordt in PHP iedere regel afgesloten met;.

We kunnen altijd een nieuwe lade maken. We kunnen de inhoud van laden veranderen. We kunnen ze kopiëren. De inhoud van een lade kan bij die van een andere gegooid worden. Als de inhoud een getal is, dan kunnen we er zelfs mee rekenen!

Nieuwe variabele:

$plaats = "Amsterdam";

$voornaam = "Piet";

$achternaam = "Jansen";

Er zijn nu drie variabelen met drie verschillende waarden.

Waarde veranderen:

$plaats = "Amsterdam";

$plaats = "Rotterdam";

Eerst krijgt de variabele $plaats de waarde "Amsterdam", dit wordt op de tweede regel gewijzigd in "Rotterdam".

Waarde kopiëren:

$plaats = "Amsterdam";

$woonplaats = $plaats;

Cursus PHP en MySQL ® Learnit Training 11

Page 12: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

De waarde van de variabele $plaats wordt op de tweede regel toegekend aan de variabele $woonplaats.

Waarden samenvoegen:

$voornaam = "Piet";

$achternaam = "Jansen";

$naam = $voornaam . " " . $achternaam;

De variabele $naam krijgt de waarde "Piet Jansen".

Getallen:

$getal1 = 20;

$getal2 = 5;

$uitkomst = $getal1 + $getal2;

De variabele $uitkomst krijgt de waarde 25.

Tip

In bijna alle programmeertalen, en ook in PHP, wordt optellen gedaan met +, aftrekken met -, vermenigvuldigen met *, delen met / en machtsverheffen met ^.

Opmerking

We zagen in het vorige hoofdstuk al dat met de opdracht echo hetgeen dat erachter staat naar de uitvoer gestuurd wordt. In ons geval betekent dit altijd dat alles wat achter 'echo' staat in de webbrowser terechtkomt.

Opmerking

PHP-bestanden beginnen altijd met een regel waarop <?php staat. Ze eindigen altijd met een regel waarop ?> staat. Alle andere regels eindigen altijd met ;.

Opdracht 3.1

1. Maak in de map phpcursus een bestandje op-3-1.php aan en open het in Kladblok. Voer de onderstaande opdrachten steeds op een nieuwe regel uit.

2. Zorg dat het bestand op de juiste manier begint en eindigt. 3. Maak een nieuwe variabele aan die naam heet en de waarde klaas heeft (in de eerder

genoemde string-notatie) 4. Stuur de waarde van naam naar de webbrowser. 5. Verander de waarde van naam in henk. 6. Stuur wederom de waarde van naam naar de webbrowser. 7. Bekijk het resultaat op http://localhost/phpcursus/op-3-1.php 8. Als het goed is, is het resultaat een venster waarin klaashenk (zonder spatie of enter) geprint

staat

Cursus PHP en MySQL ® Learnit Training 12

Page 13: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

9. Bedenk een manier om de string "<br />" (de HTML-code voor een nieuwe regel) tussen klaas en henk te krijgen.

10. Bekijk weer het resultaat om te controleren of dit gelukt is. 11. Vergelijk de inhoud van het bestand dat je gemaakt hebt met de inhoud van op-3-1.txt

Opmerking

Het bestandje waarmee vergeleken wordt heeft de extensie .txt, dit om te voorkomen dat de inhoud als PHP geïnterpreteerd wordt en je dus niet meer zou kunnen zien wat de code was.

3.1.2. Andere typen variabelen

Tot nu toe hebben we zonder het echt te weten al verschillende soorten variabelen gebruikt, namelijk strings en integers. Hieronder volgt een volledige lijst van de beschikbare variabele typen in PHP, met steeds voorbeelden van de waarden die de variabelen kunnen bevatten.

Integer: Gehele getallen

$a = 3;

$b = ­16;

$c = 130;

Cursus PHP en MySQL ® Learnit Training 13

Page 14: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Double: Dubbele precisie

$a = 0.9;

$b = ­19.734;

$c = 100.001;

Float: Drijvende komma

$a = 4e­15;

$b = 6.000000000001;

$c = 15.1;

Boolean: Booleaanse

$a = True;

$b = False;

Char: Karakters

$a = 'b';

$b = '6';

$c = '#';

String: Tekenreeks

$a = "ik ben een string";

$b = "String";

$c = "";

Array: Variabele die meerdere variabelen kan bevatten

$a = array("a", "b", 12, 5.0, True);

$b = array("a", "b", "c");

$c[0] = "a";

$c[1] = "b";

$c[2] = "c";

Opmerking

Merk op dat $b en $c hetzelfde zijn.

Cursus PHP en MySQL ® Learnit Training 14

Page 15: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

3.2. Condities

In bijna ieder PHP-script zal het nodig blijken om te bekijken of variabelen aan bepaalde condities voldoen: is een bepaalde datum al geweest, klopt het ingevoerde wachtwoord, is het ene getal groter dan het andere? De structuur van zulke condities ziet eruit als:

Als een conditie waar is Voer dit uit als de conditie waar is

Anders Voer dit uit als de conditie onwaar is

In PHP kunnen we het volgende script maken dat gebruikmaakt van deze structuur:

<?php

$leeftijd_jan = 30;

$leeftijd_piet = 35;

if ($leeftijd_jan > $leeftijd_piet)

echo "Jan is ouder dan Piet";

else

echo "Jan is jonger dan Piet";

?>

Opmerking

Merk op dat de variabelen met namen hierboven een liggend streepje, _, bevatten; het is gebruikelijk dit te doen als de naam van een variabele uit 2 delen bestaat. Verder wordt het 'groter dan'-teken, >, gebruikt om de waarden van 2 variabelen te vergelijken.

Opdracht 3.2

Maak in de map phpcursus/ een bestandje op-3-2.php aan en open het in Kladblok.

1. Plak de code uit bovenstaand voorbeeld in het bestand. 2. Bedenk wat de uitkomst van het script moet zijn. 3. Controleer dit door naar http://localhost/phpcursus/op-3-2.php te surfen.

Pas de leeftijden van Piet en Jan zo aan dat Piet jonger is dan Jan en bekijk opnieuw het resultaat.

3.2.1. Vergelijkingsoperatoren

In het bovenstaande voorbeeld gebruikten we het groter dan-teken, >, om twee variabelen te vergelijken. Het > teken is een vergelijkingsoperator. Het idee van zo'n operator is dat de variabelen aan twee kanten met elkaar vergeleken worden. Het resultaat van zo'n vergelijking is altijd waar of onwaar, True of False. Andere operatoren zijn:

Cursus PHP en MySQL ® Learnit Training 15

Page 16: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Operator staat voor

> groter dan

< kleiner dan

>= groter dan of gelijk aan

<= kleiner dan of gelijk aan

== gelijk aan

!= ongelijk aan

Opdracht 3.2.1

1. Maak in de map phpcursus/ een bestandje op-3-3.php aan en open het in Kladblok. 2. Plak het volgende script erin:

<?php

$getal1 = 1;

$getal2 = 2;

if ($getal1 == $getal2)

echo "Waar";

else

echo "Onwaar";

?>

1. Sla het bestand op, maar sluit niet af. 2. Zie http://localhost/phpcursus/op-3-3.php voor het resultaat. 3. Het resultaat is Onwaar (1 is immers niet gelijk aan 2).

Dit resultaat is alvast ingevuld in onderstaande tabel. Maak deze tabel af (op papier), door:

de waarden van $getal1 en $getal2 te wijzigen. de vergelijkingsoperator te wijzigen. de wijzigingen op te slaan. de webbrowser met het resultaat steeds te verversen (F5).

$getal1 operator $getal2 uitkomst

1 == 2 Onwaar

3 == 3 ...

1 <= 1 ...

5 > 6 ...

5 != 6 ...

3 != 3 ...

Cursus PHP en MySQL ® Learnit Training 16

Page 17: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

3.3. Lussen Tot nu toe heeft het programmeren ons alleen maar meer tijd gekost. We hadden ook gewoon Onwaar in een bestandje kunnen zetten, in plaats van de veel ingewikkeldere codes die hetzelfde resultaat opleveren. En ook al zal hetgeen we nu al geleerd hebben belangrijk blijken; het gebruik van lussen is bij uitstek het voordeel van programmeren! Een lus wordt gebruikt om bepaalde stukjes code een bepaald aantal keer te herhalen. Er zijn drie soorten lussen, maar in deze cursus bespreken we alleen de for-lus. De andere twee, while-lus en do..while-lus zijn slechts variaties hierop.

3.3.1. For-lus

Stel dat we de getallen 1 t/m 20 onder elkaar op het scherm willen krijgen, dan kunnen we deze gewoon intypen. Met twintig getallen gaat dat nog wel, zodra het er meer worden gaat het veel tijd kosten. We kunnen ook een scriptje met een lus schrijven dat dit voor ons doet. Zo'n script zou er als volgt uit zien:

<?php

for($i = 1; $i <= 20; $i++)

echo $i . "<br />\n";

?>

De werking van dit script kan geïllustreerd worden met een stroomdiagram: Of in woorden:

1. De variabele $i wordt op 1 gezet (geïnitialiseerd). 2. Er wordt gecontroleerd of de waarde van $i (1 in dit geval),

wel kleiner is dan 20. 3. Als dit het geval is wordt de regel $i . "<br />\n"

("1<br />\n" in dit geval) naar de browser gestuurd. 4. De variabele $i wordt met 1 opgehoogd (door $i++), en wordt

dus 2. 5. 5Er wordt gecontroleerd of de waarde van $i wel kleiner is dan

20.1 6. Als dit het geval is wordt de regel $i . "<br />\n" naar de

browser gestuurd. 7. De variabele $i wordt met 1 opgehoogd. 8. Stap 5 t/m 7 worden herhaald tot $i gelijk is aan 20. 9. De 3e regel wordt simpelweg 20 keer uitgevoerd.

Cursus PHP en MySQL ® Learnit Training 17

Page 18: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Opdracht 3.3

1. Maak in de map phpcursus/ een bestandje op-3-4.php aan en open het in Kladblok.

2. Plak het volgende script erin:

<?php

$factor = 10;

for($i = 1; $i <= 10; $i++)

echo $i . " * " . $factor . " = " . $i * $factor . "<br />\n";

?>

3. Sla het bestand op, maar sluit niet af.

4. Zie http://localhost/phpcursus/op-3-4.php voor het resultaat. Probeer te begrijpen wat er gebeurt.

5. Pas het script zo aan dat het de tafel van 5, beginnend bij 0 en eindigend bij 100 (de uitkomst), naar de browser stuurt.

6. Vergelijk het script met op-3-4.txt.

3.4. Functies Het is mogelijk in een programmeertaal alles wat nodig is zelf te schrijven, maar in de meeste talen zijn de veelvoorkomende taken erg vereenvoudigd met behulp van functies. Zo zijn er functies die het aantal tekens in een string kunnen tellen, of stukken uit strings kunnen kopiëren. In PHP zijn standaard al ontzettend veel functies ingebakken en bij de XAMPP-installatie die wij gebruiken zijn ook nog veel extra bibliotheken geïnstalleerd met allemaal extra functies. Op de website www.php.net is een goed naslagwerk van alle veelvoorkomende functies te vinden. Het is voornamelijk in het Nederlands, maar af en toe komen er wat Engelse woorden in voor. Ze zijn onderverdeeld in categorieën. De twee hierboven genoemde voorbeelden zijn te vinden via String Functions, en worden toegelicht op String Lengte en Substring. De ingebakken functies kunnen zo gebruikt worden:

<?php

$naam = "Piet Jansen";

echo "lengte: " . strlen($naam) . "<br />\n";

echo "voornaam: " . substr($naam, 0, 4) . "<br />\n";

echo "achternaam: " . substr($naam, 5) . "<br />\n";

?>

Opdracht 3.4

Controleer het resultaat van bovenstaand scriptje, door zelf een bestand aan te maken in phpcursus/ en dit met de browser te bekijken.

Cursus PHP en MySQL ® Learnit Training 18

Page 19: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

4. Formulieren Op veel websites worden tegenwoordig formulieren gebruikt om bezoekers van de website de gelegenheid te geven interactie met de website te hebben. Hieronder volgen een paar voorbeelden die je misschien bekend voorkomen. Het inlogformulier van Outlook (voorheen Hotmail en Live):

Een reactieformulier op de website van de NRC:

En het zoekformulier van Google:

Cursus PHP en MySQL ® Learnit Training 19

Page 20: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Ze hebben allemaal gemeen dat er vakken zijn waar je iets in kunt typen, dat je met de muis ergens op kunt klikken om verder te gaan (inloggen/versturen/zoeken) en dat er op de pagina waar je terechtkwam iets gebeurde met wat je invulde. We gaan in dit hoofdstuk aan de slag met een formulier dat vergelijkbaar is met dat van de NRC-website. 4.1. De HTML achter een formulier Ook al wordt (X)HTML in deze cursus bekend verondersteld is het goed voor te stellen dat de HTML voor formulieren een beetje is weggezakt, aangezien het zo goed als onbruikbaar is zonder de hulp van een taal als PHP. Het formulier waarmee we gaan werken ziet er als volgt uit:

Opdracht 4.1 1. Download de code voor dit formulier door hier te klikken met de ctrl-toets ingedrukt en in de

pagina die vervolgens in de browser geopend wordt, op de rechtermuisknop te klikken en te kiezen voor 'Opslaan als...'.

2. Sla het bestand Formulier.html op in c:\xampp\htdocs\phpcursus\4\ (of in c:\mijn\eigen\map\htdocs\phpcursus\4\ indien je de installatiemap van XAMPP had aangepast).

3. Open het formulier in Kladblok en controleer of de regel <form name="reactie_formulier" method="post" action="verwerk.php">erin voorkomt. Sla het bestand op.

4. Bekijk het formulier op http://localhost/phpcursus/4/formulier.html. 5. Vraag de broncode van het formulier op (Beeld > Bron), en bestudeer deze. Hieronder

bespreken we het één en ander. Een eerste regel die misschien opvalt, maar in iedere geval belangrijk is, is deze: <form name="reactie_formulier" method="post" action="verwerk.php"> Wat het methode-attribuut doet bespreken we zo. Het action-attribuut geeft aan waar, nadat op de verstuur-knop is gedrukt, de browser heen gestuurd moet worden; verwerk.php dus in dit geval. Wat we daar dan moeten doen bespreken we zo meteen.

Cursus PHP en MySQL ® Learnit Training 20

Page 21: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Verder staan er twee tags: <input type="text" name="naam" /> <input type="text" name="email" /> Deze tags vormen de input-velden; de velden waar tekst in getypt kan worden. Het is belangrijk dat ze allemaal een unieke naam krijgen. Een laatste opmerkelijke tag is: <input type="submit" value="verstuur" /> Dit is een speciaal type van de vorige; deze zorgt ervoor dat het formulier verzonden wordt naar de pagina die gespecificeerd was in action.

4.2. Get en Post Er zijn twee manieren om het formulier te versturen, deze manieren worden methoden genoemd. In het voorbeeld wordt gebruikgemaakt van de post-methode.

Opdracht 4.2

1. Open phpcursus\4\formulier.html in Kladblok 2. Controleer of het attribuut methode ingesteld staat op post. 3. Surf naar http://localhost/phpcursus/4/formulier.html, vul het formulier in met

willekeurige informatie en klik eens op verstuur. 4. Kijk wat er gebeurt. 5. Waarschijnlijk krijg je de melding "Object niet gevonden!", maar let vooral op de adresbalk,

hier staat een URL die eindigt op 'verwerk.php'. 6. Verander de methode nu in get; regel 6 van formulier.html luidt dan dus: <form name="reactie_formulier" method="get" action="verwerk.php"> 7. Sla het bestand op en surf opnieuw naar http://localhost/phpcursus/4/formulier.html en

druk op F5 om de nieuwe versie (met get-methode) te krijgen. 8. Vul weer fictieve informatie in en druk weer op verstuur. 9. De adresbalk moet er nu ongeveer uitzien als:

De inhoud van het formulier is achter de bestandsnaam verwerk.php gezet. Het verschil tussen get en post is hiermee geïllustreerd. Get plakt alles vast aan de url, dit kan handig zijn omdat er duidelijk te zien is wat er gebeurt. Maar vaker is het onhandig omdat er een limiet is aan de lengte van waarden

Cursus PHP en MySQL ® Learnit Training 21

Page 22: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

die zo meegestuurd kunnen worden. Verder kan het er ook slordig uitzien. Om deze redenen werken wij hier met de post-methode. 10. Zet de methode in phpcursus\4\formulier.html terug naar post en sla het bestand op.

4.3. Een formulier verwerken Intussen weten we dat het formulier, zodra het ingevuld is en er op verstuur geklikt is, naar verwerk.php gestuurd wordt. Wat we vervolgens vaak willen is de informatie uit het formulier valideren; kijken of het juist is ingevuld. En als dit het geval is, willen we het meestal opslaan. Dit opslaan doen we hier nog even niet, dat kunnen we pas zodra we met de database kunnen werken. De informatie uit het formulier ophalen is eigenlijk heel eenvoudig, het gaat met de zogeheten superglobal $_POST (of natuurlijk $_GET als we gebruik zouden maken van de get­methode). Het volgende script is een eerste versie van verwerk.php <html> <head> <title>Formulier verwerken</title> </head> <body> Je vulde in: <table> <?php echo "<tr><td>Naam: </td><td>" . $_POST['naam'] . "</td></tr>\n"; echo "<tr><td>Email: </td><td>" . $_POST['email'] . "</td></tr>\n"; echo "<tr><td>Reactie: </td><td>" . $_POST['reactie'] . "</td></tr>\n"; ?> </table> </body> </html>

Opdracht 4.3 1. Maak een nieuw bestand verwerk.php aan in de map phpcursus\4\. 2. Open het bestand in Kladblok en plak het bovenstaande script erin 3. Surf weer naar http://localhost/phpcursus/4/formulier.html, vul het formulier in met

willekeurige informatie en klik weer op verstuur.

Cursus PHP en MySQL ® Learnit Training 22

Page 23: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

4.3.1. Valideren

Nu kunnen we dus de gegevens die in het formulier zijn ingevoerd weer op het scherm krijgen, maar wat gebeurt er nu als een bezoeker niets of niet kloppende gegevens invoert? Met 'niet kloppend' bedoelen we in dit geval bijvoorbeeld dat het e-mailadres niet de vorm van een e-mailadres heeft. We kunnen natuurlijk niet weten of een e-mailadres wel echt bij de bezoeker hoort. Het is duidelijk dat we moeten checken wat er ingevoerd wordt voordat we het weer naar de browser sturen of er iets anders mee doen. Dit checken noemen we valideren. Eerst controleren we of de variabele überhaupt binnengekomen is. Dit doen we door te kijken of deze aanwezig is in het $_POST-array met behulp van de isset()-functie. Daarbij controleren we ook of deze geen lege string bevat. <?php

if (isset($_POST['naam'] && $_POST['naam'] != '' )

$naam = $_POST['naam'];

echo "<tr><td>Naam: </td><td>" . $naam . "</td></tr>\n";

else

echo "<tr><td>Naam: </td><td><em>Vul een naam in!</em></td></tr>\n";

?>

Cursus PHP en MySQL ® Learnit Training 23

Page 24: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Opdracht 4.3.1 1. Open verwerk.php opnieuw in Kladblok 2. Verander het script zo dat bovenstaand stukje code ingepast wordt 3. Sla op, maar sluit niet af 4. Surf naar http://localhost/phpcursus/4/formulier.html 5. Vul niets in bij naam en druk op verstuur, kijk of het zojuist gemaakte script correct werkt 6. Zorg dat deze validatie ook toegepast wordt op het e-mailadres en de reactie 7. Controleer de werking van het script 8. Kijk eventueel hier als je er niet uitkomt of ter controle (ook voor wat er verder nog volgt in

hoofdstuk 4)

4.3.1.1 E-mailadres valideren met filters

Nu controleren we alleen nog maar of een veld in het formulier niet leeg is. We kijken niet of een e-mailadres correct is. Gelukkig biedt PHP een functie die kan helpen bij het valideren: filtervar(). Op de volgende manier kunnen we het e-mailadres valideren if ( isset($_POST['email']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) )

...

else

...

Opmerking

We vervangen de code die nu niet relevant is even door ‘…’. a && b wordt waar als a en b beide waar zijn.

4.3.1.2 Valideren met Reguliere Expressies

Het aantal validatiefilters is echter beperkt. Er is bijvoorbeeld geen validatiefilter voor Nederlandse postcodes. Deze kun je controleren met behulp van een reguliere expressie. Reguliere expressies zijn specificaties van hoe een string eruit zou moeten zien, en gaan net even te ver voor deze cursus. Op het web zijn veel goede bronnen te vinden die je verder kunnen helpen, bijvoorbeeld www.regular-expressions.info/php.html). 4.3.2 Teksten opschonen

We hebben nu al wel een controle voor het e-mailadres, maar nog niet voor de naam en de reactie. Het zou echt dramatisch af kunnen lopen met onze website als een bezoeker HTML-codes in ging voeren.

Cursus PHP en MySQL ® Learnit Training 24

Page 25: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Opdracht 4.3.2. 1. Bedenk wat er zou gebeuren als een bezoeker de volgende regel als 'e-mailadres' in zou

voeren: </td></tr></table><table border='1'><tr><tr>

2. Probeer dit uit! 3. Kijk naar de broncode van verwerk.php als de bovenstaande regel ingevuld is, begrijp wat

daar staat.

Alle tekens die voor problemen kunnen zorgen moeten verwijderd worden. Ook hier kunnen we weer gebruikmaken van de filter_var-functie. Deze geven we een 'vieze' tekst mee en het resultaat is een opgeschoonde tekst waaruit alle HTML-tags zijn verwijderd. $naam = filter_var($_POST['naam'], FILTER_SANITIZE_STRING);

Opdracht 4.3.2.

1. Open verwerk.php opnieuw in Kladblok als het niet nog open staat. 2. Pas het script zo aan dat bovenstaande controles ook uitgevoerd worden. 3. Bedenk hoe de reactie gecontroleerd kan worden en doe dit.

Cursus PHP en MySQL ® Learnit Training 25

Page 26: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

5. PHP en MySQL 5.1. Databases Als we data willen opslaan (bijvoorbeeld uit webformulieren), dan kunnen we dat in tekstbestanden doen. En dat gaat goed, zolang het niet te veel data is en zolang we geen ingewikkelde bewerkingen of zoektochten door deze data ondernemen. Zodra we dat wél willen doen, wordt het slim een databasesysteem te gebruiken. De database zorgt voor de opslag in bestanden, daar heb je niets meer mee te maken. En verder biedt de database een systeem om bevraging op de data los te laten. Dit gaat via SQL, (Structured Query Language). SQL behandelen we in het volgende hoofdstuk, al zal er hier ook al wat van te zien zijn.

5.2. MySQL MySQL is een databasesysteem; we gebruiken dit systeem omdat:

het open source (en dus gratis) is; het ondanks het feit dat het gratis is, een zeer uitgebreide en stabiele databaseserver is; het de meestgebruikte database in combinatie met PHP is en al geïnstalleerd staat op je computer als je XAMPP geïnstalleerd hebt.

Genoeg redenen dus, maar het is ook mogelijk andere databasesystemen zoals Microsoft Access, Postgress of SQL-server te gebruiken.

5.3. PhpMyAdmin Een database is een systeem dat zorgdraagt voor het opslaan, bewerken en bevragen van data. En dat is eigenlijk ook alles wat het is. Er is niets aan te zien. Als je Microsoft Access wel eens geopend hebt, dan weet je dat daar wel wat te zien is (tabellen, queries, formulieren, etc). Al wordt dit vaak de database genoemd, het is in feite een DBMS (DataBase Management System) dat je ziet. Een DBMS is de interface voor een gebruiker naar de achterliggende database. Voor MySQL hebben we ook zo'n interface nodig, er zijn er meerdere, maar wederom kiezen we voor de meest gebruikte en meest gebruiksvriendelijke variant die ook al op je computer is geïnstalleerd als je XAMPP hebt geïnstalleerd. Dit DBMS heet PhpMyAdmin. PhpMyAdmin is te vinden, als het geïnstalleerd staat, op http://localhost/phpmyadmin/. In dit geval is het DBMS niet beveiligd (je hoeft niet in te loggen), omdat we alleen op de eigen computer werken. In PhpMyAdmin kunnen we de databases bewerken. We kunnen nieuwe databases aanmaken, tabellen toevoegen, tabellen veranderen, verwijderen, de databases bevragen en nog meer. Voor meer informatie kun je de website van het PhpMyAdmin Project bekijken.

5.4. Een database Het gaat te ver om in deze cursus heel uitgebreid in te gaan op hoe databases exact werken. Je kunt bij ons een training MySQL Administering volgen. Wat we wel doen is een database aanmaken die de reacties uit ons formulier op kan slaan. Het wordt een database die Reacties heet met twee tabellen:

Cursus PHP en MySQL ® Learnit Training 26

Page 27: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Opmerking

De bovenstaande afbeelding is met MS Access gemaakt, omdat PhpMyAdmin niet een dergelijke weergave heeft. Het is slechts bedoeld ter illustratie.

Wat we zien is een database (het geheel) die Reacties heet. Twee zogenaamde tabellen die Personen en Reacties heten. Beide tabellen hebben op hun beurt weer zogenaamde attributen. Verder is er een één-op-veel-relatie tussen personen en reacties, wat wil zeggen dat één persoon meerdere reacties kan maken. Een ander belangrijk aspect is dat beide tabellen een attribuut Id hebben. Dit zorgt ervoor dat een record dat uiteindelijk in de tabel komt te staan uniek te identificeren is (het is mogelijk dat een persoon twee keer hetzelfde berichtje stuurt; deze berichten willen we wel uit elkaar kunnen houden). Je kunt proberen zelf bovenstaande database aan te maken met behulp van PhpMyAdmin. Je kunt ook gewoon create.txt downloaden, de inhoud naar het klembord kopiëren, naar http://localhost/phpmyadmin/ surfen en op het knopje SQL klikken. Er verschijnt dan een zogenaamd query window waarin je de inhoud van het klembord kunt plakken. Op Go (of Starten, afhankelijk van je versie) drukken zorgt ervoor dat de database Reacties aangemaakt wordt. In het volgende hoofdstuk gaan we hiermee verder.

Cursus PHP en MySQL ® Learnit Training 27

Page 28: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

6. SQL

In dit hoofdstuk leer je eenvoudige SQL (Structured Query Language)-query's te maken en te gebruiken. Mocht je hier meer over willen weten, dan kun je overwegen een training Basis ANSI SQL te volgen bij ons. Het onderstaande is slechts bedoeld om je een idee te geven van wat SQL is, zodat we er in het volgende hoofdstuk gebruik van kunnen maken. Met name de INSERT- en SELECT-commando's zijn belangrijk.

6.1. CREATE Als je in het vorige hoofdstuk het SQL-script dat de tabellen in de database aanmaakte bestudeerd hebt, zul je waarschijnlijk CREATE-commando's gezien hebben. Met CREATE kun je nieuwe tabellen aanmaken binnen de database. De structuur van CREATE is als volgt: CREATE tabelnaam ( kolomnaam datatype [integriteitsregel], [... ... [...], ] PRIMARY KEY (kolomnaam) ) [tabelspecificatie]

Opmerking

In de bovenstaande notatie zijn alle woorden in hoofdletters zogenaamde keywords, alles wat tussen [ en ] staat is optioneel. De hele regel die tussen [ en ] staat mag meerdere malen herhaald worden.

Een ingevuld voorbeeld ziet er zo uit: CREATE TABLE personen ( id int(11) NOT NULL auto_increment, naam varchar(50) collate latin1_general_ci NOT NULL, email varchar(100) collate latin1_general_ci default NULL, PRIMARY KEY (id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; Er wordt hier een tabel 'personen' aangemaakt met 3 kolommen: id, naam en email. Verder wordt de kolom id als primary key aangemerkt, en krijgt deze de eigenschap auto_increment mee, hetgeen wil zeggen dat de waarde altijd met 1 opgehoogd wordt ten opzichte van de vorige, waardoor er nooit dubbele waarden ontstaan. 6.2. INSERT Het INSERT-commando wordt gebruikt om in een tabel rijen toe te voegen. We kunnen hiermee bijvoorbeeld alvast wat bezoekers met reacties in de database zetten. We kunnen het ook in ons verwerk.php-script opnemen om informatie uit het formulier naar de database te sturen. De structuur is als volgt:

Cursus PHP en MySQL ® Learnit Training 28

Page 29: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

INSERT INTO personen [(kolomnaam,

...)] VALUES (

veldwaarde [, veldwaarde, ...]

) Een voorbeeld hiervan is: INSERT INTO personen (naam, email) VALUES (

'Piet Jansen', '[email protected]'

)

Opdracht 6.2

1. In deze opdracht wordt ervan uitgegaan dat de tabellen personen en reacties aangemaakt zijn. Kijk eventueel in het vorige hoofdstuk om te lezen hoe dit moet.

2. Open http://localhost/phpmyadmin/, en ga naar de tabel reacties. 3. Kies voor het tabblad SQL.

4. Plak in het venster dat verschijnt het bovenstaande voorbeeldscript.

Cursus PHP en MySQL ® Learnit Training 29

Page 30: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

5. Druk op Go (of Starten) om de query tegen de database reacties te draaien (zoals dat heet). 6. Het resultaat is dat Piet Jansen in de tabel personen ingevoegd wordt. 7. Voeg zelf 4 andere (fictieve) personen toe door de waarden in de query te veranderen en deze

opnieuw te draaien. 8. Voer ook onderstaand script uit (let op dat je het volgnummer, in dit geval '8.' weghaalt!) INSERT INTO reacties (persoon_id, reactie, datum) VALUES (

'1', 'dit is piets reactie!', '2007­12­01 15:00:00'

) 9. Voeg zelf zes reacties toe, en koppel ze aan de personen die je net aanmaakte door

persoon_id aan te passen (Als het goed is bestaan persoon_id 1 t/m 4), er zijn dan dus twee personen met twee reacties (of één persoon met drie).

10. We hebben nu in de tabel personen 5 rijen en in de tabel reacties 7 rijen. 11. Controleer dit door in het tabblad Structuur te kijken.

6.3. DELETE Verwijderen uit de database is erg eenvoudig, maar ook gevaarlijk. Voor je het weet gooi je een hele tabel leeg! Let dus goed op als je het DELETE-commando gebruikt! Het DELETE-commando ziet er zo uit: DELETE FROM tabelnaam [WHERE voorwaarde […]] Het weglaten van het WHERE-gedeelte zorgt voor het legen van de hele tabel. De WHERE-restrictie zou eruit kunnen zien als: WHERE id = 5.

Opdracht 6.3

1. Open wederom het tabblad SQL in PhpMyAdmin. 2. Maak zelf een query die 1 rij uit de tabel reacties verwijdert. Maak gebruik van het zojuist

genoemde voorbeeld. 3. Voer deze query uit. 4. We hebben nu in de tabel personen 5 rijen en in de tabel reacties 6 rijen. 5. Controleer dit weer door in het tabblad Structuur te kijken.

Cursus PHP en MySQL ® Learnit Training 30

Page 31: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

6.4. UPDATE Het kan gebeuren dat er iets veranderd moet worden in de databasegegevens. Het is natuurlijk mogelijk een rij te verwijderen en de aangepaste rij weer toe te voegen. Maar het kan makkelijker met het UPDATE-commando. De structuur (of syntax) hiervan is: UPDATE tabelnaam SET kolomnaam = nieuwewaarde [, ... = ... [, ...]] [WHERE voorwaarde […]] Het weglaten van de WHERE-restrictie zorgt er in dit geval voor dat alle rijen in de tabel aangepast worden. Verder is het mogelijk meerdere kolommen tegelijk aan te passen. Zo kunnen bijvoorbeeld naam en e-mailadres in de tabel personen tegelijk aangepast worden. Een query om bijvoorbeeld Piet in Klaas te veranderen (in het onrealistische geval dat Piet zijn naam in Klaas verandert) ziet er zo uit: UPDATE personen SET naam = 'Klaas Jansen', email = '[email protected]' WHERE id = 1

6.5. SELECT SELECT is waarschijnlijk de meest gebruikte query. De functie van dit commando is het bevragen van de data; de data kan er niet mee veranderd of verwijderd worden. De meest eenvoudige structuur is: SELECT kolomnaam [, kolomnaam [,...]] FROM tabelnaam [WHERE voorwaarde […]] Hier zorgt het weglaten van de WHERE-restrictie voor het teruggeven van alle rijen. Als we bijvoorbeeld alle e-mailadressen van mensen met de naam Klaas Jansen willen krijgen, voeren we de volgende query uit: SELECT email FROM personen WHERE naam = 'Klaas Jansen' Het uitvoeren van deze query levert een scherm op vergelijkbaar met het volgende:

Cursus PHP en MySQL ® Learnit Training 31

Page 32: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

6.5.1. JOINS

Het komt vaak voor dat we data uit meerdere tabellen willen combineren. Het voert te ver om hier een volledige uitleg te geven over hoe zogeheten joins exact werken, maar met behulp van deze joins is dit mogelijk. Hieronder volgt een eenvoudig voorbeeld waarmee alle reacties met daarbij de naam en e-mailadres van de auteur samengevoegd worden. SELECT personen.naam, personen.email, reacties.reactie, reacties.datum FROM personen, reacties WHERE reacties.persoon_id = personen.id

Opdracht 6.5.1.

1. Als het goed is, weet je inmiddels hoe je een query uit moet voeren; kijk eventueel bij eerdere opdrachten

2. Voer bovenstaande query uit 3. Bekijk het resultaat 4. Als één persoon meerdere berichten heeft geschreven komt deze ook meerdere keren voor in

het resultaat, dit terwijl de naam en het e-mailadres maar één keer in de tabel personen staan!

Cursus PHP en MySQL ® Learnit Training 32

Page 33: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

7. Uitgebreid voorbeeld In dit hoofdstuk gaan we alles wat we hiervoor hebben geleerd samenvoegen: we gebruiken formulieren, programmeertechnieken en SQL om met de database te communiceren. We gaan verder met het formulier dat we in hoofdstuk 4 (over formulieren) al maakten. Bij de verwerking van dit reactieformulier, dat voor bezoekers van een website bedoeld is, gaan we gegevens in de database opslaan. Daarnaast maken we een systeem voor de beheerder van een website om reacties te bekijken, aan te passen en weg te gooien.

7.1. Opslaan in de database In verwerk.php controleerden we de invoer, en lieten we deze weer in de browser zien. We bewaarden de data nog niet. Dat gaan we nu wel doen.

Opdracht 7.1

1. Maak in phpcursus/ een map 7/ aan. 2. Sla formulier.html op in phpcursus/7/ (ctrl-klik om te openen, daarna rechtermuisknop,

Opslaan als). 3. Sla deze programmacode (ctrl-klik om te openen, daarna rechtermuisknop, Opslaan als) op

als verwerk.php in phpcursus/7/. 4. Bekijk de bron van phpcursus/7/verwerk.php door het te openen in Kladblok. 5. Bestudeer wat er gebeurt, er zijn een aantal dingen veranderd:

Er zijn stukken tekst die commentaar heten toegevoegd, ze beginnen steeds met //. Deze code wordt niet uitgevoerd en dient slechts om de code voor een programmeur leesbaarder te maken.

De variabele $correct is toegevoegd. Deze variabele houdt bij of er fouten worden gemaakt. Zodra we een fout tegenkomen zetten we de booleaanse variabele $correct op false (het is niet correct).

Het onderste stuk code is helemaal nieuw: //Was alles correct ingevuld? if ($correct) // Opslaan! // Vul hier de code in om de reactie op te slaan! echo "<br /><br />Bovenstaande informatie is opgeslagen!<br />\n"; else // Er is ergens een foute waarde ingevoerd, geef de bezoeker de // mogelijkheid om terug te gaan echo "<br /><br />Er is een foute waarde ingevoerd, <a href=\"javascript:history.back();\">ga terug</a>.<br />\n"; Op de plek van //Vul hier de code in om de reactie op te slaan! gaan we zo meteen de code invoegen die de data op gaat slaan.

6. Controleer wat het formulier doet door in je browser naar

http://localhost/phpcursus/7/formulier.html te surfen.

Cursus PHP en MySQL ® Learnit Training 33

Page 34: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

7. Verander de regel //Vul hier de code in om de reactie op te slaan! In:

$db = new PDO('mysql:host=localhost;dbname=reacties', 'root', ''); //Kijk of een persoon al bestaat $query = "SELECT id FROM personen WHERE naam = ? AND email = ?"; $stmt = $db­>prepare($query); $stmt­>execute(array( $naam, $email)); if ($stmt­>rowCount() > 0) $row = $stmt­>fetch(PDO::FETCH_ASSOC); $persoon_id = $row['id']; else // Voeg de naam en email toe in de tabel personen $query = "INSERT INTO personen(naam, email) VALUES (?, ?)"; $stmt = $db­>prepare($query); $stmt­>execute(array( $naam, $email)); // Vraag de id van de nieuwe persoon op $persoon_id = $db­>lastInsertId(); // Voeg de reactie toe in de tabel reacties. Gebruik de id van de zojuist toegevoegde persoon $query = "INSERT INTO reacties(persoon_id, reactie, datum) VALUES (?, ?, ?)"; $stmt = $db­>prepare($query); $stmt­>execute(array( $persoon_id, $reactie, date('Y­m­d H:i:s'))); In het bovenstaande staan een hoop nieuwe dingen die we hier even bespreken. Eerst wordt er een verbinding met de MySQL-server gemaakt. Hierbij maken we gebruik van de PHP Data Object-extensie. Deze PHP-extensie maakt het mogelijk om vanuit ons PHP-script met de database te communiceren. Onze MySQL-server draait op de localhost. en we loggen in met het root-account (eigenlijk is dit niet netjes, maar voor deze demonstratie het eenvoudigst), hier is geen wachtwoord voor nodig. De code om in te loggen ziet er daarom als volgt uit: $db = new PDO('mysql:host=localhost;dbname=reacties', 'root', ''); Het resultaat is een nieuw database-object. Dit wordt opgeslagen in de variabele $db. Dit object kunnen we gebruiken om met de database te communiceren.

Hierna maken we SQL-query's, die je waarschijnlijk uit het vorige hoofdstuk herkent. Er is echter een groot verschil. Op de plek waar de naam en het e-mailadres moeten komen staat een ?, de zogenaamde placeholder. Door gebruik te maken van deze placeholder beschermen we ons tegen SQL-injecties. Dit is een veelvoorkomende aanval, waarbij hackers hun eigen SQL-code proberen toe te voegen aan de query. Helaas kunnen we hier niet in detail op ingaan. Gelukkig is er veel online informatie beschikbaar over SQL-injecties.

Cursus PHP en MySQL ® Learnit Training 34

Page 35: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

We vragen de database de query voor te bereiden met $stmt = $db­>prepare($query);. Hierna voeren we de query's uit met $stmt­>execute(array( $naam, $email));. Pas nú bij het uitvoeren worden de variabelen $naam en $email meegegeven.

Vóór we de persoon toevoegen kijken we eerst, met behulp van een SELECT, of er al een persoon bestaat met de naam en het e-mailadres die ingevuld zijn.

De functie $db­>lastInsertId(); zorgt ervoor dat het id van de laatst uitgevoerde query gebruikt wordt, hierdoor wordt een reactie aan de juiste persoon gekoppeld.

8. Test het nieuwe script door weer naar het formulier te gaan en een aantal reacties toe te voegen. Zorg ervoor dat er personen zijn die meerdere berichten in de database hebben staan. U kunt het toegevoegde record bekijken met behulp van PHPMyAdmin http://localhost/phpmyadmin.

9. Download hier eventueel de nieuwe versie van de programmacode voor verwerk.php (overschrijf de oude verwerk.php).

Als het allemaal goed is gegaan heb je de database gevuld met nieuwe gegevens. We gaan nu een simpel script maken om deze gegevens weer te geven.

7.2. Data weergeven Uit het vorige hoofdstuk weten we nog hoe we data uit verschillende tabellen moeten combineren. We passen de query nog een beetje aan door een ORDER BY-commando toe te voegen:

SELECT personen.naam, personen.email, reacties.reactie, reacties.datum FROM personen, reacties WHERE reacties.persoon_id = personen.id ORDER BY reacties.datum

Cursus PHP en MySQL ® Learnit Training 35

Page 36: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Als we dat niet doen, worden de rijen in een niet gedefinieerde volgorde teruggegeven. Onderstaand PHP-script geeft alle reacties weer:

<html> <head>

<title>Reacties</title> </head> <body> <table> <?php

$db = new PDO('mysql:host=localhost;dbname=reacties', 'root', '');

// Selecteer alle reacties met naam en email adres van de auteur $query = "SELECT reacties.id, personen.naam, personen.email,

reacties.reactie, reacties.datum

FROM personen, reactieS WHERE reacties.persoon_id = personen.id ORDER BY reacties.datum";

$result = $db­>query($query);

while ($row = $result­>fetch(PDO::FETCH_ASSOC)) echo "<tr><td>van <a href='mailto:" . $row["email"] . "'>" .

$row["naam"] . "</a></td> <td>op " . $row["datum"] . "</td></tr>\n";

echo "<tr><td colspan='2'>" . $row["reactie"] . "</td></tr>\n"; echo "<tr><td colspan='2'></td></tr>\n"; // Pas deze deze regel Aan!

?> </table> </body> </html>

In dit script maken we wederom verbinding met de MySQL-server, selecteren we een server en vervolgens voeren we het SELECT-commando uit. Daarna maken we een lus door de resultaten van de query heen met behulp van de while-lus. We printen het resultaat in een HTML-tabel.

Opdracht 7.2

1. Sla reacties.php op in phpcursus/7/ (rechtermuisknop, Opslaan als).

2. phpcursus/7/reacties.php komt overeen met bovenstaand script.

3. Surf naar http://localhost/phpcursus/7/reacties.php om alle reacties die je eerder invoerde te bekijken.

4. Bekijk via de browser de HTML-code die met het reacties.php-script is gegenereerd.

Cursus PHP en MySQL ® Learnit Training 36

Page 37: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

7.3. Verwijder data We gaan phpcursus/7/reacties.php zo aanpassen dat er een knopje op komt om reacties te verwijderen. In het bestand is al aangegeven waar dit knopje moet komen, namelijk op de regel waar staat: //pas deze regel aan!. We gaan op die regel een linkje naar verwijder.php plaatsen en sturen het id van de reactie mee. Het verwijderen zelf wordt afgehandeld door het verwijder.php-script:

<html> <head>

<title>Verwijderd</title> </head> <body> <?php // Controleer of we daadwerkelijk een integer (geheel getal) hebben binnen gekregen

Cursus PHP en MySQL ® Learnit Training 37

Page 38: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

if ( isset($_GET['reactie_id']) && filter_var($_GET['reactie_id'], FILTER_VALIDATE_INT ))

$reactie_id = $_GET['reactie_id'];

// We maken verbinding met de database $db = new PDO('mysql:host=localhost;dbname=reacties', 'root', '');

$query = "DELETE FROM reacties WHERE id = ? "; $stmt = $db­>prepare($query); $stmt­>execute($reactie_id); echo 'De reactie is verwijderd!<br />'; echo 'Ga terug naar de <a href="reacties.php">reacties</a>.<br />';

else echo "Ongeldige aanvraag";

?> </body> </html>

Opdracht 7.3 1. Sla verwijder.php op in phpcursus/7/. Let op dat het bestand moet worden opgeslagen

met de extensie .php! 2. Open phpcursus/7/reacties.php in Kladblok

3. Verander de regel met //pas deze regel aan! in:

echo "<tr><td colspan='2'><a href='verwijder.php?reactie_id=" . $row["id"] . "'>

verwijder</a></td></tr>\n";

4. Ga naar het reactieoverzicht http://localhost/phpcursus/7/reacties.php. Controleer of reacties daadwerkelijk verwijderd zijn na het klikken op de link.

Tot slot We hopen dat je na deze gratis cursus enthousiast bent geworden over de mogelijkheden van PHP en MySQL. Zoals je al hebt kunnen lezen kun je bij Learnit Training ook terecht voor een PHP basiscursus of een PHP vervolgcursus. Op de volgende pagina hebben we de mogelijkheden voor je op een rijtje gezet.

Bedankt voor je aandacht en wie weet tot binnenkort!

Cursus PHP en MySQL ® Learnit Training 38

Page 39: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

8. Wil je meer weten?

8.1 Webdesigntrainingen bij Learnit Training De wereld van websites is een wereld van oneindige mogelijkheden en uitdagingen op het gebied van techniek en creativiteit. Van een eenvoudige, lichte basiswebsite tot een groots, kleurrijk ontwerp met flash: de keuze is aan jezelf. Of het nu gaat om het ontwikkelen van websites met Dreamweaver, het in orde maken van online beeldcontent met Photoshop of het schrijven van commerciële teksten: Learnit Training biedt de trainingen Webdesign / ontwikkeling maatgericht aan, zowel individueel als voor grote groepen. Wij hebben onder andere meerdere PHP-trainingen ontwikkeld waarin je alles kunt leren over programmeren in PHP. Ook leer je tijdens deze trainingen queries te maken in MySQL.

De meeste trainingen binnen het thema Webdesign / Ontwikkeling kunnen we organiseren in de vorm van een klassikale training, groepstraining, privetraining, op maat gemaakte webinars of workshops. Ook is het mogelijk om na afloop van de training één of meerdere terugkomdagen met de groep of individueel in te plannen, waarbij in de praktijk ondervonden probleemsituaties in kunnen worden gebracht door de deelnemers.

8.2 Aanbod Webdesign Hieronder vindt u een overzicht van onze webdesigntrainingen. Klik hier om naar onze website te gaan. Hier kunt u de training van uw voorkeur selecteren voor meer informatie.

Cascading StyleSheets (CSS) Contentmarketing DTP praktijkopleiding Dreamweaver CC Basis E-commerce E-mail marketing Edge Animate Facebook advertising Basis Facebook advertising Professional Flash Action Script Flash CC basis Google AdWords Basis Google AdWords Professional Google Analytics Basis Google Analytics Professional HTML HTML (XHTML) HTML e-mail (XHTML) Heldere teksten schrijven InDesign voor iPad en Tablets Internetmarketing Javascript Basis Joomla! Joomla! Administration Marketingplan schrijven MySQL Administration Nederlandse spelling en grammatica

Cursus PHP en MySQL ® Learnit Training 39

Page 40: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

PHP Programmeren Basis PHP Programmeren Vervolg PHP Zend Framework 2 Programming Photoshop CC Basis Photoshop CC Basis Versneld Photoshop CC Vervolg Photoshop Elements Photoshop Foundation Photoshop Intermediate RSS (Real Simple Syndication) Responsive design Ruby on Rails Social media-marketing Tekstschrijven voor internet en intranet Usability Webshop bouwen met Joomla! En VirtueMart Websites maken met Adobe Muse Websites maken met Drupal Websites ontwikkelen met HTML, CSS en Dreamweaver WordPress XML Basis XSL Transformations Zoekmachinemarketing Zoekmachineoptimalisatie (SEO) jQuery Basis

Cursus PHP en MySQL ® Learnit Training 40

Page 41: Cursus PHP en MySQL · (rechtermuisknop > Nieuw > Tekstdocument). Noem dit bestand index.html . Zorg ervoor dat de bestandsextensies niet verborgen worden (Extra > Mapopties > Weergave

Deze gratis cursus PHP en MySQL is een uitgave van:

Learnit Training

Piet Heinkade 1

1019 BR Amsterdam

Telefoon +31 20 6369179

Fax +31 20 7163377

E-mail [email protected]

Website www.learnit.nl

Heeft u vragen of wilt u meer informatie? Neem dan

contact op via +31 20 6369179 of kijk op onze website

www.learnit.nl. Onze medewerkers zijn op werkdagen

telefonisch bereikbaar van 09:00 tot 17:30.

Copyright © 2016: Learnit Training

Alle rechten voorbehouden. De inhoud van de cursus van Learnit

Training is auteursrechtelijk beschermd en mag niet worden gebruikt door

derden in enige vorm of op enige wijze, hetzij elektronisch, mechanisch,

door fotokopieën, opnamen of op enige andere manier zonder vooraf-

gaande schriftelijke toestemming van de uitgever.

Cursus PHP en MySQL ® Learnit Training 41