PHP en MySQL

PHP en MySQL

A Inleiding

Vooraf

In de module "Interactieve websites met PHP en MySQL" leer je werken met scripts. Scripts heb je nodig om webpagina’s interactief te maken. Met alleen HTML kunnen geen dynamische webpagina’s worden ontworpen. Scripts kunnen in diverse talen geschreven worden. Voorbeelden van scriptingtalen zijn PHP en JavaScript. In deze module behandelen we de scriptingtaal PHP.

De module over PHP is een vervolg op de module HTML5, CSS3 en JavaScript. Je moet de module over HTML eerst doorgewerkt hebben voordat je kunt beginnen aan de module PHP en MySQL.

Leerdoelen

Na verwerking van deze module:

  • kun je uitleggen wat een scriptingtaal is;
  • kun je het verschil uitleggen tussen een client-side en een server-side scriptingtaal;
  • kun je de basis van PHP toepassen;
  • kun je uitleggen wat de functie is van echo;
  • weet je hoe je PHP-code van commentaar kan voorzien;
  • weet je hoe variabelen worden gebruikt in PHP;
  • kun je werken met functies en arrays;
  • kun je diverse soorten formulieren gebruiken;
  • weet je het verschil tussen get en post;
  • kun je gegevens uit een database op het scherm tonen;
  • kun je een database opzetten en bijhouden met phpMyAdmin;
  • kun je gegevens via scripts met PHP en MySQL in tabellen invoeren, updaten en verwijderen;
  • kun je een bestaande database importeren met phpMyAdmin;
  • weet je wat sessies zijn en waarvoor sessies worden gebruikt;
  • kun je een formulier maken waarmee kan worden ingelogd;
  • kun je eenvoudige webapplicaties maken.

Bijlagen

Bij deze module horen de volgende bestanden:

  • broncode_javascript.html
  • broncode_php.php
  • template.html
  • formulier.html
  • naw.php
  • buurtvereniging.sql

De bestanden zijn te vinden in het volgende zipbestand:
Bestanden module PHP en MySQL

In de module ga je aan de slag met XAMPP.
Download hier de installatie en werking van XAMMP.

Zo werkt het

Je bent begonnen in de module PHP en MySQL. Deze module bestaat uit meerdere onderdelen. In ieder onderdeel vind je, verdeeld over verschillende pagina's, informatie in de vorm van teksten, afbeeldingen en video's.

Daarnaast ga je zelf aan de slag. Onder het kopje "Aan de slag" vind je steeds toepassingsopdrachten. Deze opdrachten maak je alleen of met een klasgenoot.

Er zijn ook toetsen. Deze herken je aan de blauwe knop met daarop "Adaptieve Toets".
Een toets bestaat uit meerdere vragen. Dat kunnen gesloten vragen zijn, die door de computer worden nagekeken, of open vragen, die moet je zelf nakijken.
Bij een enkele vraag moet je een bestand uploaden.
Van de toetsen wordt, als je ingelogd bent, de voortgang bijgehouden.
Het resultaat vind je onder de knop "Voortgang". Deze voortgang is ook door je docent te bekijken.

Succes met de module PHP en MySQL.

B Scripts

Javascript versus PHP

PHP is net als JavaScript een scriptingtaal. Scripts maken een webpagina interactief. De manier waarop scripts worden uitgevoerd verschilt. Of in de browser van je computer of op een server.

Voor het schrijven van scripts die worden uitgevoerd in een browser gebruik je een client-side scriptingtaal, bijvoorbeeld JavaScript. Scripts die worden uitgevoerd op een server worden geschreven in server-side scriptingtalen, bijvoorbeeld PHP.

Wanneer een HTML-pagina wordt opgevraagd, zal de server waar de webpagina gehost wordt de gevraagde pagina direct doorsturen naar de client. Dit is de computer die gebruikt wordt om de webpagina te bekijken.

Stel dat in deze HTML-pagina een JavaScript-code is opgenomen, dan vindt de verwerking van het script in de browser van de client plaats en dus niet op de server waar de website wordt gehost. Het script wordt op je eigen computer uitgevoerd.

In een HTML-pagina waar PHP in verwerkt is, zal de server de opgevraagde pagina eerst moeten parsen. Het programma dat daarvoor gebruikt wordt, heet de parser. De parser converteert de ingevoerde code naar begrijpelijke structuur voor het programma. Pas als het script geparst is, stuurt de server de opgevraagde pagina naar de client toe.


Het verschil in hoe een client-side script en een server-side script wordt verwerkt, wordt duidelijk als de broncode van een opgevraagde pagina wordt bekeken.

In een HTML-document waarin JavaScript is verwerkt, krijg je na het opvragen van de broncode van het document het volledige script te zien.
In een HTML-document waarin PHP is opgenomen, zie je in de broncode slechts de uitvoer van het script en dus niet het volledige script zelf. Dat is ook logisch als je bedenkt dat de verwerking van het script op serverniveau plaatsvindt.

★ Aan de slag 1

Voor de bouw van dynamische webpagina’s zijn scripts nodig.
Zoek op internet op wat wordt bedoeld met dynamische webpagina’s.

★ Aan de slag 2

  1. Een (bestands)extensie is een toevoeging aan het eind van een bestandsnaam waarmee aangegeven kan worden om wat voor soort bestand het gaat. Wat valt je op als je de extensies van de beide bestanden met elkaar vergelijkt?
  2. Hoe moeten webpagina’s met PHP-script klaarblijkelijk worden opgeslagen?
  3. Open in een browser het bestand broncode_javascript.html. Bekijk de broncode van de webpagina. Dit doe je door met je muis rechts te klikken en in het snelmenu te kiezen voor bron weergeven (IE) of paginabron weergeven (Chrome). In de HTML-code zie je JavaScript-code staan.
  4. Bekijk de onderstaande afbeeldingen. Wat is het grootste verschil tussen de broncode van de pagina met JavaScript en de pagina met PHP-script?
Broncode JavaScript

AFBEELDINGEN ONSCHERP

  1. We bekijken de broncode van het bestand broncode_php.php in een browser.
    Open in Kladblok het bestand broncode_php.php. Vergelijk de broncode met de broncode uit de afbeelding hierboven. In beide gevallen gaat het om de broncode van hetzelfde bestand. Toch zijn er verschillen waarneembaar. Verklaar waarom.
Broncode PHP

 

 

PHP-editor en Notepad++

Voor het verwerken van PHP-scripts hebben we een server nodig. In deze module wordt voor het parsen van PHP-code een online-editor gebruikt.
In de editor kunnen bestanden met PHP-code worden geladen om daarna te worden uitgevoerd.
In deze editor kan ook HTML-code worden verwerkt.

Voor het schrijven van PHP-code kun je gebruik maken van een eenvoudige teksteditor. Notepad++ is zo’n editor. Je kunt het programma gratis downloaden via http://notepad-plus-plus.org/

 

 

In deze module gebruiken we standaard de editor Notepad++ voor het schrijven van de PHP-code.
Deze PHP-code wordt geladen en verwerkt in de voor Enigma ontwikkelde online-editor. Het is ook mogelijk om in de PHP-editor rechtstreeks code te schrijven en deze code te laten verwerken.

C PHP - basiskennis

Een voorbeeld

Na de eerste kennismaking met PHP wordt het tijd om wat uitgebreider naar een voorbeeld van een PHP-script te kijken. In Notepad++ hebben we de code van een PHP-bestand geopend:

<!DOCTYPE html>
<html lang="nl">
      <head>
            <title>Een eenvoudig voorbeeld van een PHP-script</title>
            <meta charset="utf-8">
      </head>
      <body>
            <?php
                 echo "PHP is een voorbeeld van een server-side
                 scriptingtaal.";
            ?>
      </body>
</html>


De PHP-code begint met de tag <?php en eindigt met de tag ?>.

★ Aan de slag 3

Open in een browser www.php.net. Zoek uit wat de functie van echo is in de PHP-code. Dat doe je door op de webpagina gebruik te maken van het tekstveld met daarin de tekst Search.

Een voorbeeld - 2

Een bestand dat PHP-code bevat, moet altijd worden opgeslagen onder de extensie .php. Doe je dat niet, dan kan de server de PHP-code in het document niet parsen. Kies bij het opslaan van een PHP bestand in Notepad++ daarom altijd voor de optie Opslaan als.

Geef daarna aan dat je het bestand wilt opslaan onder de extensie .php. Daarmee voorkom je dat de editor het bestand automatisch als een tekstbestand met de extensie .txt opslaat. Overkomt je dat toch een keer dan kun je het beste in Windows Verkenner het bestand selecteren en een nieuwe naam geven waarbij .txt vervangen wordt door .php.

★ Aan de slag 4

Open Notepad++. Klik in het menu op Syntaxis en selecteer PHP.
Hiermee geef je aan dat bij het opslaan van de code automatisch de extensie .php moet worden toegevoegd.


Neem de onderstaande code over.

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>Een eenvoudig voorbeeld van een PHP-script</title>
           <meta charset="utf-8">
     </head>
     <body>
           <?php
                echo "PHP is een voorbeeld van een server-side
                scriptingtaal.";
           ?>
     </body>
</html>

Sla het bestand op als aandeslag_4.php.

★ Aan de slag 5

Klik op de knop Editor. Laad het bestand aandeslag_4.php in de editor en voer de code uit. Dat doe je als volgt:

  1. Klik in de editor op het tabblad “Hoofdscript”.
  2. Klik daarna op de knop “Laad script”.
  3. Open het bestand aandeslag_4.php.
  4. Klik nu op de knop “Uitvoeren”.
PHP

Wat is het resultaat van de verwerkte PHP-code?

★ Aan de slag 6

Open in Notepad++ het bestand aandeslag_4.php. Verwijder de " aan het einde van de zin "PHP is een voorbeeld van een server-side scriptingtaal.";

Sla het bestand op als aandeslag_6.php.
Voer daarna in de editor de PHP-code uit. Wat gebeurt er bij de verwerking daarvan?

Laten we eens wat dieper ingaan op wat de code van ons eerste PHP-script exact doet. De tag <?php zorgt ervoor dat de server weet dat er omgeschakeld moet worden van HTML naar PHP.
Zolang er geen ?> verschijnt, zal de server alle opdrachten die volgen interpreteren als PHP-opdrachten. Met de tag ?> sluit je het PHP-script af.
De server interpreteert alle volgende opdrachten wederom als HTML-opdrachten. Tussen <?php en ?> plaats je dus al je PHP-opdrachten.

PHP

Een voorbeeld - 3

Een opdracht in PHP wordt ook wel een statement genoemd. Statements worden telkens afgesloten met een puntkomma. In ons eerste voorbeeld wordt het statement echo gebruikt. Door deze opdracht wordt de tekst “PHP is een voorbeeld van een server-side scripting taal.” aan onze webpagina toegevoegd. Zoals je hebt kunnen merken, wordt alleen de tekst tussen de aanhalingstekens op het scherm getoond. De aanhalingstekens zelf krijg je niet te zien.
Het is toegestaan om binnen deze aanhalingstekens ook HTML-tags te gebruiken. Zo is het mogelijk om met de tag <br> binnen het echo-statement een harde return af te dwingen. In sommige HTML-tags moet je gebruik maken van dubbele aanhalingstekens. Binnen een echo-statement veroorzaken deze extra aanhalingstekens problemen.

Het PHP-script wordt wel uitgevoerd als er voor deze extra aanhalingstekens een backslash wordt geplaatst. We noemen dat escapen. Als we in de zin “Het Griekse woord Enigma betekent raadsel.” het woordje Enigma de kleur blauw geven, ontkomen we er niet aan om in de HTML-tag die we daarvoor gebruiken te escapen. Dat is terug te zien in de onderstaande code:

<?php
   echo "Het Griekse woord <span style=\"font-family:arial; color:#8258FA;\"> Enigma </span> betekent raadsel.";
?>

★ Aan de slag 7

Open Notepad++. Voor het schrijven van PHP-code gaan we vanaf nu telkens een template gebruiken. In de template, dit is een voorbeelddocument, is de HTML-code gegeven. Je hoeft de HTML-code dan niet telkens weer opnieuw uit te schrijven. Let er wel op dat je de template nadat er PHP-code aan is toegevoegd, opslaat als een PHP-bestand (extensie .php). Anders kan de PHP-code niet worden verwerkt.

Open in Notepad++ het bestand template.html. Dit bestand staat onder het menu-item Bijlagen in deze module. Kies in Notepad++ in het menu bij Syntaxis voor PHP. Schrijf nu in de body van de HTML-code een script waarmee je met het echo statement de tekst “Amsterdam is de hoofdstad van Nederland” op het scherm kunt afbeelden. Sla het bestand op als aandeslag_7.php. Laad de code in de PHP-editor en voer de code uit.

PHP

★ Aan de slag 8

Open in Notepad++ het bestand aandeslag_7.php.
Plaats de tekst midden op de regel in lettergrootte kop 2.
De letters van het woord Amsterdam moeten de kleur blauw krijgen.

Voor het CSS-gedeelte maak je gebruik van de inline style.
Het lettertype is Arial, voor blauw gebruiken we de kleurcode #8258FA en voor het centreren van de tekst wordt center gebruikt. Met het span-element kan een beperkt deel van het HTML-document worden ingesloten.

Sla het bestand op onder de naam aandeslag_8.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

★ Aan de slag 9

Open in Notepad++ het bestand template.html.
Maak met 3 <hr> tags en het echo-statement de vlag van Nederland.

Voor de opmaak in CSS gebruik je de inline style.
Gebruik voor de hoogte van de kleuren height:60px; en voor de breedte width:300px;. Een kleur geef je aan met background-color: met daarachter de kleurcode. Voor rood is dat #ff0000, voor wit #ffffff en voor blauw #0000ff.

Sla deze uitwerking op als aandeslag_9.php en test de code in de editor.

PHP

★ Aan de slag 10

Open in Notepad++ het bestand template.html. Schrijf een eenvoudig PHP-script dat de namen van de landen Frankrijk, Ierland, Griekenland, Verenigde Staten, Japan, Zuid-Afrika en Marokko onder elkaar laat zien. Sla het bestand op als aandeslag_10.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

Commentaar

PHP-code kun je op meerdere manieren van commentaar voorzien:

  1. // één regel commentaar voorafgegaan door een dubbele slash.
  2. # één regel commentaar voorafgegaan door een hekje.
  3. /* meerregelig commentaar wordt omsloten door slash-asterisk
    ……….
    */ asterisk-slash

Door het toevoegen van commentaar vergroot je het inzicht in de werking van de geschreven PHP-code. Dat kan handig zijn voor jezelf als je later nog eens terugkijkt naar wat je gedaan hebt. Maar het is ook handig als je met meerdere mensen aan dezelfde documenten werkt.

 

 

D Variabelen in PHP

Kenmerken

In de meeste programmeertalen moeten we voordat we gebruik kunnen maken van variabelen eerst vertellen dat er variabelen bestaan en aangeven van welk type deze variabelen zijn. We noemen dat het declareren van variabelen. In PHP hoef je variabelen niet te declareren. Je kunt ze gewoon meteen gebruiken. Dit in tegenstelling tot bijvoorbeeld Java. De code voor een integer met de naam getal waar de waarde 10 aan wordt toegekend, wordt in Java int getal = 10;. In PHP hoef je het type van de variabele niet aan te geven en wordt het $getal = 10;.

In PHP beginnen variabelen altijd met het dollarteken ($). Het dollarteken moet worden gevolgd door een letter of een underscore. De rest van de naam van een variabele kan bestaan uit letters, cijfers en underscores.

Voorbeelden van PHP-variabelen kunnen zijn:

  • $i
  • $land_id
  • $hoofdstad
  • $inwoners
  • $query

PHP-variabelen zijn hoofdlettergevoelig. $land_ID is een andere variabele dan $land_id. In PHP worden aan variabelen waarden toegekend. Het toekennen van een startwaarde aan een variabele noemen we initialiseren. Voor het toekennen van een waarde wordt het is-teken (=) gebruikt. De toekenning wordt afgesloten, net zoals alle statements, met een puntkomma (;).

Voorbeelden van toekenningen aan variabelen kunnen zijn:

  • $i = 0;
  • $land_id = 3;
  • $hoofdstad = "Athene";
  • $inwoners = 10700000;
  • $query = "SELECT * FROM landen";

Zoals je ziet, is het niet nodig om aan te geven van welke type een variabele is. Uit de naam van de variabele is niet op te maken of we te maken hebben met een string ($hoofdstad) of met een integer ($inwoners). PHP zoekt zelf uit om wat voor soort variabele het in het script gaat.

Met het echo-statement kunnen de diverse waarden van variabelen op het scherm worden getoond. De opdracht echo "De hoofdstad van Griekenland is $hoofdstad."; levert als resultaat op: De hoofdstad van Griekenland is Athene. Uiteraard moet er dan wel een variabele met de naam $hoofdstad bestaan waaraan de waarde Athene is toegekend.

★ Aan de slag 11

Open in Notepad++ het bestand aandeslag_7.php. Schrijf de code voor een variabele $hoofdstad in de header van het document. Ken aan deze variabele de waarde Amsterdam toe.
Vervang nu in het echo-statement Amsterdam door de variabele $hoofdstad en zorg ervoor dat de zin “Amsterdam is de hoofdstad van Nederland” op het scherm verschijnt.
Sla het gewijzigde bestand op als aandeslag_11.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

★ Aan de slag 12

Open in Notepad++ het bestand template.html. Schrijf een script waardoor de zin ”Amsterdam telde eind 2015 821702 inwoners” op het scherm verschijnt.
Maak gebruik van de variabelen $hoofdstad en $inwoners in de header van het HTML-document. Bewaar het bestand onder de naam aandeslag_12.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

Concatenatie

In het echo-statement zien we tussen de functie en de tag een punt staan. Deze punt dient ervoor om gegevens aan elkaar te plakken. We noemen dat concatenatie. We kunnen verschillende strings aan elkaar plakken, maar ook variabelen en spaties zoals in onderstaand script is te zien.

   <?php
             $dag =1 ;
             $maand = "januari";
             $gebeurtenis = "nieuwjaarsdag";
             echo $dag . " " . $maand . "is" . $gebeurtenis;
   ?>

Het resultaat van dit stukje code is dat de zin “1 januari is nieuwsjaardag” naar het scherm wordt geschreven:


De dubbele aanhalingstekens worden niet weergegeven. Met het commando echo wordt alles wat tussen de dubbele aanhalingstekens staat als letterlijke tekst naar het scherm weggeschreven. De namen van de variabelen staan niet tussen dubbele aanhalingstekens. Doen we dat wel dan worden alsnog de waarden van de verschillende variabelen getoond. Willen we dat de variabelen als letterlijke tekst wordt afgebeeld, dan plaatsen we de namen van de variabelen tussen enkele aanhalingstekens.

De bijbehorende code en het resultaat worden dan:

   <?php
             $dag =1 ;
             $maand = "januari";
             $gebeurtenis = "nieuwjaarsdag";
             echo '$dag' . " " . '$maand' . "is" . '$gebeurtenis;'
   ?>


Concatenatie - 2

Binnen het echo-statement kunnen we te maken krijgen met het zogenaamd escapen. Bij het escapen van tekens wordt er een backslash (\) geplaatst voor een teken. Daardoor krijgt dit teken een bijzondere betekenis. Voorbeelden hiervan zijn:

  \n - nieuwe regel
  \$ het dollarteken
  \" het dubbele aanhalingsteken


In de zin “Het twee minuten durende reclamefilmpje voor “Chanel 5” heeft ongeveer $61.000.000 gekost” is escapen onontkoombaar wanneer je deze zin door middel van het echo-statement op het scherm wilt laten verschijnen. Het echo-statement wordt:

echo "Het twee minuten durende reclamefilmpje voor \"Chanel\" heeft ongeveer \$61.000.000 gekost.";

Het resultaat na verwerking van het script:


Zou je in deze zin de backslashes in de echo weglaten, dan zal bij het uitvoeren van het script een foutmelding getoond worden. Door het gebruik van dubbele aanhalingstekens bij het woordje Chanel 5 geef je eigenlijk aan dat het echo-statement eindigt voor het woordje Chanel 5. De rest van de zin valt buiten de echo waardoor de PHP-code niet geparst kan worden. Dit voorkom je door gebruik te maken van backslashes.

Datatypen

PHP ondersteunt verschillende typen variabelen. De belangrijkste datatypen waarmee je bij PHP te maken kunt krijgen zijn :

  1. integers of gehele getallen;
  2. doubles of komma getallen (doubles worden ook wel floating point numbers genoemd);
  3. booleans (true/false of waar/onwaar);
  4. strings (letters en andere tekens eventueel gecombineerd met cijfers);
  5. arrays (rijen of reeksen);
  6. objecten.

In PHP bestaan functies waarmee gecontroleerd kan worden welk datatype een variabele heeft. We hebben immers gezien dat bij het schrijven van de code voor een variabele niet hoeft te worden aangegeven van welk type een variabele is. Hoe weten we dan of de variabele $getal van het type int is? Daarvoor beschikt PHP over de functie is_int().

In het volgende script wordt gebruik gemaakt van verschillende functies waarmee het type van een variabele kan worden achterhaald:


 

<!DOCTYPE html>
<html lang="nl">
      <head>
             <title>datatypen</title>
             <meta charset="utf-8">
             <?php
                        $getal = 12;
              ?>
      </head>
      <body>
             <?php
                        echo is_int($getal) . "<br>";
                        echo is_numeric($getal) . "<br>";
                        echo is_bool($getal) . "<br>";
             ?>
      </body>
</html>


De uitkomst zal true zijn als het klopt en false als het niet het geval is. Bij true verschijnt op het scherm de waarde 1.
Bij false zou je een 0 verwachten, maar dat is niet het geval. False krijgt de waarde NULL en dat is letterlijk niets.

★ Aan de slag 13

Neem de code uit het voorbeeld over in Notepad++ Sla het bestand als aandeslag_13.php. Laad de code in de PHP-editor en voer de code uit. Controleer of de uitvoer van het script inderdaad twee keer de waarde 1 en één keer niets teruggeeft.

PHP

★ Aan de slag 14

Geef de variabele $getal nu de waarde true. Voer het script uit. Wat verandert er in de uitvoer op het scherm?

PHP

Operatoren

In PHP wordt voor het uitvoeren van bewerkingen op variabelen en hun waarden gebruik gemaakt van operatoren. PHP kent verschillende soorten operatoren. We bespreken er een aantal.

Voor het uitvoeren van de berekeningen worden rekenkundige operatoren gebruikt.

Operatie Rekenkundige bewerkingen
  x + y   x wordt bij y opgeteld als beide getallen numeriek zijn
  x - y   y wordt van x afgetrokken
  x * y   x wordt vermeningvuldigd met y
  x / y   x wordt gedeeld door y
  x % y   modules van x en y (het getal dat overblijft als je x door y deelt)
x^y of pow(x,y)   x tot de macht y

 

Vergelijkingsoperatoren vergelijken de waarden van twee variabelen en geven een boolean waarde waar (true) of onwaar (false) terug.

Vergelijking Waar als
  x == y   Als x en y qua waarden gelijk aan elkaar zijn
  x != y   als x en y ongelijk aan elkaar zijn
  x === y   x identiek is aan y, zowel qua datatype als waarde
  x > y   x groter is dan y
  x < y   x kleiner is dan y
  x >= y   x groter is dan of gelijk aan y
  x <= y   x kleiner is dan of gelijk aan y

 

Logische operatoren

Operatie Waar als
  x && y (x AND y)   x en y beiden waar zijn
  x || y  (x OR y)   of x of y waar is
  !x   x onwaar is

E Controlestructuren

Inleiding

De scripts die we tot nu toe gezien hebben, zijn scripts waarin PHP de statements van boven naar beneden uitvoert.
De volgorde waarin de opdrachten worden afgehandeld, wordt ook wel de flow van het programma genoemd. Soms willen we invloed uitoefenen op het verloop, dus op de flow, van het programma. Daarvoor bestaan net zoals in andere programmeertalen in PHP controlestructuren.

if...else-statement

In het volgende script wordt gecontroleerd of getal_1 deelbaar is door getal_2 (getal_1 % getal_2 == 0). Zo ja dan verschijnt de melding “$getal_1 is deelbaar door $getal_2” op het scherm. Indien het niet het geval is, lezen we “$getal_1 is niet deelbaar door $getal_2”.

 <?php
         $getal_1 = 1248;
         $getal_2 = 13;
         $uitkomst = $getal_1 % $getal_2;
         if ($uitkomst ==0) {
               echo "$getal_1 is deelbaar door $getal_2";
         }
         else {
               echo "$getal_1 is niet deelbaar door $getal_2";
         }
   ?>


Ons voorbeeld waarin twee getallen met elkaar worden vergeleken, bevat een enkelvoudig if-statement met een else component. Na de expressie (voorwaarde) volgt ofwel een enkelvoudig statement of een opeenvolging van statements tussen accolades. Elk statement wordt afgesloten met een puntkomma.

Er mag geen puntkomma achter het sluithaakje van de voorwaarde en ook niet na else worden geplaatst. De regels die hier gelden, zijn ook van toepassing op het for-, het while- en het switch-statement.

Het gebruik van else is niet verplicht. Er kan ook alleen een if-statement worden gebruikt. Wordt er niet voldaan aan de voorwaarde die wordt gesteld binnen de haakjes, dan gaat PHP verder met het uitvoeren van de eerstvolgende regel na het if-statement.

for-statement

Een for-statement is altijd opgebouwd uit drie onderdelen. Het eerste onderdeel van het for-statement bestaat uit de initialisatie van een variabele, het tweede onderdeel bestaat uit een voorwaarde en tot slot volgt een stapopdracht. De drie onderdelen worden door puntkomma’s van elkaar gescheiden.

Ter illustratie nemen we een programma dat van 20 terugtelt naar 1 en de resultaten daarvan op het scherm laat zien. De code en de uitvoer van het programma zijn:

   <?php
         for($i=20;$i>=1;$i--)
         echo "$i<br>";
   ?>


Het resultaat is:

In het for-statement geven we met de eerste opdracht aan dat er een variabele $i bestaat. We kennen aan deze variabele de waarde 20 toe. Vervolgens luidt de voorwaarde “zolang $i groter is dan of gelijk is aan 1”.
Daarna volgt de stapopdracht. In deze stapopdracht wordt $i telkens met 1 verlaagd. Hier had ook kunnen staan $i = $i – 1;. De notatie $i-- betekent dus hetzelfde als $i = $i – 1.
Zolang aan de voorwaarde van het for-statement wordt voldaan, wordt de nieuwe waarde van $i telkens op een nieuwe regel onder de oude waarde van $i op het scherm getoond. Dat gebeurt net zolang totdat er niet meer aan de voorwaarde van het for-statement wordt voldaan. We hebben hier te maken met een herhalingslus. Als telkens dezelfde code continue achter elkaar wordt uitgevoerd, spreken we ook wel van een loop.

★ Aan de slag 15

Open in Notepad++ het bestand template.html.
Schrijf een script dat de getallen 1 tot en met 20 bij elkaar optelt en de som van deze getallen op het scherm laat zien.
Gebruik in je code het for-statement.
Sla je opdracht op als aandeslag_15.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

while-statement

We kunnen het programma dat van 20 terugtelt naar 1 en de resultaten daarna op het scherm toont, zo herschrijven dat er in plaats van een for-loop een while-statement wordt gebruikt. Het resultaat van het programma blijft hetzelfde. De code wordt:

   <?php
         $i = 21;
         while($i>1) {
               $i--;
               echo "$i<br>";
         }
    ?>

★ Aan de slag 16

Open in Notepad++ het bestand aandeslag_15.php.
Herschrijf het script zo dat er in plaats van een for-loop gebruik gemaakt wordt van het while-statement.
Sla het bestand op als aandeslag_16.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

switch-statement

Als er een keuze gemaakt kan worden uit meerdere opties is het handig om een switch te gebruiken. Stel je wilt uit een reeks getallen je geluksgetal aangeven, dan kun je dat o.a. door een switch doen.
De code voor die switch ziet er dan bijvoorbeeld als volgt uit:

<?php
   $geluksgetal = 7;
   switch($geluksgetal) {
      case 3:
         echo "Mijn geluksgetal is $geluksgetal";
         break;
      case 9:
         echo "Mijn geluksgetal is $geluksgetal";
         break;
      case 7:
         echo "Mijn geluksgetal is $geluksgetal";
         break;
      case 13:
         echo "Mijn geluksgetal is $geluksgetal";
         break;
      default:
         echo "Ik geloof niet in geluksgetallen";
   }
?>

De switch-syntax werkt als volgt:

   switch(input) {
      case waarde 1:
      code die moet worden uitgevoerd als input = waarde 1;
      break;
      case waarde 2:
      code die moet worden uitgevoerd als input = waarde 2;
      break;
      case etc.
      default:
      code die moet worden uitgevoerd als input ≠ alle cases;
   }

De input is meestal een variabele. Als aan een bepaalde voorwaarde is voldaan, wordt de code die daarachter staat uitgevoerd en de switch via de break verlaten. Als aan geen van de gestelde voorwaarden wordt voldaan, wordt de code uitgevoerd die achter default staat.

F Functies

Wat is een functie?

In PHP-scripts tref je vaak verschillende taken aan die moeten worden afgehandeld. Sommige taken moeten zelfs meer dan één keer worden uitgevoerd. In die gevallen is het handig om voor de uit te voeren taak een functie te schrijven. In de functie leg je één keer vast wat er moet gebeuren. Door de functie aan te roepen, wordt het uitvoeren van de beschreven taak geregeld. Stel je maakt een website en je wilt op elke pagina een copyright afgebeeld hebben. Daarvoor zou je een aparte functie kunnen schrijven.
Een functie in PHP bestaat in het algemeen uit 3 verschillende onderdelen:

  • De functienaam voorafgegaan door het woord function en een spatie.
  • Haakjes () achter de functienaam waarbinnen door een komma gescheiden argumenten kunnen voorkomen.
  • De functie body omsloten door accolades { } .

Het format van een functie ziet er dan als volgt uit:

   function functienaam($arg1, $arg2 , …, $arg)
   {
       code sectie
   }

Voor het afbeelden van het copyright hebben we de onderstaande functie geschreven:

   function show_copyright()
   {
       echo "Copyright &copy; 2008 ENIGMA. Alle rechten
       voorbehouden.";
   }


De naam van de functie is show_copyright. De functie heeft geen argumenten.


Als je in een PHP-script deze functie aanroept, wordt de copyright regel afgebeeld op de plek waar de functie wordt aangeroepen. Het enige wat je moet onderhouden is het jaartal in de functie. Het aanroepen van de functie kan door de opdracht show_copyright(); in het PHP-script te plaatsen. Stel dat je in de show_copyright-functie ook het huidige kalenderjaar wilt opnemen en dat je geen zin hebt om dit elk jaar weer aan te passen. Het is dan mogelijk om gebruik te maken van een ingebouwde PHP-functie die dat voor jou doet. Daarvoor gebruiken we de functie date(). De code luidt dan:

<?php
    function show_copyright()
    {
      echo "Copyright &copy; 2008 - " . date("Y") . " ENIGMA.         Alle rechten voorbehouden.";
    }
    show_copyright();
?>


Als functies binnen functies gebruikt worden, spreken we van het nesten van functies. De copyrightregel wordt nu als volgt op het scherm weergegeven:


Door het aanroepen van de functie show_copyright() kun je op elke webpagina waar je het copyright wilt laten zien, dat verwezenlijken.

PHP heeft een grote hoeveelheid standaardfuncties die je uitgebreid gedocumenteerd kunt raadplegen in de functielijst op www.php.net. Maar naast die standaardfuncties biedt PHP je ook de mogelijkheid zelf functies te maken. Dit kan dus handig zijn als je op webpagina’s regelmatig dezelfde taken wilt laten uitvoeren.

★ Aan de slag 17

Het kan zijn dat je als webmaster van verschillende websites eenzelfde copyright wilt gebruiken. Alle websites hebben verschillende namen. Nu kun je een variabele $site_naam introduceren. Met behulp van deze variabele kun je nu elke website voorzien van een unieke copyright regel. Je geeft nu de functie show_copyright() het argument $site_naam mee. Stel deze webmaster past de functie show_copyright op deze manier aan en wil website www.enigma-online.nl in de regel van het coypright laten zien. De uitvoering van het script levert als resultaat op:


Open in Notepad++ het bestand template.html. Schrijf het script voor het tonen van het copyright volgens bovenstaande aanwijzingen. Sla de uitwerking op als aandeslag_17.php. Laad de code in de PHP-editor en voer de code uit.

PHP

★ Aan de slag 18

Open in Notepad++ het bestand template.html. Schrijf een script waarin je gebruik maakt van een zelf te schrijven functie toon_vlag() waarmee een plaatje van de Nederlandse vlag kan worden afgebeeld. In de PHP-editor gebruiken we voor het plaatje van de vlag een URL. Verwerk daarom de onderstaande URL in je eigen geschreven code.
Sla de uitwerking op met als naam aandeslag_18.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

 

Resultaat

 

 

★ Aan de slag 19

Open in Notepad++ het bestand template.html. Schrijf een functie tafel_vier() die de tafel van vier op het scherm afdrukt. Maak in de functie gebruik van het for-statement. Sla het bestand op als aandeslag_19.php Laad de code in de PHP-editor en voer de code uit.

PHP

 

Resultaat

 

Terugkeerwaarde

Soms is het handig om functies te schrijven die een waarde als output opleveren. Dit wordt mogelijk gemaakt door bij het aanroepen van de functie aan een variabele een waarde toe te kennen. Het maakt daarbij niet uit welk datatype die variabele heeft.

Het volgende voorbeeld zal een en ander verduidelijken. Stel we hebben een bedrijf en we moeten de verkoopprijs van producten gaan bepalen. Daar hoort in veel gevallen het tarief van 21% BTW bij. Het zou handig zijn als we in een functie in een keer het eindbedrag voor de klant zouden kunnen bepalen. We noemen deze functie bereken_eindprijs().

Hoe gaan we te werk?

  • Er moet een variabele $prijs en een variabele $btw zijn.
  • Er moet een functie bereken_eindprijs() geschreven worden waarin de parameters $b en $p worden opgenomen.
  • Binnen de functie moet de verkoopprijs worden berekend en teruggegeven met return().
  • De functie moet binnen het script worden aangeroepen.
  • In een boodschap moet de variabele $verkoopprijs worden meegedeeld.

Het script wordt dan:

<?php
    $prijs = 24.95;
    $btw = .21;       //Je hoeft niet 0.21 te typen.
      function bereken_eindprijs($p, $b)
      {
          return $p + ($p*$b);
      }
      // Let op hoe de functie bereken_eindprijs() de waarde terug geeft.
      $eindprijs = bereken_eindprijs($prijs, $btw);
      // Rond het bedrag af op twee decimalen.
      $eindprijs = number_format($eindprijs, 2);
      echo "Verkoopprijs zonder btw = &euro; $prijs<br>\n";
      $tarief = 100 * $btw;
      echo "BTW-tarief = $tarief<br>\n";
      echo "De eindprijs = &euro; $eindprijs";
?>

Met als resultaat:

Het is ook mogelijk om functies met returnwaarden rechtstreeks in controlestructuren te gebruiken.
Stel we willen online gaan shoppen bij een webwinkel. Deze webwinkel hanteert voor klanten een kredietlimiet. Telkens als een klant iets in zijn winkelwagentje stopt, wordt het bedrag dat hij moet betalen bij de andere gekochte producten opgeteld en wordt dat totaalbedrag vergeleken met de kredietlimiet van de klant. Als de toegestane limiet wordt overschreden, krijgt de klant een melding dat de limiet is overschreden en met welk bedrag. Indien de limiet nog niet is overschreden, krijgt de klant een melding voor welk bedrag er nog aankopen kunnen worden gedaan. De code daarvoor wordt:

<?php
   $aankoopbedrag = 234.50;
   $kredietlimiet = 500.00;
   function check_kredietlimiet($aankoopbedrag, $kredietlimiet)
   {
           if($aankoopbedrag > $kredietlimiet) {
                return false;
           }
           else {
                return true;
           }
   }
   if (check_kredietlimiet($aankoopbedrag, $kredietlimiet)) {
           $bestedingsbedrag = number_format(($kredietlimiet -
           $aankoopbedrag),2);


           echo "Winkel gerust nog nog even door! <br>";
           echo "U bent nog &euro; " . $bestedingsbedrag . " verwijderd
           van uw kredietlimiet.";
   }
   else {
           $overschrijding = number_format(($aankoopbedrag -
           $kredietlimiet),2);
           echo "Uw aankoopbedrag overstijgt de kredietlimiet met &euro;
           ". $overschrijding ."!";
   }
?>

 

Hoe werkt de functie check_kredietlimiet()?
De functie heeft 2 parameters: $aankoopbedrag en $kredietlimiet. Als het aankoopbedrag groter is dan de kredietlimiet geeft de functie de returnwaarde of terugkeerwaarde 0 (false). Zo niet dan is de returnwaarde 1(true). Als de functie bij de check een 0 geeft, betekent dat dat de vergelijking $aankoopbedrag > $kredietlimiet niet klopt en dus het aankoopbedrag de kredietlimiet niet overstijgt, waardoor dus een 1 als returnwaarde moet worden weergegeven.

De functie include()

Als je meerdere functies gebruikt die vaker terugkomen, is het handig een zogenaamde functiebibliotheek aan te leggen. Je kunt alle gebruikte functies in één PHP-bestand zetten en dat bijvoorbeeld opslaan als functions.php. Het enige wat je dan nog te doen hebt, is dat bestand inladen in een PHP pagina door middel van de PHP-functie include().
De code om de eindprijs te berekenen zou er dan als volgt kunnen uitzien:

 

<?php
        include("functions.php");


        $prijs = 24.95;
        $btw = .21;

        $eindprijs = bereken_eindprijs($prijs,$btw);
        $eindprijs = number_format($eindprijs,2);

        echo "Verkoopprijs zonder BTW = &euro; $prijs<br>\n";
        $tarief = 100 * $btw;
        echo "BTW-tarief = $tarief<br>\n";
        echo "De eindprijs = &euro; $eindprijs";
   ?>

 

In het bestand functions.php staat dan de definitie van de functie bereken_eindprijs
Dus:

  <?php
        function bereken_eindprijs($p, $b)
        {
             return $p + ($p*$b);
        }
   ?>

G Arrays

Wat zijn arrays?

In bijna alle programmeer- en scriptingtalen is het mogelijk om met arrays te werken. Zo ook in PHP. In dit onderdeel gaan we kijken naar wat arrays zijn en hoe je ze kunt gebruiken.

Tot nu toe hebben we gewerkt met variabelen die op zichzelf staan. Voorbeelden daarvan zijn de variabelen $prijs en $btw die gebruikt worden in het eerder besproken script waarmee we de eindprijs van een product berekenen. Vaak staan gegevens echter niet los van elkaar, maar vormen ze een reeks. Voorbeelden zijn een literatuurlijst voor het vak Engels, een adreslijst van je klasgenoten of een overzicht van landen die behoren tot de Europese Unie.

Reeksen kunnen we vastleggen met behulp van een array. Je zou een array kunnen vergelijken met een variabele die meerdere waardes (boeken, adressen of landen) kan bevatten.
De verschillende items van een array worden elementen genoemd. Voor het verwijzen naar een element wordt gebruik gemaakt van de indexwaarde die hoort bij dat element. Aan de hand van de index kun je de positie van het element in de array bepalen. Je kunt de individuele waarden uit een array benaderen door gebruik te maken van dat indexgetal.

Bekijk maar eens het onderstaande stukje PHP-code:

<?php
    $landenBenelux = array("Nederland", "België", "Luxemburg");
    echo $landenBenelux[0];
?>

De Benelux, sinds 2010 spreken we officieel van de Benelux-unie, bestaat uit de landen Nederland, België en Luxemburg. We plaatsen deze landen in een array. In de eerste regel van de code wordt de array gevuld. In dit geval hebben we de array $landenBenelux genoemd en gevuld met 3 waardes, namelijk de strings: "Nederland", "België” en "Luxemburg".

In de tweede regel staat een echo-statement. Het eerste element uit de array wordt afgedrukt. Het resultaat van deze code zal dus zijn dat er "Nederland" op het scherm wordt afgedrukt.
Let op: de indexwaarden in een array beginnen altijd bij 0.
Het eerste element, in dit geval Nederland, heeft index 0. De array $landenBenelux bestaat uit 3 elementen waarvan de indexwaarden zijn 0 tot en met 2.

★ Aan de slag 20

Open in Notepad++ het bestand template.html. Schrijf een script waarbij gebruik gemaakt wordt van de array $provincies Deze array bevat de namen van de Nederlandse provincies. Na uitvoer van het PHP-script is een overzicht van alle provincies te zien. Sla het bestand op als aandeslag_20.php
Laad de code in de PHP-editor en voer de code uit.

PHP

 

Resultaat

 

★ Aan de slag 21

Open in Notepad++ het bestand template.html. Schrijf een script waarbij gebruik gemaakt wordt van de array $nummersQueen. Deze array bevat 5 hits van de popgroep Queen. Achtereenvolgens worden de nummers Killer Queen, Somebody to love, Bohemian Rapsody, We are the champions en Radio ga ga als elementen toegevoegd aan de array. Het script toont de zin “In 1975 stond het nummer Bohemian Rapsody 13 weken genoteerd in de Nederlandse top 40” op het scherm. Zorg ervoor dat bij het tonen van de zin op het scherm de titel van het nummer uit de array $nummersQueen wordt opgehaald. Sla het bestand op als aandeslag_21.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

 

Resultaat



Je kunt de waardes van een array veranderen. In het onderstaande script wordt allereerst het element met index 0 op het scherm afgedrukt. Vervolgens wordt aan index 0 een nieuwe waarde toegekend. Deze waarde wordt daarna ook op het scherm getoond.

<?php
    $landenBenelux = array("Nederland", "België", "Luxemburg");
    echo $landenBenelux[0] . "<br>";
    $landenBenelux[0] = "België";
    echo $landenBenelux [0];
?>

★ Aan de slag 22

In de aan de slag opdrachten 20 en 21 heb je waarden van een array uitgelezen. In deze opdracht ga je niet alleen de waarden van een array uitlezen. Je gaat een script schrijven dat zelf bepaalde elementen van een array gaat verwisselen. Het script zorgt ervoor dat de array opnieuw wordt uitgelezen en dat er 6 strings achter elkaar op één regel worden afgedrukt.

  • Vul een array met 6 strings
  • Druk deze 6 strings achter elkaar af met een spatie ertussen
  • Verwissel het eerste met het laatste element van de array
  • Druk de 6 strings opnieuw af op een regel

De uitvoer zou er zo uit kunnen zien:


PHP

Handige functies

Er bestaan handige functies die je in combinatie met arrays kunt gebruiken. Bijvoorbeeld de functie count():

   <?php
        $mijnArray = array(1,2,3,4,5);
        echo count($mijnArray);
        echo "<br>";
        $mijnArray[] = 6;
        echo count($mijnArray);
   ?>


Met de functie count()kun je de lengte van een array opvragen. Dat betekent dat het resultaat het totaal aantal elementen in de array is.
De regel $mijnArray[] = 6 voegt het getal 6 toe als element achter aan de array.
In de code wordt de lengte van de array afgedrukt. Vervolgens wordt er een element aan de array toegevoegd. Tenslotte wordt weer de lengte van de array afgedrukt. Na uitvoer van het script zien we:
5
6

Er bestaan ook functies om de elementen van een array om te draaien en om de elementen te sorteren:

<?php
    $mijnArray = array(2,1,5);
    echo $mijnArray[0] . " , " . $mijnArray[1] . " , " . $mijnArray [2];
    echo "<br>";



    $mijnArray2 = array_reverse($mijnArray);
    echo $mijnArray2[0] . " , " . $mijnArray2[1] . " , " .$mijnArray2[2];
    echo "<br>";

    sort($mijnArray);
    echo $mijnArray[0] . " , " . $mijnArray[1] . " , " . $mijnArray[2];
    echo "<br>";
?>


In het eerste blok wordt een array gevuld met 3 elementen en afgedrukt. In het tweede blok wordt die array omgedraaid en afgedrukt. In het derde blok wordt de array gesorteerd en op het scherm gezet. De functie array_reverse() laat de array waarop deze functie wordt toegepast onveranderd. De functie sort() daarentegen vervangt de oorspronkelijke array door de gesorteerde array.

Met als resultaat:

★ Aan de slag 23

Open in Notepad++ het bestand template.html. Schrijf een script dat gebruik maakt van een array met 10 verschillende getallen erin. Sorteer het array in aflopende volgorde en druk de getallen af. Gebruik voor het aflopend sorteren de functie rsort(). Sla het bestand op als aandeslag_23.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

 

Resultaat

 

For-loops

Het handige aan arrays is dat je makkelijk door de elementen heen kunt lopen met een lus. Daarvoor kan gebruik gemaakt worden van de for-loop. In het volgende stukje script wordt een for-statement gebruikt om de woorden pindakaas is lekker onder elkaar op het scherm af te beelden:

   <?php
         $mijnArray = array("pindakaas","is","lekker");
         for ($i=0; $i<3; $i++) {
               echo $mijnArray[$i];
               echo "<br>";
         }
   ?>

We kunnen dit ook nog op een nog slimmere manier:

   <?php
         $mijnArray = array("pindakaas","is","lekker");
         for ($i=0; $i<count($mijnArray); $i++) {
               echo $mijnArray[$i];
               echo "<br>";
         }
   ?>

★ Aan de slag 24

We kijken terug op de pagina "For-loops"

  1. Wat is het verschil tussen de twee voorbeelden?
  2. Waarom zal de uitkomst van de twee voorbeelden hetzelfde zijn?
  3. Waarom is het tweede voorbeeld beter?

★ Aan de slag 25

Open in Notepad++ het bestand template.html Maak een array met de naam $weekdagen. Vul de array met de dagen van de week beginnend bij maandag. Schrijf nu een script waarmee je met behulp van een for-loop de weekdagen onder elkaar kunt afbeelden. Sla het bestand op als aandeslag_25.php Laad de code in de PHP-editor en voer de code uit.

PHP


 

Resultaat

 

 

★ Aan de slag 26

Open in Notepad++ het bestand aandeslag_25.php. Pas het script zo aan dat de weekdagen nu automatisch genummerd worden. Je moet daarbij denken aan een geordende lijst waarbij de weekdagen een nummer krijgen. Zondag is 1 en maandag is 2. Sla het bestand op als aandeslag_26.php.
Laad de code in de PHP-editor en voer de code uit.

PHP


 

★ Aan de slag 27

Open in Notepad++ het bestand aandeslag_20.php. Herschrijf het script zo dat er voor het tonen van de namen van de provincies gebruik gemaakt wordt van de functie toon_provincies(). Gebruik in deze functie een for-statement. Sla het bestand op als aandeslag_27.php. Gebruik de editor en voer de code uit.

PHP

 

Resultaat

 

★ Aan de slag 28

Open in Notepad++ het bestand template.html. Schrijf een script dat de namen van de provincies met de bijbehorende hoofdsteden op het scherm laat zien. De namen van de provincies staan in de array $provincies. De namen van de hoofdsteden in de array $hoofdsteden. Er wordt in het script gebruik gemaakt van één functie: toon_provhoofd(). Door het aanroepen van deze functie worden de provincies en de bijbehorende hoofdsteden op het scherm getoond.
Sla het bestand op als aandeslag_28.php. Gebruik de editor en voer de code uit.

PHP

★ Aan de slag 29

Open in Notepad++ het bestand template.html. Schrijf een script dat gebruik maakt van een array met 10 rapportcijfers en het gemiddelde van deze cijfers afdrukt op het scherm. Maak gebruik van het for-statement. Sla het bestand op als aandeslag_29.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

 

Resultaat

 

2D arrays

We hebben al gezien dat de elementen van een array verschillende soorten waarden kunnen hebben, bijvoorbeeld getallen of strings. Maar wat dacht je ervan als de elementen van een array ook arrays zijn? Dan krijg je een array van arrays, ofwel een tweedimensionaal array. Bekijk de volgende code:

   <?php
        $rij1 = array(1,2,3);
        $rij2 = array(4,5,6);
        $rij3 = array(7,8,9);
        $multi = array($rij1, $rij2, $rij3);
        echo ($multi[0][2]);
   ?>

In de code worden eerst 3 arrays van 3 elementen aangemaakt. Vervolgens wordt er een nieuw array gemaakt met als elementen de bovenstaande arrays. Daarna wordt het derde element van de eerste array afgedrukt naar het scherm. Let weer op dat we beginnen te tellen bij 0! De uitvoer zal het getal 3 zijn.

Ook 2D arrays kunnen met een loop worden doorlopen. Omdat je twee dimensies hebt, heb je ook een dubbele loop nodig. Dit heeft deze vorm:

   for ($i=0; $i<10; $i++) {
        for ($j=0; $j<10; $j++) {
               //code voor elk element
        }
   }

★ Aan de slag 30

Open in Notepad++ het bestand template.html. Maak een array met 10 rapportcijfers. Gebruik de functie sort() om het hoogste en het laagste cijfer te vinden. Sla het bestand op als aandeslag_30.php.
Laad de code in de PHP-editor en voer de code uit.

PHP

Arrayfuncties en databases

Als je met PHP en MySQL gegevens uit een MySQL database haalt, kom je ook in aanraking met arrays. Als je een query uitvoert en de functie mysqli_fetch_array() gebruikt, krijg je een rij uit de database als array terug. De elementen van dit array zijn de waardes van de verschillende velden van die regel uit de database. We komen hier later op terug.

Toets 1

In de volgende toets wordt getoetst wat je inmiddels zou moeten weten over het onderwerp PHP en MySQL.

Maak de toets:

PHP

H Formulieren

Formulieren gebruiken

Het komt regelmatig voor dat je op een webpagina een formulier moet invullen. Voor het verwerken van gegevens die worden ingevuld in een formulier kan PHP worden gebruikt. De gegevens kunnen worden weggeschreven naar een database, maar het is ook mogelijk om de ingevoerde data op een nieuwe of op dezelfde pagina op te vragen.

Onze PHP-editor kan ook formulieren afhandelen. We laten dat zien aan de hand van een formulier waarin NAW-gegevens ingevuld kunnen worden. Deze gegevens worden op een andere pagina weergegeven. Als eerste zie je de HTML-code die je nodig hebt voor het formulier. Het resultaat van de verwerkte HTML-code is een formulier waar naam, adres en woonplaats kunnen worden ingevuld.

<!DOCTYPE html>
<html lang="nl">
     <head>
          <title>invoeren NAW-gegevens</title>
          <meta charset=ütf-8">
     </head>
     <body>
          <form name="form1" method="post" action ="naw.php">
                  <p>Vul hieronder je naam, adres en woonplaats in:</p>
                  <p><input type = "text" size = "25" name = "naam"></p>
                 <p><input type = "text" size = "25" name = "adres"></p>
                 <p><input type = "text" size = "25" name =
                 "woonplaats"></p>
                 <p><input type = "submit" value = "Verstuur"></p>
          </form>
     </body>
</html>


Het formulier is als een .html bestand opgeslagen.
Er staat immers geen enkele PHP-code in.

Laten we de code van het formulier eens nader bekijken. Een formulier wordt altijd geopend met de tag <form> en afgesloten met de tag </form> In de openingstag staan nog drie attributen: name, method en action. Een formulier kan een naam meekrijgen. Het attribuut method zegt iets over hoe het formulier gegevens uitwisselt met de webserver. Daarvoor kan in PHP gebruik gemaakt worden van get of post. In ons voorbeeld is gekozen voor post. Later in deze module leggen we het verschil uit. Het attribuut action heeft de waarde “naw.php” meegekregen. Daarmee regelen we dat bij het klikken op de knop dat de server het bestand naw.php uitvoert. De inhoud van het formulier wordt daarbij naar de pagina naw.php verzonden. Verder treffen we in het formulier bij de diverse invoervelden een attribuut name aan. Dit attribuut wordt gebruikt voor de naamgeving van de variabelen die gepost worden. In ons voorbeeld zijn dat: naam, adres en woonplaats. In de HTML-pagina zien we dat de gegevens uit het formulier worden gepost. Dat wil zeggen dat ze worden verstuurd naar de server en opgeslagen in een variabele array $_POSTL. De variabelen naam, adres en woonplaats worden dus opgeslagen in de array $_POST.

De code van naw.php is:

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>verwerken NAW-gegevens</title>
           <meta charset="utf-8">


           <?php
                $naam = $_POST["naam"];
                $adres= $_POST["adres"];
                $woonplaats = $_POST["woonplaats"]
           ?>

     </head>
     <body>
           <h4>Je ingevulde NAW-gegevens zijn:</h4>
           <?php
                echo $naam . "<br>";
                echo $adres . "<br>";
                echo $woonplaats . "<br>";
           ?>
     </body>
</html>

Door te klikken op de knop verstuur wordt het bestand naw.php aangeroepen en de ingevulde gegevens verwerkt.

★ Aan de slag 31

In deze opdracht laten we zien hoe je in de PHP-editor gegevens uit een formulier kunt laten verwerken. We maken daarvoor gebruik van twee bestanden die onder het menu-item Bijlagen te vinden zijn.

Voor het formulier hebben we het bestand formulier.html nodig. Voor de afhandeling van het formulier wordt verwezen naar naw.php.

Open de editor en volg onderstaande instructies:

PHP
  1. Klik op het tabblad “Hoofdscript”.
  2. Klik op “Laad script” en selecteer het bestand formulier.html. De HTML-code voor het formulier wordt geladen.
  3. Klik op uitvoeren. Onder Resultaat is nu het formulier te zien.
  4. Klik op het tabblad “Postbackscript”.
  5. Klik daarna op het tabblad “Laad script” en selecteer het bestand naw.php. De PHP-code voor de afhandeling van het formulier wordt geladen.
  6. Vul in het formulier je NAW-gegevens in.
  1. Klik daarna op de knop verstuur. De PHP-code van het bestand naw.php wordt nu uitgevoerd.

Formulieren gebruiken - 2

In de code van naw.php staat $naam = $_POST["naam"];. Wanneer gegevens uit een formulier worden verwerkt met de methode post zijn deze variabelen daarna beschikbaar in de globale array $_POST. We kunnen door de regel $naam = $_POST["naam"]; aan een variabele $naam de waarde toekennen van de tekst die we in dit geval in het eerste tekstveld hebben ingevoerd. In het HTML-formulier wordt name gebruikt voor de naamgeving van de variabelen in de array. De code name = "naam" zorgt ervoor dat in het PHP-script dat het formulier verwerkt de variabele $_POST["naam"] beschikbaar is.

Het formulier, waarin de naw-gegevens worden ingevuld, is een voorbeeld van een eenvoudig formulier. Bij formulieren die wat groter zijn, kan de HTML-tag <fieldset> gebruikt worden om delen die bij elkaar horen te groeperen. Daardoor oogt alles wat overzichtelijker. We kunnen aan een fieldset een naam geven door gebruik te maken van het HTML-element legend:

<!DOCTYPE html>
<html lang="nl">
    <head>
          <title>invoeren NAW-gegevens</title>
          <meta charset="utf-8">
    </head>
    <body>
         <form name="form1" method="post" action="naw-php">
               <p>Vul hieronder je naam, adres en woonplaats in:</p>
               <fieldset>
                     <legend>mijn gegevens</legend>
                           <p><input type = "text" size="25" name =
                           "naam"></p>
                           <p><input type = "text" size="25" name =
                           "adres"></p>
                           <p><input type = "text" size="25" name =
                           "woonplaats"></p>
               </fieldset>
               <p><input type = "submit" value = "Verstuur"></p>
         </form>
    </body>
</html>

Resultaat
<html>
     <head>
           <title>Een ingewikkelder formulier</title>
     </head>
     <body>
           <form name="form1" method="post" action="form2afhandeling.php">
                       <p> Hoe heet je?
                       <input type="text" size="20" name="voornaam">
                 </p>
                 <p> Informatica is leuk:
                       <input type="radio" name="stelling" value="eens" checked>Eens
                       <input type="radio" name="stelling"
                       value="oneens">Oneens
                </p>
                <p> Welk profiel heb je?
                       <select name="profiel">
                             <option>NT</option>
                             <option>NG</option>
                             <option>EM</option>
                             <option>CM</option>
                       </select>
                 </p>
                 <p>
                       <input type="submit" value="Verstuur">
                 </p>
           </form>
     </body>
</html>

Zoals je ziet staat het formulier weer tussen de <form> en </form> tags. De pagina waar we naartoe gaan is form2afhandeling.php

Ons formulier heeft 4 form onderdelen:

  1. <input type="text" size="20" name="voornaam">
    Deze kennen we al uit het vorige voorbeeld.
  2. <input type="radio" name="stelling" value="eens" checked>Eens
    <input type="radio" name="stelling" value="oneens">Oneens

    Je ziet dat je voor elke radiobutton een aparte tag moet maken.
    type="radio" geeft aan dat het een radiobutton is.

    De name="stelling" is weer de naam waarmee de waarde opgehaald kan worden bij de afhandeling.

    LET OP: radiobuttons die bij elkaar horen moeten dezelfde naam hebben.

    Met value="eens" geven we de waarde aan die doorgestuurd wordt als deze radiobutton aan staat. Bij de eerste optie staat er nog het woordje checked achter. Dat houdt in dat deze standaard geselecteerd is.
  3. <select name="profiel">
         <option>NT</option>
         <option>NG</option>
         <option>EM</option>
         <option>CM</option>
    </select>
  4. <input type="submit" value="Verstuur">

    Deze kennen we al uit het vorige voorbeeld.

★ Aan de slag 32

Open in Notepad++ het bestand template.html. Maak het volgende formulier. Gebruik in je formulier bij input type niet text maar radio. Sla het bestand op als aandeslag_32a.html.


Zorg ervoor dat dit formulier wordt afgehandeld in het bestand aandeslag_32b.php.
De uitvoer van dit bestand ziet er als volgt uit:
     Je antwoord op de vraag was: Maastricht

Pas de afhandeling zo aan dat er ook nog wordt gecheckt of het antwoord goed is. Daarvoor heb je een if-else-constructie:

Als het antwoord fout is verschijnt de output:

     Je antwoord op de vraag was: Maastricht
     Dat is helaas niet goed!

Als het antwoord goed is verschijnt de output:

      Je antwoord op de vraag was: Maastricht
     Goed geantwoord!


Laad beide bestanden in de PHP-editor en voer de code uit.

PHP

★ Aan de slag 33

Open in Notepad++ het bestand template.html. Maak het onderstaand formulier. In het formulier wordt het bestand aandeslag_33b.php aangeroepen. Sla het formulier op onder de naam aandeslag_33a.html.

In het formulier wordt gebruik gemaakt van een zogenaamde combobox.
De HTML-code voor een combobox is:

 

     <select name="">
                       <option></option>
                       <option></option>
                       <option></option>
                       <option></option>
     </select>




Zorg dat dit formulier zodanig wordt afgehandeld in het bestand aandeslag_33b.php dat de geselecteerde operatie wordt uitgevoerd op twee getallen. Dus als er maal wordt geselecteerd, dan worden de getallen vermenigvuldigd, bij min afgetrokken etc.

Als output komt in dit geval te staan: 10 * 20 = 200

Laad beide bestanden in de PHP-editor en voer de code uit.

PHP

Strings en formulieren

Vaak is het handig om te testen of een string-variabele die uit een HTML-formulier afkomstig is, geen waarde heeft, dus een lege string is. Daarvoor gebruiken we de operator ! (uitroepteken). Zo kun je controleren of iemand bijvoorbeeld een wachtwoord heeft ingevuld:

if(!$wachtwoord) echo "<strong>Je moet een wachtwoord invullen</strong>";

Een tweede manier om te kijken of een variabele een lege string is, is door het gebruik van de functie empty().

if(empty($wachtwoord))
echo "<strong>Je moet een wachtwoord invullen</strong>";


Dit werkt in feite met elk type PHP-variabele, om na te gaan of er aan die variabele een waarde is toegekend.

Gebruik de volgende operatoren om twee strings met elkaar te vergelijken:

Gebruik == om te testen of twee strings gelijk zijn aan elkaar.
Gebruik < om te testen of string 1 lexicografisch vóór string 2 komt.
Gebruik > om te testen of string 1 lexicografisch na string 2 komt.


Lexicografisch betekent alfabetisch en/of numeriek.
Je kunt ook gebruik maken van de operatoren <= en >= die respectievelijk staan voor “vóór of gelijk aan” en “na of gelijk aan”.

De volgende vergelijkingen zijn waar:

"abc" == "abc"
"abc" < "bcd"
"bcd" > "abc"

We zullen de == operator gebruiken in een PHP-script dat een korte beschrijving geeft van de profielen die in de bovenbouw havo en vwo voorkomen.
Allereerst maken we een webpagina met een keuzemenu waar je de waarde van de variabele $profiel kunt kiezen. Houd er rekening mee dat het volgende voorbeeld een eenvoudige string vergelijking uitvoert die werkt op basis van elke vergelijking die gevonden wordt. Daarom is het van groot belang dat je ervoor moet zorgen dat de waarden die je in je HTML-formulier stopt, exact overeenkomen met de waarden waarin je in je PHP-script naar op zoek bent.

De code voor het formulier wordt dan:

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>Informatie over profielen</title>
           <meta charset="utf-8">
           <link rel="stylesheet" href="opmaak.css">
     </head>
     <body>
           <h4> De situatie in schooljaar 2016-2017</h4>
           <p> Kies een profiel en klik op de knop <strong>Informatie</strong>:</p>
           <form name="form1" method="post" action="profielinfo.php">
                       <select name="profiel">
                       <option selected> Natuur en Techniek </option>
                       <option> Natuur en Gezondheid </option>
                       <option> Economie en Maatschappij </option>
                       <option> Cultuur en Maatschappij </option>
                 </select>
                 <input type="submit" value="Informatie">
           </form>
     </body>
</html>

Resultaat


In het formulier wordt verwezen naar het bestand profielinfo.php.
Hieronder is daarvoor de code weergegeven.

<html>
     <head>
           <title>
                 Informatie over:
                 <?php
                       $profiel = $_POST["profiel"];
                       echo $profiel
                 ?>
           </title>
           <meta charset="utf-8">
           <link rel="stylesheet" href="opmaak.css">
     </head>
     <body>
           <?php
                 if($profiel == "Natuur en Techniek" ) {
                       ?>
                             <h1>Natuur en Techniek</h1>
                             <p>Dit is het profiel met als
                             profielvakken:<br> wiskunde B  natuurkunde en
                             scheikunde
                             </p>
                       <?php
                 }
                 else if($profiel == "Natuur en Gezondheid" ) {
                       ?>
                             <h1>Natuur en Gezondheid</h1>
                             <p>Dit is het profiel met als
                             profielvakken:<br> wiskunde AB (of B)
                              biologie en scheikunde </p>
                       <?php
                 }
                 else if($profiel == "Economie en Maatschappij" ) {
                       ?>
                            <h1>Economie en Maatschappij</h1>
                            <p>Dit is het profiel met wiskunde als
                            profielvakken:<br> wiskunde AB (of B) en economie </p>
                       <?php
                 }
                 else if($profiel == "Cultuur en Maatschappij" ) {
                       ?>
                             <h1>Cultuur en Maatschappij</h1>
                             <p>Dit is het profiel met als
                             profielvakken:<br> wiskunde A en
                             geschiedenis.</p>
                       <?php
                 }
                       ?>
     </body>
</html>

Get en post

Behalve de post-methode> kan er ook gebruik gemaakt worden van de get-methode om gegevens te verzenden en/of op te vragen. Om de gegevens te verkrijgen moet je dan in de PHP-code gebruik maken van de instructie $_GET["inputnaam"] waarbij "inputnaam" de naam is van de waarde die opgehaald wordt uit het invulvenster in een formulier. In de HTML-code van het formulier wordt bij method "get" ingevuld in plaats van "post".

We komen nog even terug op het voorbeeld van een wat ingewikkelder formulier waarvan de broncode reeds eerder is besproken.

 

In dit formulier gaan we nu gebruik maken van de method "get" in plaats van "post".

Dus:

<form name="form1" method="get" action="form2afhandeling.php>

Voor het ophalen van de gegevens staat nu in form2afhandeling.php:

<?php
     $profiel = $GET_["profiel"];
?>


Bij het gebruik van get worden de gegevens als argument achter de URL geplakt in de vorm van een querystring:


Nadelen die kleven aan get zijn:

  • Omdat de gegevens in de querystring zichtbaar zijn is get ongeschikt voor loginsystemen.
  • Een get-statement wordt opgeslagen in de logbestanden op de webserver en passeert ongecodeerd de gateways op het internet.
  • De lengte van de querystrings is beperkt (maximaal 8 kB).

Bij het gebruik van post worden de gegevens "onzichtbaar" in de HTTP-headers van de pagina verwerkt:


Voordelen van post zijn:

  • De gegevens in de querystring zijn niet zichtbaar.
  • De gegevens worden niet opgeslagen in de cache van de browser of in de serverlogs.
  • Er kunnen veel meer gegevens gelijktijdig verzonden worden.

★ Aan de slag 34

Open in Notepad++ het bestand template.html. Schrijf een script waarbij de gebruiker een woord invoert. Het script geeft het ingevoerde woord daarna van achteren naar voren weer. Dus bij de invoer van “woord” verschijnt er als uitvoer “droow”. Sla het bestand met het formulier op als aandeslag_34a.html. In dit bestand wordt verwezen naar aandeslag_34b.php waarin de uitvoer van het formulier is te zien. In het script moet je gebruik maken van de functie strlen() om de lengte van het woord te bepalen.
Bekijk op www.php.net. hoe je deze functie kunt gebruiken.

PHP

Multipass scripts

Het is mogelijk om de code van het formulier te combineren met het PHP-script voor de afhandeling van het formulier. In plaats van twee aparte bestanden heb je dan slechts één bestand. Dat betekent dat we het formulier als onderdeel integreren in het PHP-script. In het aangepaste script is een extra voorwaardelijk statement ingebouwd om te bepalen wat er moet gebeuren:

  1. Als het script wordt uitgevoerd terwijl er géén keuze is gemaakt (in feite geen waarde aan de variabele is toegekend) moet alleen het formulier worden getoond.
  2. Als het script wordt uitgevoerd als er wel een waarde aan de variabele is toegekend, wordt het formulier afgehandeld.

We illustreren het gebruik van een zogenaamd multipass script, dat is een script dat zichzelf aanroept om te worden uitgevoerd, aan de hand van een al eerder uitgewerkte opdracht voor de afhandeling van een formulier. Het gaat om de opdracht waarbij gecontroleerd wordt wat de hoofdstad van de provincie Limburg is. In het formulier worden radiobuttons gebruikt:

De HTML-code voor het formulier is:

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>aan de slag 32a</title>
           <meta charset="utf-8">
     </head>
     <body>
           <form name="form1" method="post" action="aandeslag_32b.php">
                 Wat is de hoofdstad van de provincie Limburg?<br><br>
                 <input type="radio" name="hoofdstad" value="Weert">Weert<br>
                 <input type="radio" name="hoofdstad" value="Maastricht">Maastricht<br>
                 <input type="radio" name="hoofdstad" value="Heerlen">Heerlen<br><br>
                 <input type="submit" value="Verstuur">
     </body>
</html>

 

In de HTML-code wordt voor de afhandeling van het formulier verwezen naar aandeslag_32b.php.
De code van dit bestand is:

<?php
     $antwoord = $_POST["hoofdstad"];
     echo "Je antwoord op de vraag was: <b>$antwoord</b><br>";


     if($antwoord == 'Maastricht') {
           echo "Goed geantwoord!";
     }
     else {
           echo "Dat is helaas niet goed!";
     }
?>


Kiezen we voor Maastricht en klikken we op de knop verstuur dan is het resultaat:

 

We laten nu zien hoe de twee bestanden gecombineerd kunnen worden.
Het resultaat is één bestand:

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>multipass</title>
           <meta charset="utf-8">
     </head>
     <body>
                 <?php
                 if(!empty($_POST)) {
                       $antwoord = $_POST["hoofdstad"];
                       echo "Je antwoord op de vraag was:
                       <b>$antwoord</b><br>";


                       if($antwoord == 'Maastricht') {
                             echo "Goed geantwoord!";
                       }
                       else {
                             echo "Dat is helaas niet goed!";
                       }
                 }
                 else {
                 ?>
                            <form name="form1" method="post"
                            action="multipass.php">
                            Wat is de hoofdstad van de provincie
                            Limburg?<br><br>
                            <input type="radio" name="hoofdstad"
                            value="Weert">Weert<br>
                            <input type="radio" name="hoofdstad"
                            value="Maastricht">Maastricht<br>
                            <input type="radio" name="hoofdstad"
                            value="Heerlen">Heerlen<br><br>
                            <input type="submit" value="Verstuur">
                       </form>
                 <?php
                 }
                 ?>
     </body>
</html>

Het is bestand wordt opgeslagen als multipass.php.

Als je het script voor de eerste keer opent, is er nog geen optie geselecteerd uit het formulier. Dat houdt dus automatisch in dat er nog geen waarde is gepost. Het formuliergedeelte zal daarom worden afgebeeld op het scherm om je in staat te stellen een keuze te maken. Als je op de knop Verstuur klikt, roept het script zichzelf aan. In dat geval wordt er wel een waarde gepost. Vervolgens wordt gecontroleerd of de geselecteerde stad de hoofdstad van de provincie Limburg is of niet en volgt er een melding op het scherm.

Bij de action in de form-tag hadden we ook de volgende code kunnen invullen:

<form method="post" action=""<?php echo $_SERVER["PHP_SELF"]; ?>">

PHP_SELF verwijst naar de bestandsnaam van de pagina zelf. Dus naar multipass.php. Tijdens het uitvoeren van de pagina zal $_SERVER["PHP_SELF"] vervangen worden door de paginanaam. Het resultaat is dat ook in dit voorbeeld de pagina zichzelf aanroept in plaats van een andere PHP-pagina.

In de online editor die we voor Enigma gebruiken, werkt de code <?php echo $_SERVER["PHP_SELF"]; ?>" niet.

★ Aan de slag 35

In aan de slag 33 heb je HTML- en PHP-code geschreven voor het maken een eenvoudige rekenmachine. Dat resulteerde in twee bestanden (aandeslag_33a.html en aandeslag_33b.php). Maak nu een uitwerking waarbij gebruik gemaakt wordt van een multipass script in plaats van twee aparte bestanden. Sla de uitwerking op als aandeslag_35.php.
Laad het bestand in de PHP-editor bij Hoofdscript en voer de code uit.

PHP

★ Aan de slag 36

Open Notepad++. Maak een pagina die zichzelf aanroept en waarin het mogelijk is een lijn van verschillende kleur, lengte en dikte te maken. De gewenste kleur kan geselecteerd worden. De waarden voor de lengte en dikte van de lijn moeten voordat de lijn getekend wordt zelf worden ingevuld. De lijn kan de kleur rood, groen, blauw of geel krijgen.

Gebruik een switch om een aparte variabele $kleur2 aan te maken om de kleur in het Nederlands weer te geven. In de code moet je de Engelse namen gebruiken.
Het resultaat ziet er dan als volgt uit:

Sla het bestand op als aandeslag_36.php.
Laad het bestand in de PHP-editor bij Hoofdscript en voer de code uit.

PHP

★ Aan de slag 37

Open Notepad++. Maak een pagina waarin je vermenigvuldigingstafel kunt laten zien. In een invoerveld geef je een getal op kleiner dan 100, je drukt op een knop en in dezelfde pagina krijg je dan ook de tafel te zien. Als je daarna een ander getal in het invoerveld opgeeft en weer op de knop drukt, komt het nieuwe tafeltje in beeld.

Controleer eerst of er een getal is ingevoerd. Zo niet, laat dan alleen het invulscherm zien. Zo ja, laat dan zowel het invulscherm zien als de uitkomst in tabelvorm. Je roept in beide gevallen het eigen script weer aan.

 

Hieronder staat de output nadat je eerder het getal 76 hebt ingegeven en op de knop hebt gedrukt.

 

Sla het bestand op als aandeslag_37.php. Laad het bestand in de PHP-editor bij Hoofdscript en voer de code uit.

PHP

Valideren

PHP string functies zijn erg nuttig om aan de serverkant formuliergegevens te valideren. Daarbij is de multipass script techniek erg behulpzaam: het maken van een formulier, de validatiecode en de actie in één script. Als het script voor de eerste keer wordt uitgevoerd, verschijnt er een leeg formulier. Als je op de knop drukt, wordt het script opnieuw aangeroepen. Als de data niet correct zijn, wordt het formulier weer getoond (met de gegevens die wel juist zijn, zodat de gebruiker die niet nog een keer hoeft in te vullen) samen met een foutmelding erbij. Als de ingevulde gegevens correct zijn wordt de eigenlijke scriptactie uitgevoerd.

In dit onderdeel laten we zien hoe je kunt controleren of de gegevens in een formulier wel correct zijn ingevuld. We gebruiken daarvoor het bestand formuliervalidatie.php.

De code van het bestand formuliervalidatie.php vind je in het volgende Worddocument:
>> Code: formuliervalidatie.php

Als je het script runt, krijg je een formulier te zien dat er ongeveer zo uitziet:

 

We testen het script door niet alle gegevens in te vullen en vervolgens op “Log in” te klikken. We doen dat door eerst niets in te vullen, vervolgens alleen een naam in te vullen en tot slot alleen het e-mailadres in te vullen. Vul je alleen je naam in dan krijg je bijvoorbeeld de melding dat je nog je e-mailadres moet invullen. Dit is te zien in het onderstaande scherm.


De eerste keer dat het script wordt uitgevoerd, wordt er gecontroleerd of er iets gepost is. Is dit niet het geval, dan krijg je het nog niet ingevulde formulier te zien.

  1. De eerste voorwaarde (bij if) is alleen maar waar als in beide invoervelden de gegevens zijn ingevuld. Let er wel op dat in beide velden ook onzin kan worden ingevuld om het script toch te laten werken.
    if ($naam && $email) { ……… }. Dit resulteert in het bericht: Welkom op onze website …… waarbij op de plaats van de puntjes de op het formulier ingevulde naam wordt weergegeven. De verborgen variabele opnieuw, in de code te zien aan het type = ”hidden”, krijgt de waarde yes toegekend als de Login knop op zijn minst één keer is ingedrukt. <input type="hidden" name="opnieuw" value="yes">
  2. Als de Login knop is ingedrukt en de naam heeft geen waarde dan is de volgende voorwaarde waar:

    if (!$naam && $opnieuw) { ……… }

    Er verschijnt in rood onder het naamvenster een foutmelding dat de naam nog moet worden ingevuld
  3. Als de Login knop is ingedrukt en het e-mailadres is nog niet ingevuld dan is de volgende voorwaarde waar:

    if (!$email && $opnieuw) { ……… }

    Er verschijnt in rood onder het naamvenster een foutmelding dat het e-mailadres nog moet worden ingevuld.
  4. Als bij het aanroepen van het script meteen daarna de Login knop wordt ingedrukt zonder dat er ook maar iets is ingevuld worden beide foutmeldingen weergegeven.

I PHP en databases

Inleiding

In dit onderdeel bespreken we hoe PHP gebruikt kan worden voor het benaderen van een database. Veel websites, bijvoorbeeld die van webwinkels, hebben toegang tot grote hoeveelheden gegevens die zijn opgeslagen in een database. Met PHP kunnen gegevens worden opgevraagd, veranderd of worden weggeschreven naar een database. We gebruiken daarvoor PHP in combinatie met MySQL. MySQL is een database system. Onder een database system verstaan we het programma waarmee bewerkingen op een database kunnen worden uitgevoerd en de database, dus de gegevens, zelf. Een programma waarmee bewerkingen op een database kunnen worden uitgevoerd, noemen we een database management system ofwel DBMS. In de interactieve module databases heb je gezien hoe je met de vraagtaal SQL (Structured Query Language) gegevens uit een database kunt opvragen. Het is mogelijk om SQL-opdrachten in combinatie met PHP te gebruiken om gegevens uit een database op te vragen in een webpagina of vanuit een webpagina weg te schrijven naar een database.

Voor MySQL zijn diverse programma’s beschikbaar waarmee de database benaderd kan worden. Het meest gebruikte DBMS voor MYSQL is phpMyAdmin. In phpMyAdmin kan een database, inclusief de daarbij behorende tabellen, worden aangemaakt. Daarnaast is het mogelijk om allerlei bewerkingen op de database uit te voeren en de rechten van gebruikers vast te leggen.

Voor het uitwerken van opdrachten gebruiken we in eerste instantie de editor van Enigma. In de online-editor zijn een aantal handelingen echter niet toegestaan. Zo mogen er géén gegevens worden weggeschreven of worden veranderd in de databases waar de online-editor mee werkt. In de online-editor worden includes en sessies niet ondersteund. Wel kunnen er data worden opgevraagd. Vanwege deze beperkingen ronden we de module daarom af met het bespreken van nog een ander voorbeeld van een omgeving waarin PHP-scripts in combinatie met een database kunnen worden uitgevoerd. We gebruiken daarvoor XAMPP. Met dit programma kun je ook zonder dat je gebruik maakt van een aparte server op je eigen pc of laptop de uitvoer van PHP-scripts bekijken. XAMPP maakt het mogelijk om PHP te gebruiken in combinatie met een eigen database. Met XAMPP loop je niet aan tegen de reeds genoemde beperkingen van de editor. Ook kun je met XAMPP met meer dan twee bestanden werken. In een bijlage bij deze module wordt de installatie en werking van XAMPP beschreven.

Voor XAMPP bestaan ook andere goede alternatieven. Bijvoorbeeld een vorm van webhosting waarbij PHP en MySQL is geïnstalleerd. Tegenwoordig is dat bij de meeste webhostingpakketten een standaardoptie.

In de PHP-editor van Enigma zijn voor deze module twee databases beschikbaar:

  1. De database Nederland.
  2. De database buurtvereniging.

De database Nederland bevat gegevens van de Nederlandse provincies. De database buurtvereniging gaat over leden en hun kinderen en buurtactiviteiten waarvoor kinderen zich kunnen aanmelden. In beide databases kunnen geen wijzigingen worden aangebracht. Het is dus niet mogelijk om queries uit te voeren waarbij gegevens aan de genoemde databases worden toegevoegd of worden verwijderd.

Hieronder staat het strokendiagram van de database Nederland:

De database Nederland bestaat uit twee tabellen. In de tabel provincies staan de namen van de provincies, de hoofdsteden van de provincies, van elke provincie de oppervlakte in km² en het aantal inwoners per km². In de tabel vlaggen staat voor elke provincie een verwijzing naar een afbeelding van de vlag van de provincie.

De database buurtvereniging bestaat uit vier tabellen. In de tabel leden staan de NAW-gegevens van leden van de buurtvereniging. De tabel kinderen bevat de roepnaam en de geboortedatum van kinderen van leden. In de tabel inschrijvingen worden de namen van kinderen bijgehouden die zich hebben aangemeld voor een buurtactiviteit. In de tabel activiteiten staan gegevens over activiteiten waar kinderen zich voor kunnen aanmelden.

Benaderen database

Met PHP kunnen we gegevens uit een database opvragen of gegevens aan een database toevoegen. Dit proces verloopt in drie fasen:

  1. Als eerste maken we contact met de database server via Database Management Services en wordt de juiste database geselecteerd.
  2. Daarna wordt een query uitgevoerd die de resultaten weergeeft in een webpagina (in ons geval in een editor) of data wegschrijft naar de gekozen database.
  3. Tot slot wordt de verbinding met de database server verbroken.

PHP heeft voor elk DBMS (Database Management System) een set database functies waarmee het kan werken.
In ons geval kijken we alleen maar naar de MySQL server.

Belangrijke functies - Connect

Functie mysqli_connect()

Voordat we bewerkingen op een database kunnen uitvoeren, moet er eerst een verbinding met de server gemaakt worden en zal de gewenste database geselecteerd moeten worden. In een DBMS kunnen meerdere databases inclusief de daarbij behorende tabellen aanwezig zijn.

Om verbinding met de databaseserver te maken, hebben we een hostnaam, een gebruikersnaam en een wachtwoord nodig. Daarnaast moeten we ook de naam van de database opgeven.

De functie die daarvoor gebruikt wordt, is mysqli_connect(). Het format van deze functie is:

$verbinding = mysqli_connect($hostnaam, $gebruikersnaam, $wachtwoord, $db);

Het script voor het realiseren van een verbinding met de databaseserver en het selecteren van de gewenste database, zou er als volgt uit kunnen zien:

<?php
      $verbinding = mysqli_connect($hostnaam, $gebruikersnaam, $wachtwoord,
      $db) or die ("Er kan geen verbinding tot stand worden gebracht:" .
      mysqli_connect_error());

      echo "De verbinding met de database is tot stand gebracht:";
?>

Het script start met het contact leggen met de databaseserver en het selecteren van de database. Daarvoor worden de hostnaam, de gebruikersnaam, het wachtwoord en de naam van de database doorgegeven aan MySQL. De functie zorgt er vervolgens voor dat een foutmelding in beeld wordt gebracht als er om de een of andere reden geen verbinding met het DBMS tot stand gebracht kan worden. Dat kan in de trant van: verkeerd wachtwoord, verkeerde gebruikersnaam, DBMS is niet op de computer aangetroffen. Wordt de verbinding wel tot stand gebracht, dan volgt de mededeling “De verbinding met de database is tot stand gebracht”. Voor het verbreken van de connectie met de MySQL server kan de functie mysqli_close() worden gebruikt.

★ Aan de slag 38

In deze opdracht ga je PHP-code schrijven voor het maken van een verbinding met de database Nederland. Tot nu toe hebben we voor het schrijven van de PHP-code telkens gebruik gemaakt van een template met HTML-code waaraan PHP-code kon worden toegevoegd. Dat is niet altijd nodig. Als in een PHP-bestand alleen PHP-code moet worden verwerkt, mag je ook alleen de PHP-code noteren. Dat gaan we bij deze opdracht doen.

Voor het opzetten van een verbinding met de database Nederland heb je de onderstaande gegevens nodig:

Host: localhost
Gebruikersnaam: enigma
Wachtwoord: enigma1234
Database: Nederland


Open Notepad++. Schrijf de PHP-code voor het leggen van een verbinding met de database Nederland. Als de verbinding tot stand gebracht kan worden, verschijnt de tekst “verbinding gelukt”. Sla het bestand op als aandeslag_38.php.
Laad het bestand in de PHP-editor en voer de code uit.

PHP

★ Aan de slag 39

Open Notepad++. Schrijf de PHP-code voor het leggen van een verbinding met de database buurtvereniging. De hostnaam, gebruikersnaam en het wachtwoord zijn achtereenvolgens “localhost”, “enigma” en “enigma1234”. Werk in de uitwerking van deze opdracht niet met de variabelen $hostnaam, $gebruikersnaam en $wachtwoord. Als de verbinding tot stand gebracht kan worden, verschijnt de tekst “verbinding gelukt”. Sla het bestand op als aandeslag_39.php.
Laad het bestand in de PHP-editor en voer de code uit.

PHP

Belangrijke functies - Query

Functie mysqli_query()

Nadat we de juiste database hebben geselecteerd, gebruiken we de functie mysqli_query() om queries naar de database te sturen.

Het format van deze functie is:

$resultaat = mysqli_query($verbinding, $query);

De functie stuurt als resultaat alle rijen van een tabel uit een database terug die de uitkomst vormen van de opgegeven query.

We kunnen nu een SELECT query maken:

$query = "SELECT * FROM provincies ORDER BY provincie";
$resultaat = mysqli_query($verbinding, $query);

Belangrijke functies - Array

Functie mysqli_fetch_array()

De functie mysqli_fetch_array() hebben we al eerder besproken bij het onderdeel over arrays. Als je een query uitvoert en de functie mysqli_fetch_array() gebruikt, krijg je een rij uit de database als array terug. De elementen van deze array zijn de waardes van de verschillende velden van die regel uit de database. Het format van deze functie is:

$row = mysqli_fetch_array($resultaat);

De functie haalt de volgende rij uit het objectresultaat en geeft als terugkeerwaarde false als er geen nieuwe rijen meer zijn. Normaal wordt deze functie gebruikt in een while loop:

          while($row = mysqli_fetch_array($resultaat)) {
               doe iets met die rij;
          }

Elke kolom van een rij wordt benaderd met een array notatie:
De eerste kolom is row["prov_id"]
De tweede kolom is row["provincie"]

Om nu de eerste kolom van alle rijen van de uitkomst van een query in beeld te brengen, gebruik je de volgende code:


         while($row = mysqli_fetch_array($resultaat)) {
              echo $row["prov_id"] . "<br>\n";
         }


We zullen alle tot nu toe behandelde functies eens in een compleet voorbeeld laten zien. Daarin maken we contact met de database Nederland en voeren we een query op deze database uit waarmee we alles uit de tabel provincies selecteren. De gegevens worden oplopend gesorteerd op naam van de provincie. Het resultaat, een tabel, wordt op het scherm afgebeeld.


prov_id provincie hoofdstad bevolking
3 Drenthe Assen 488871
5 Flevoland Lelystad 403280
2 Friesland Leeuwarden 646092
6 Gelderland Arnhem 2031123
1 Groningen Groningen 582649
12 Limburg Maastricht 1115805
11 Noord-Brabant 's-Hertogenbosch 2495107
8 Noord-Holland Haarlem 2775617
4 Overijssel Zwolle 1142360
7 Utrecht Utrecht 1268489
10 Zeeland Middelburg 381182
9 Zuid-Holland Den Haag 3607150


De code hiervoor is:

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>overzicht provincies</title>
           <meta charset="utf-8">
     </head>
     <body>
           <h3>Een overzicht van alle provincies</h3>
           <table border="1" cellpadding="3">
                 <tr>
                       <th>prov_id</th>
                       <th>provincie</th>
                       <th>hoofdstad</th>
                       <th>bevolking</th>
                 </tr>
                 <?php
                 $verbinding = mysqli_connect("localhost"  "enigma"
                    "enigma1234", "Nederland");


                 $query = "SELECT * FROM provincies ORDER BY provincie";
                 $resultaat = mysqli_query($verbinding, $query);
                 while ($row = mysqli_fetch_array($resultaat)) {
                 ?>
                 <tr>
                       <td><?php echo $row["prov_id"]; ?></td>
                       <td><?php echo $row["provincie"]; ?></td>
                       <td><?php echo $row["hoofdstad"]; ?></td>
                       <td><?php echo $row["bevolking"]; ?></td>
                 </tr>
                 <?php
                 }
                 ?>
           </table>
           <?php
                 mysqli_close($verbinding);
           ?>
     </body>
</html>

 

★ Aan de slag 40

Open Notepad++. Schrijf de PHP-code waarmee op het scherm een tabel wordt afgebeeld met de lidnummers en de namen van kinderen die zich hebben ingeschreven voor een buurtactiviteit. Sla het bestand op als aandeslag_40.php. Maak voor het uitwerken van deze opdracht gebruik van het strokendiagram van de database buurtvereniging:


Laad het bestand in de PHP-editor en voer de code uit.

 

PHP

Meerdere tabellen

Als je complexe websites bouwt, ben je al gauw toe aan het gebruik van meerdere tabellen in een database. Het is van belang dat deze tabellen onderling goede (dat wil zeggen: correcte) relaties bezitten. Je moet tenslotte gegevens uit meerdere tabellen kunnen koppelen. Dan is het noodzakelijk gebruik te maken van subqueries of joins.

De database buurtvereniging bestaat uit 4 tabellen. Stel we willen het lidnummer, de roepnaam en de activiteit waarvoor kinderen zich hebben aangemeld, tonen in een tabel. Deze gegevens staan in twee tabellen, namelijk de tabel inschrijvingen en de tabel activiteiten. We moeten ervoor zorgen dat het activiteitnr in de tabel inschrijvingen overeenkomt met het activiteitnr uit de tabel activiteiten. Op die manier kunnen we de koppeling tussen de twee tabellen waarborgen. Het script ziet er als volgt uit:

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>kinderen en activiteiten</title>
           <meta charset="utf-8">
           <link rel="stylesheet" href="opmaak.css">
     </head>
     <body>
           <h3>Een overzicht van alle inschrijvingen</h3>
           <table border="1" cellpadding="3">
                 <tr>
                       <th>lidnr</th>
                       <th>roepnaam</th>
                       <th>activiteit</th>


                 </tr>
                 <?php
                 $verbinding = mysqli_connect("localhost",  "enigma",
                    "enigma1234",  "buurtvereniging");


                 $query = "SELECT inschrijvingen.lidnr  roepnaam
                    activiteit FROM inschrijvingen  activiteiten WHERE
                 inschrijvingen.activiteitnr = activiteiten.activiteitnr";
                 $resultaat = mysqli_query($verbinding  $query);
                 while ($row = mysqli_fetch_array($resultaat)) {
                 ?>
                 <tr>
                       <td><?php echo $row['0']; ?></td>
                       <td><?php echo $row['1']; ?></td>
                       <td><?php echo $row['2']; ?></td>
                 </tr>
                 <?php
                 }
                 ?>
           </table>
           <?php
                 mysqli_close($verbinding);
           ?>
     </body>
</html>

 

Let op dat je bij de weergave van het resultaat uitgaat van de nieuw te vormen resultaattabel. Deze bestaat uit drie kolommen (lidnr, roepnaam en activiteit) en derhalve moet je hier de indexen 0, 1 en 2 gebruiken en niet de kolomindexen uit de oorspronkelijke tabellen waaruit de gegevens zijn gehaald.
Het resultaat wordt dan:

 

 



 

★ Aan de slag 41

Open Notepad++. Schrijf de PHP-code waarmee op het scherm een tabel wordt afgebeeld met de namen en het adres van de leden en de roepnamen van hun kinderen. Sla het bestand op als aandeslag_41.php. Maak voor het uitwerken van deze opdracht gebruik van het strokendiagram van de database buurtvereniging:


Laad het bestand in de PHP-editor en voer de code uit.

PHP

★ Aan de slag 42

Open Notepad++. Voor deze opdracht gaan we de database Nederland benaderen. Schrijf de PHP-code waarmee op het scherm een tabel wordt afgebeeld met de namen en de vlaggen van de Nederlandse provincies. Sla het bestand op als aandeslag_42.php.. Maak voor het uitwerken van deze opdracht gebruik van het strokendiagram van de database Nederland:
 

PHP

J phpMyAdmin

XAMPP

In de voor Enigma ontwikkelde PHP-editor wordt gebruik gemaakt van twee bestaande databases. In deze databases mogen geen wijzingen worden aangebracht. Zo is het niet toegestaan om gegevens in een tabel toe te voegen of te verwijderen. Er mogen alleen gegevens geraadpleegd worden. Om toch in alle vrijheid met PHP te kunnen werken, hebben we een andere omgeving nodig. Dat zou een eigen PHP-server kunnen zijn. Of je maakt bijvoorbeeld gebruik van het programma XAMPP.

Met XAMMP kun je ook zonder dat je gebruik maakt van een aparte server op je eigen pc of laptop de uitvoer van PHP-scripts bekijken. In een aparte bijlage hebben we de installatie en werking van XAMMP beschreven zodat je ook thuis met deze software kunt werken.


Tabellen aanmaken

Om tabellen te kunnen aanmaken, is het noodzakelijk dat phpMyAdmin wordt opgestart. In XAMPP kan dat door in de adresbalk van een browser localhost/phpmyadmin/ in te typen. Van tevoren moet dan wel Apache en MySQL worden gestart.

Wordt er op jullie school met een eigen PHP-server gewerkt, dan verloopt de procedure anders. In de adresbalk van de browser staat dan bijvoorbeeld:

http://informatica.enigmacollege/phpmyadmin/
of
http://ip-adres/phpmyadmin/

Wat er daadwerkelijk op de plek van informatica.enigmacollege.nl of op de plek van het ip-adres staat, hangt af van de server die moet worden benaderd.



Voor het beheerdersaccount wordt standaard de gebruikersnaam “root” zonder een bijbehorend wachtwoord gebruikt. Dat is onveilig. Vandaar dat we als eerste het wachtwoord voor het beheerdersaccount hebben aangepast. Eigenlijk moet je nooit als root een database benaderen. Als er voor root ook nog geen wachtwoord ingesteld is, wordt het voor hackers wel erg eenvoudig gemaakt toegang tot de database te verschaffen.

Voor instructies voor het wijzigen van het wachtwoord dat bij root hoort zie:
www.helphin.com

In de online-editor heb je al eerder gewerkt met de database Nederland. Deze database bevat de tabellen provincies en vlaggen. We leggen nu uit hoe je in phpMyAdmin deze database en de bijbehorende tabellen kunt aanmaken.

Nadat je bent ingelogd, is de eerste stap het aanmaken van de database Nederland. Dat doe je door te klikken op het tabblad Databases. Vul onder Database aanmaken de naam van de database in en klik op de knop aanmaken. In ons voorbeeld is de naam van de database dus “Nederland”.



Aan de linkerkant zien we in het overzicht Nederland staan. De database is aangemaakt, maar bevat nog geen tabellen.




Onder de melding “Geen tabellen gevonden in de database” kunnen we een nieuwe tabel gaan aanmaken. We noemen de tabel “provincies” en vullen achter het aantal kolommen 6 in.




Nadat er op start is geklikt, wordt een nieuw venster geladen waarin allerlei gegevens moeten worden ingevuld. Het is een hele brede pagina die we voor het gemak in twee delen hebben gesplitst.







In de meest linkse kolom Naam hebben we de namen van de kolommen ingevuld. De tweede kolom wordt gebruikt voor het aangeven van de datatypes. INT gebruiken we voor gehele getallen en VARCHAR voor een combinatie van allerlei karakters. In de kolom Lengte/Waarden vullen we het aantal eenheden in dat de inhoud van de kolom maximaal kan hebben. Voor de eerste kolom (land_id) is dat dus 2, hetgeen betekent dat er maximaal 99 provincie-indexen kunnen worden ingevoerd.

Bij het aanmaken van de tabel provincies laten we de vakken Standaardwaarde, Collatie en Attributen leeg. In de kolom Leeg wordt aangegeven of er in dat veld wel of niet iets moet worden ingevuld. Standaard staat dat op niet Leeg, hetgeen inhoudt dat er beslist iets moet zijn ingevuld. In ons geval laten we dat zo. Maar in andere gevallen kan het voorkomen dat een kolom niet kan worden ingevuld. Bijvoorbeeld bij het invullen van NAW-gegevens waarbij we behalve de kolommen voornaam en achternaam ook een kolom tussenvoegsel hebben. Aangezien de meeste mensen geen tussenvoegsel in hun naam hebben, zal hier de optie leeg aangevinkt moeten worden.

In de kolom Index kennen we een primaire sleutel toe. Daardoor worden alle records in de tabel uniek. In de tabel provincies wordt de sleutel toegekend aan de kolom prov_id. Daardoor weten we zeker dat alle id’s uniek zijn. Op deze manier kunnen er nooit twee dezelfde records in de database komen te staan. Bij A_I hebben we de eerste kolom (prov_id) aangevinkt. A_I staat voor auto_increment hetgeen betekent dat er automatisch bij elk record dat wordt ingevoerd de teller met één wordt opgehoogd. Standaard begint dat tellen bij 1.

Nadat alles is ingevuld, kiezen we voor opslaan. Aan de linkerkant van het scherm is nu te zien dat er in de database Nederland een tabel provincies is opgenomen. Hieronder wordt de structuur van de tabel provincies weergegeven:




In de tabel provincies kunnen we records gaan toevoegen. We kiezen daarvoor in phpMyAdmin voor de optie invoegen en vullen 2 records in. Bij de kolom prov_id hoeven we niets in te vullen aangezien dat automatisch gaat.



We vullen de gegevens voor de provincie Groningen en Friesland in:


Provincie Hoofdstad Bevolking Oppervlakte_km2 Inwoners_km2
Groningen Groningen 582649 2960 250
Friesland Leeuwarden 646092 5749 193

Daarna klikken we op de eerste Start-knop onder de gegevens van Groningen. Er worden nu twee rijen toegevoegd aan de tabel provincies. Dat kan gecontroleerd worden door in het menu op het tabblad Verkennen te klikken.




We zien nu de twee toegevoegde records. Van elk record kunnen de gegevens gewijzigd worden. Records kunnen ook gekopieerd of verwijderd worden.
De records in de tabel kunnen bekeken worden. We kiezen daarvoor Verkennen:



Er zijn, zoals je wellicht gemerkt hebt, vele mogelijkheden met phpMyAdmin. Nog enkele belangrijke opties zijn:


  1. Legen: hiermee leeg je de volledige inhoud van een tabel.
  2. Verwijderen: hiermee wordt een complete tabel verwijderd.
  3. Exporteer: hiermee kun je back-ups maken van je database in verschillende formaten. Je hebt ook allerlei opties waaruit je kunt kiezen. Als er gekozen wordt voor een SQL-bestand kan dat bestand later weer gebruikt worden voor de import in een andere database.
  4. Importeer: hiermee kun je gegevensbestanden inlezen en toevoegen aan een database. Bijvoorbeeld SQL-bestanden.
  5. Handelingen: hiermee kun je sorteeropties instellen, tabellen naar een andere plaats brengen, tabelopties aanpassen, de auto-increment index aanpassen en tabellen kopiëren naar andere databases.
  6. Zoeken: hiermee kun je allerlei zoekopties ingeven om te zoeken naar records. Er wordt dan automatisch een SQL-query aangemaakt.
  7. SQL: hier kun je zelf SQL-queries aanmaken.
  8. Rechten: Als je links klikt op een database verschijnt ook de optie Rechten. Als je daarop klikt, verschijnen alle gebruikers in beeld die van de database gebruik maken. In ons geval is dat root. Door te klikken op icoon onder Actie verschijnt er een venster waarin alle rechten te zien zijn. In ons geval zijn alle rechten aangevinkt en zijn er verder geen beperkingen. Het kan echter handig zijn om voor bepaalde databases de rechten zodanig aan te passen zodat er weinig schade kan worden berokkend. De rechten UPDATE, DROP en DELETE kunnen bij verkeerd gebruik voor veel ellende zorgen. Je zou die kunnen uitvinken.

★ Aan de slag 43

Voor de database Nederland hebben we stap voor stap laten zien hoe je in phpMyAdmin de tabel provincies kan aanmaken. In deze opdracht ga je de tabel vlaggen aanmaken. Start de phpMyAdmin-omgeving op. Maak in de database Nederland de tabel vlaggen aan. Gebruik daarvoor het strokendiagram:

 

De kolommen vlag_id en prov_id zijn van het type int en hebben een lengte van 2. De kolom vlag_link is van het type varchar en heeft een lengte van 25. In de tabel vlaggen is vlag_id de sleutel van de tabel. Vink voor de sleutel auto_increment aan.

 

★ Aan de slag 44

  1. Maak in phpMyAdmin een nieuwe database hotel aan. Voeg aan deze database de tabel gasten toe. Daarin moeten de persoonsgegevens en inloggegevens worden opgeslagen (voornaam, tussenvoegsel, achternaam, telefoon, e-mailadres, gebruikersnaam en wachtwoord). Kies voor een gemakkelijke primaire sleutel. Vul de tabel met 4 personen.
  2. Maak een bestand connect.php waarin je jouw gegevens verwerkt waardoor je verbinding kunt maken met de server en de database hotel.

INSERT en UPDATE

Om gegevens in een database in te voeren kun je natuurlijk als webmaster via phpMyAdmin iedere keer braaf gegevens toevoegen. Handiger zou het zijn als dit automatisch kan gebeuren. Stel je wilt een forum op internet beheren en je zou van alle gebruikers zelf de gegevens moeten intypen. Dat is haast onbegonnen werk. Nu is er een mogelijkheid om met PHP en MySQL deze gegevens automatisch te verwerken. Je maakt daarvoor een geschikt webformulier waarin je de benodigde gegevens moet invullen. In het formulier check je eerst of de juiste gegevens zijn ingevuld en vervolgens sla je via een PHP-script de gegevens middels een INSERT-query op in de daarvoor bestemde tabel(len) in de database.

Wij werken hier het voorbeeld uit voor de tabel provincies. Hoe kunnen we via een invulformulier meerdere provincies in de tabel opslaan. We zullen daarvoor een formulier moeten ontwerpen met verschillende invoervelden en een knop waarmee de gegevens kunnen worden toegevoegd. Door te klikken op de knop wordt er een PHP-bestand aangeroepen waarmee de query die zorgt voor het toevoegen van de ingevulde gegevens

De code van dat formulier luidt:

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>formulier toevoegen provincies</title>
           <meta charset="utf-8">
     </head>
     <body>
     <body>
           <form name="toevoegen" action="provtoevoegen.php" method="post">
                 <fieldset>
                 <legend>Toevoegen provincie</legend>
                 <table>
                       <tr>
                             <td align="right">Provincie:</td> <td><input type="text" name="provincie" size="25"></td>
                       </tr>
                       <tr>
                             <td align="right">Hoofdstad:</td> <td><input type="text" name="hoofdstad" size="25"></td>
                       </tr>
                       <tr>
                             <td align="right">Bevolking:</td> <td><input type="text" name="bevolking" size="10"></td>
                       </tr>
                       <tr>
                             <td align="right">Oppervlakte km2:</td> <td><input type="text" name="oppervlakte_km2" size="4"></td>
                       </tr>
                       <tr>
                             <td align="right">Inwoners km2:</td> <td><input type="text" name="inwoners_km2" size="4"></td>
                       </tr>
                       <tr>
                       <tr>
                            <td><input type="submit" value="Voeg provincie toe"></td>
                       <td><input type="reset" value="Wis gegevens"></td>
                       </tr>
                 </table>
                 </fieldset>
           </form>
     </body>
</html>





 

Je ziet dat de onderdelen door middel van een tabel keurig geordend zijn en dat de tekst in de eerste kolom rechts is uitgelijnd. We willen nu de gegevens van Drenthe aan de database toevoegen:

In het formulier wordt bij de action verwezen naar het bestand provtoevoegen.php. In het PHP-script van dat bestand zal ergens de verbinding met de database Nederland terug te vinden zijn. De kans is groot dat de verbinding met de database ook in andere bestanden gerealiseerd zal moeten worden. Het is daarom handig om daarvoor een apart include-bestand te gaan gebruiken. Include betekent insluiten. Telkens als er een verbinding met de database moet worden geregeld, roepen we dit include-bestand aan. De opdracht voor het insluiten van bestanden is include("bestandsnaam.php"). Stel we hebben het script voor de connectie met de database opgeslagen in een bestand met de naam connect.php. Dan wordt het include-bestand include("connect.php"). Het werken met een include-bestand is zeker uit veiligheidsoverwegingen raadzaam en bovendien ook praktisch. Want stel dat je van webhost verandert en in elk script de connectiegegevens moet gaan wijzigen dan is dat een heleboel werk. Nu hoef je alleen maar dat ene bestand te veranderen.

In connect.php zou dan bijvoorbeeld kunnen staan:

<?php

     // verbinding maken met de database

     $server = "localhost";
     $user = "enigma";
     $password = "enigma1234";
     $database = "Nederland";

     $verbinding = mysqli_connect($server, $user, $password, $database)
     or die ("Er kan geen verbinding tot stand worden gebracht: " .
     mysqli_connect_error());

?>


Het bestand connect.php slaan we voor het gemak op in de map includes op de webserver. In dezelfde map kunnen we bijvoorbeeld ook het bestand functions.php opslaan. Dit is het bestand waar alle functies instaan die we vaker willen gebruiken. De include-opdracht voor het tot stand brengen van de connectie met de database vinden we terug in het bestand provtoevoegen.php:


<?php

     // Connectie met de database maken

     include("includes/connect.php");

     // Ophalen van gegevens uit het formulier

     $provincie = $_POST["provincie"];
     $hoofdstad = $_POST["hoofdstad"];
     $bevolking = $_POST["bevolking"];
     $oppervlakte_km2 = $_POST["oppervlakte_km2"];
     $inwoners_km2 = $_POST["inwoners_km2"];

     // Invoegen van de gegevens in de tabel provincies

     $query = "INSERT INTO
     provincies(prov_id,provincie,hoofdstad,bevolking,oppervlakte_km2,inwo
     ners_km2)
     VALUES('','$provincie','$hoofdstad','$bevolking','$oppervlakte_km2'
'      $inwoners_km2')";
     $resultaat = mysqli_query($verbinding, $query);

     // Verbreken van de verbinding met de database

     $verbreken = mysqli_close($verbinding);

     // Bevestigen dat de gegevens zijn opgeslagen

     echo "De gegevens van $provincie zijn opgeslagen in de database.";
?>

In het vanuit provtoevoegen.html aangeroepen bestand provtoevoegen.php regelen we via de INSERT INTO query het toevoegen van gegevens aan de database Nederland. Het format van de INSERT INTO query is:

$query = "INSERT INTO tabelnaam(kol1 , kol2 , etc.) VALUES('var1', 'var2' , etc.)";
$resultaat = mysqli_query($verbinding, $query);

Let erop dat bij het gebruik van de variabelen in de VALUES enkelvoudige aanhalingstekens (‘) worden gebruikt in plaats van dubbele aanhalingstekens (“). Escape is bij enkelvoudige aanhalingstekens niet nodig.
De eerste regel is de query die moet worden uitgevoerd. De tweede regel met de functie mysqli_query() zorgt voor het daadwerkelijk toevoegen van de gegevens in de database.
Als we nu gaan testen of de gegevens inderdaad in de database staan kunnen we dat doe door een SELECT query uit te voeren.

Het resultaat zou er dan als volgt uit kunnen zien:



★ Aan de slag 45

Maak een formulier waarmee je de personen in de tabel gastenkunt invoeren. Werk met tabellen voor de lay-out. De kleur van het buitenste gedeelte is #fedcba en dat van het binnenste gedeelte #abcdef. De grootte van de invoervelden is 20. De datum is die van vandaag, vetgedrukt. Het format daarvoor is dag-maand-jaar. Sla dit bestand op als aandeslag_45.html. In het HTML-formulier wordt voor het verwerken van de gegevens het bestand aandeslag_47.php aangeroepen. Dit bestand heb je nog niet gemaakt. Dat gebeurt bij opdracht 47. Sla het bestand op als aandeslag_45.html.

Het formulier ziet er dan zo uit:

★ Aan de slag 46

  1. Open Notepad++. Maak een script waarmee je uiteindelijk via het invulformulier gegevens in de tabel gasten kunt invoeren. Sla dit bestand op als aandeslag_46.php.
  2. Voer nu via het zojuist gemaakte formulier nog de gegevens van twee nieuwe gasten toe aan de tabel gasten.

★ Aan de slag 47

  1. Maak een formulier waarmee je een hotelreservering kunt doen. Werk weer met tabellen voor de lay-out. De kleur van het buitenste gedeelte is #fedcba en dat van het binnenste gedeelte #abcdef. De grootte van de invoervelden is 15. De datum is die van vandaag, vetgedrukt. Het format daarvoor is dag-maand-jaar. Sla dit bestand op als aandeslag_47a.html. In het HTML-formulier wordt voor het verwerken van de gegevens het bestand aandeslag_41c.php aangeroepen. Dit bestand heb je nog niet gemaakt. Het formulier ziet er dan zo uit:


  2. Maak in phpMyAdmin een tabel reservering aan. Daarbij moet je gebruik maken van: id (auto_increment), gast_id, kamertype, nachten, ontbijten, lunches en diners. Let op de datatypes! Er bestaat een relatie met de tabel gasten.
  3. Maak een script aandeslag47c.php waarmee de gegevens van de reservering worden opgeslagen. Het gast_id is het nummer dat de gast bij de registratie via de website heeft gekregen. Er staan 4 personen in de tabel gasten met de gast_id's 1, 2, 3 en 4. Maak van elke klant twee verschillende reserveringen aan.

★ Aan de slag 48

Maak een script waarin je op het scherm laat zien welke gasten (voornaam, tussenvoegsel, achternaam) hoeveel reserveringen hebben gedaan. Sla dit bestand op als aandeslag_48.php.

Stel dat er gegevens uit de database moeten worden aangepast. Daarvoor maken we gebruik van de UPDATE query. We willen de gegevens voor Groningen aanpassen. De bevolking moet worden opgehoogd naar 602750. Dat gaat als volgt:

<?php

     // Connectie met de database maken

    include("includes/connect.php");

    // Vervangen van gegevens in de tabel landen

    $query = "UPDATE provincies SET bevolking = 602750 WHERE provincie = \"Groningen\"";
    $resultaat = mysqli_query($verbinding, $query);

    // Verbreken van de verbinding met de database

    mysqli_close($verbinding);

     // Bevestigen dat de gegevens zijn opgeslagen

    echo "De gegevens zijn aangepast in de database.";
?>

Afbeeldingen

Op websites worden vaak afbeeldingen gebruikt. Hoe ga je daar mee om als bij een website de meeste gegevens in een database staan? Je zou ervoor kunnen kiezen de afbeeldingen ook in de database te stoppen maar dat is niet aan te raden. De database wordt dan heel snel erg groot en kan daardoor ook overbelast raken. Dit probleem kan worden ondervangen door de afbeeldingen niet in de database zelf op te slaan, maar in de database een link te plaatsen die verwijst naar het bijbehorende bestand. We illustreren dit aan de hand van de tabel vlaggen in de database Nederland.

Stel we hebben plaatjes van de vlaggen van provincies als jpg-bestanden opgeslagen in een map vlaggen. Het PHP-bestand waarmee we naar die plaatjes gaan vragen, staat een directory hoger. We hebben in phpMyAdmin in de tabel vlaggen een kolom vlag_link toegevoegd. In deze kolom wordt de plek aangegeven, in ons voorbeeld vlaggen/groningen.jpg, waar de afbeeldingen van de vlaggen van de diverse provincies opgeslagen zijn.



Als je nu een query uitvoert met opnieuw als resultaat de provincies van Nederland maar nu met de bijbehorende vlag zal het script er dan deels als volgt uitzien:


<!DOCTYPE html>
<html lang="nl">
      <head>
            <title>vlaggen</title>
            <meta charset="utf-8">
            <link rel="stylesheet" href="opmaak.css">
      </head>
      <body>
            <h3>Een overzicht van de vlaggen van alle provincies</h3>
            <table border="1" cellpadding="3">
                  <tr>
                        <th>provincie</th>
                        <th>vlag</th>
                  </tr>
                  <?php
                  include("includes/connect.php");

                  $query= "SELECT provincie, vlag_link
                  FROM provincies, vlaggen
                  WHERE provincies.prov_id = vlaggen.prov_id";
                  $resultaat = mysqli_query($verbinding, $query);
                  while ($row = mysqli_fetch_array($resultaat))
                  {
                  ?>
                  <tr>
                        <th><?php echo $row['0']; ?></th>
                        <td><img src ="<?php echo $row['1']; ?>"</td>
                  </tr>
                  <?php
                  }
                  ?>
            </table>
            <?php
                  mysqli_close($verbinding);
            ?>
      </body>
</html>



Het resultaat is een tabel met de vlaggen van de Nederlandse provincies:



Databases importeren

In phpMyAdmin is het mogelijk om een bestaande database te importeren. In het volgende laten we zien hoe je in phpMyAdmin de databases buurtvereniging kunt importeren.


Start phpMyAdmin op.

 

 



 

 

 

Klik in de linkerkant op nieuw. In het menu zie je de optie “importeren” staan. Voor het importeren van de database buurtvereniging heb je het bestand buurtvereniging.sql nodig. Dit bestand staat onder Bijlagen bij de bestanden die je nodig hebt voor deze module. Klik nu op importeren. Klik op “Bestand kiezen” en selecteer het bestand buurtvereniging.sql.

 

 




Klik daarna op starten. De database buurtvereniging wordt nu ingelezen.

 

★ Aan de slag 49

Maak in phpMyAdmin de gebruiker enigma (wachtwoord enigma1234) aan en geef deze gebruiker alle rechten op de geïmporteerde database buurtvereniging.

Sessies in PHP

Sessies maken het mogelijk om variabelen te gebruiken binnen een hele website. Op het moment dat een bezoeker een website bezoekt, wordt een sessie id aangemaakt. Een dergelijk id is een uniek nummer. Het unieke nummer komt te vervallen op het moment dat de bezoeker uitlogt, de browser zal afsluiten of een op de server van tevoren ingestelde tijd geen actie meer heeft ondernomen op de website. Je kunt met sessions werken via cookies of via de session_id in de URL.

Een sessie wordt gestart door gebruik te maken van de functie session_start(). Dan wordt er voor iedere bezoeker een uniek sessie_ID aangemaakt dat gedurende het verblijf op de website wordt meegenomen. Doordat je nu zo’n uniek ID hebt is het mogelijk gegevens op te slaan in de vorm van sessievariabelen. Hiervoor wordt de PHP-variabele $_SESSION[] gebruikt. Je kunt sessievariabelen ook wissen door de functie unset(). Tot slot is het mogelijk om de sessie te vernietigen waarbij alle sessievariabelen, inclusief het sessie_ID worden verwijderd.
Daarvoor gebruik je de functie session_destroy().

In de onderstaande tabel staan diverse functies die van belang zijn bij het werken met sessies.


Functie Betekenis
session_start() Opent nieuwe sessie of stelt gegevens bestaande sessie beschikbaar
session_id() Geeft huidige session ID terug of je kunt zelf een ID meegeven als String voor een sessie
session_unset() Alle geregistreerde variabelen komen vrij, de sessie blijft bestaan, alleen de waarden van de variabelen zijn weg
session_destroy() Verwijdert alle data voor een sessie. De sessie is daarmee ten einde

We illustreren het gebruik van sessies aan de hand van een voorbeeld:

<?php
     session_start();

     // opslag van sessiedata
     $naam = "Alan Turing";
     $_SESSION['naam'] = $naam;
?>

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>sessies</title>
           <meta charset="utf-8">
     </head>
     <body>
     <?php
           echo $_SESSION['naam'];
     ?>

     </body>
</html>

 

Nadat er een nieuwe sessie is gestart, wordt de waarde van de variabele $naam toegekend aan de array $_SESSION[]. Vervolgens wordt de waarde van de variabele $naam op het scherm getoond. Dat is letterlijk de tekst “Alan Turing”.

In het volgende script starten we een sessie en kennen we de waarde van de variabele $naam toe aan de array $_SESSION[]. Daarna wordt de waarde van de variabele $naam evenals de session_id op het scherm getoond.

 


<?php
     session_start();
     $naam = "Ronald";
     $_SESSION['naam'] = $naam;
?>

<!DOCTYPE html>
<html lang="nl">
     <head>
           <title>sessies</title>
           <meta charset="utf-8">
     </head>
     <body>
           <h4>Uw gebruikersnaam voor deze sessie is:
                       <?php echo $_SESSION['naam'] . "<br>";
                       $session_id = session_id();
                       echo "Het session_id = $session_id";
                 ?>
           </h4>
     </body>
</html>


   

Waarom sessies?

Een aantal aspecten spelen een belangrijke rol:

Veiligheid

Pagina’s kunnen alleen maar ingezien worden indien er ingelogd is en er een bekende gebruikersnaam als sessionvariabele op de server en cliënt aanwezig is.

Behouden van (ingevulde) informatie

Handig als er meerdere pagina’s op een webserver moeten worden bekeken. Eerder ingevulde gegevens raken dan niet verloren maar zijn opgeslagen in sessionvariabelen. Erg handig bijvoorbeeld bij webwinkels:

  • eerst verschillende pagina’s bekijken;
  • artikelen in winkelmandje stoppen;
  • tussentijdse berekeningen uitvoeren;
  • gegevens in formulieren invullen;
  • eventuele wijzigingen doorvoeren;
  • en tot slot afrekenen.

★ Aan de slag 50

We ronden deze module af met een uitgebreide opdracht voor de zojuist geïmporteerde database buurtvereniging. Open Notepad++.
Schrijf de code voor de onderstaande bestanden:
1 index.html:
Op deze pagina wordt een formulier weergegeven waarop kan worden ingelogd met een gebruikersnaam en een wachtwoord. Het formulier verwijst naar inloggen.php.


 

2 inloggen.php:
Op deze pagina wordt gecontroleerd of de combinatie van de ingevulde gebruikersnaam en het bijbehorende wachtwoord klopt. Zo ja dan wordt je door verwezen naar start.php. Op deze pagina wordt een sessie gestart. Maak van de gebruikersnaam, het wachtwoord en het lidnummer sessievariabelen waarvan de waarden beschikbaar zijn zolang er niet wordt uitgelogd. Als het inloggen niet lukt, wordt er doorverwezen naar index.html en krijg je het formulier weer te zien. Gebruik daarvoor: header("Location: index.html");

3 start.php:
Op deze pagina kom je terecht als het inloggen met een gebruikersnaam en een bijbehorend wachtwoord lukt. Dat geldt bijvoorbeeld voor de gebruikersnaam dijkstra en het wachtwoord welkom01.

Op start.php wordt de naam van het lid en zijn / haar lidnummer getoond. Deze waarden zijn beschikbaar omdat de sessie nog niet is beëindigd.



Voortgang

Bekijk hier je voortgang

Keuzedeel


Docent kan klassen aanmaken en leerlingen volgen
Een docent kan op de profielpagina klassen aanmaken. Als een docent dat gedaan heeft, kunnen de leerlignen zich aan de klas koppelen. Als de leerlingen dat gedaan hebben, kan de docent de voortgang van de leerlingen volgen.

>> Profielpagina
  • Het arrangement PHP en MySQL is gemaakt met Wikiwijs van Kennisnet. Wikiwijs is hét onderwijsplatform waar je leermiddelen zoekt, maakt en deelt.

    Auteur
    VO-content
    Laatst gewijzigd
    2019-07-09 08:07:09
    Licentie
    CC Naamsvermelding-GelijkDelen 4.0 Internationale licentie

    Dit lesmateriaal is gepubliceerd onder de Creative Commons Naamsvermelding-GelijkDelen 4.0 Internationale licentie. Dit houdt in dat je onder de voorwaarde van naamsvermelding en publicatie onder dezelfde licentie vrij bent om:

    • het werk te delen - te kopiëren, te verspreiden en door te geven via elk medium of bestandsformaat
    • het werk te bewerken - te remixen, te veranderen en afgeleide werken te maken
    • voor alle doeleinden, inclusief commerciële doeleinden.

    Meer informatie over de CC Naamsvermelding-GelijkDelen 4.0 Internationale licentie.

    Het thema 'PHP en MySQL' is ontwikkeld door auteurs en medewerkers van Enigma-online.

    Fair Use
    In de modules van Enigma-online wordt gebruik gemaakt van beeld- en filmmateriaal dat beschikbaar is op internet. Bij het gebruik zijn we uitgegaan van fair use. Meer informatie: Fair use

    Mocht u vragen/opmerkingen hebben, neem dan contact op
    via de helpdesk VO-content .

    Aanvullende informatie over dit lesmateriaal

    Van dit lesmateriaal is de volgende aanvullende informatie beschikbaar:

    Leerniveau
    HAVO 4; VWO 6; HAVO 5; VWO 4; VWO 5;
    Leerinhoud en doelen
    Informatica;
    Eindgebruiker
    leerling/student
    Moeilijkheidsgraad
    gemiddeld
    Trefwoorden
    arrangeerbaar, leerlijn, rearrangeerbare