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 en de koppeling met een Database
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. HTML is immers de basis van alle website's
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.
Bijlage
Wij zullen gebruik maken van USBwebserver.
USBwebserver kan je downloaden vanuit teams voor thuis, en op school kun je bij de les de usb-stick gebruiken. Deze versie is geschikt en getest op de schoollocatie.
Voor deze lessen zitten we op versie v8.2 die direct vanuit de windows verkenner OneDrive is te starten.
Bij deze module horen de volgende bestanden:
- broncode_javascript.html
- broncode_php.php
- template.html
- formulier.html
- naw.php
- buurtvereniging.sql
bestanden module PHP en MYSQL
(Deze hebben we later nodig!)
★ Opdracht 1
DIT IS EEN EENMALIGE ACTIE!!!
Start de school computer op, zorg dat je OneDrive voor school actief zichtbaar is in de Windows verkenner.

Download vanuit Teams de software USBWebserver

Deze vind je dan in de Windows verkenner terug onder de map "downloads".

Sleep dit bestand naar je School Onedrive, klik dan daar met je rechtermuis knop op en kies dan voor "hier uitpakken"
Je moet dan onderstaand beeld hebben

Aan de slag
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.
je krijgt naast een uitleg ook aantal opdrachten, deze lever je dan in via Teams Opdrachten.
succes
Scripts
Java versus PHP script
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.
Als je goed hebt opgelet, heb je gezien dat de PHP pagina's die door de server worden opgebouwd een extensie .php hebben. Let op dat al jou pagina's waarin je PHP gebruik deze extensie hebben.
Wanneer je de .html extensie gebruik zal PHP code niet worden uitgevoerd en letterlijk als tekst worden teruggegeven aan de client.
Een html bestand kan je ook lokaal gewoon openen.
Een PHP bestand moet altijd uitgevoerd worden via een programma(USBWebserver) om te kunnen bekijken.
PHP-editor
Voor het verwerken van PHP-scripts hebben we een server nodig.
Wij maken hiervoor gebruik van USBwebserver.

Alle bestanden die je wilt uitvoeren kom in de 'root' folder te staan van je USBwebserver.
Stap 1
Start USBwebserver op
Stap 2
Ga naar http://localhost
USBwebserver zal nu kijken of een bestand index.php in de root folder staat. Indien dit bestand aanwezig is zal dit worden uitgevoerd.
Wanneer dit bestand niet bestaat krijg je een lijst te zien van alle bestanden die in de root folder staan. Dit is vaak prettig want dan kan je er eentje aan klikken die jij graag wilt uitvoeren. Dus tip verwijder index.php (indien aanwezig)
Voor het schrijven van je PHP-code kan je gebruik maken van diverse editors. Bijvoorbeeld:
- Kladblok / Notepad
- Notepad++
Het gebruik van een bepaalde editor is een kwestie van smaak. Notepad++ maakt het leven wel een heel stuk makkelijker. Deze staat al op de schoolcomputers geinstalleerd
PHP - basiskennis
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 "mijn website via PHP";
?>
</body>
</html>
De PHP-code begint met de tag <?php en eindigt met de tag ?>.
Voorbeeld-2
Een bestand dat PHP-code bevat, moet altijd worden opgeslagen onder de extensie
eennaam.php
Doe je dat niet, dan kan de server de PHP-code in het document niet parsen.
De meer betere editors zullen bestanden met een extensie .php voorzien van kleurtjes zodat de code beter leesbaar wordt en fouten sneller kunnen worden opgespoort.
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 “Hallo Wereld” 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=\"color:blue;\"> Enigma </span> betekent raadsel.";
?>
Een andere oplossing is het gebruik van enkele quotes in de string. Zie voorbeeld hieronder.
<?php
echo "Het Griekse woord <span style='color:blue;'> Enigma </span> betekent raadsel.";
?>
★ Opdracht 2
Zorg dat je USBWebserver hebt opgestart(opdracht1)
Open het programma notepad++ en sla het lege document vast op onder de naam
opdracht2.php

NEEM NU EXACT ONDERSTAAND CODE OVER

Sla deze op, en open deze door te gaan naar localhost, en dan erachter opdracht2.php te typen
http://localhost:8080/opdracht2.php of http://localhost/opdracht2.php

Deze opdracht2 kun je dan inleveren via Teams
Commentaar
PHP-code kun je op meerdere manieren van commentaar voorzien:
- // één regel commentaar voorafgegaan door een dubbele slash.
- # één regel commentaar voorafgegaan door een hekje.
- /* 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.
Bekijk onderstaand video(indien in de klas dan via docent en digibord) Daarin wordt nog even de opties van "echo" herhaald met mooie voorbeelden.
Gebruik bij de volgende opdrachten dan ook steeds de Commentaar regels van wat je doen, of code dient te doen.
Echo
★ Opdracht 3
Maak een bestand in de ROOT folder genaamd commentaar.php , typ onderstaand code over en voorzie deze met Commentaar regels.
Zet per echo regel een commentaar regel neer met lort uitleg wat de werking van de code is.
<!DOCTYPE html>
<html lang="en">
<head>
<title>USBWebserver!!!!</title>
</head>
<body>
<?php
echo 'One line simple string.<br />';
echo "Het Griekse woord <span style=\"color:blue;\"> Enigma </span> betekent raadsel.<br />";
echo "Het Griekse woord <span style=\"color:red;\"> Enigma </span> betekent raadsel.<br />";
echo 'Het Griekse woord <span style=\'color:blue;\'> Enigma </span> betekent raadsel.<br />';
echo 'Het Griekse woord <span style=\'color:red;\'> Enigma </span> betekent raadsel.';
?>
</body>
</html>
Sla deze op, en test deze uit.(tip in de browser kun je de met rechtermuis knop bronweergeven, dan kun je de code terug zien)
★ Opdracht 3.1
Maak met drie <hr> tags en de echo " *** " statement het volgende figuur:
De nederlandse flag
TIP: Het rode streepje maak je met de code:
<hr size='30px' color='red' width='300px'>
kijk goed naar vorige voorbeelden van de echo regels!!
Sla wederom op, en test dit uit.
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.
★ Opdracht 4
Maak een bestand "hoofdstad.php" en plaats deze in je root folder.
Bovenaan in je bestand begin je met <?php omdat we in dit bestand geen HTML gaan gebruiken en alleen PHP code hoeft het bestand niet afgesloten te worden met ?> (mag wel)
Maak een variabele aan $hoofdstad met de waarde "Amsterdam"
In de regel daaronder doe je een echo van de variabele.
*Tip, bekijk de vorige uitleg en voorbeeld code*
Na het uitvoeren van http://localhost/hoofdstad.php zou je op je scherm Amsterdam moeten zien staan.
Tip. Denk aan het afsluiten van elke regel met een ;
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;'
?>

snel online testen kan hier
replit.com
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. En deze ook wordt weergegeven met de dubbel aanhalingstekens. 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 :
- integers of gehele getallen;
- doubles of komma getallen (doubles worden ook wel floating point numbers genoemd);
- booleans (true/false of waar/onwaar);
- strings (letters en andere tekens eventueel gecombineerd met cijfers);
- arrays (rijen of reeksen);
- 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.
★ Opdracht 5
Neem bovenstaand code over, noem dit bestand datatype.php
en vermeld in je eigen woorden via commentaar regels in de code uit te leggen waarom je een 1 krijgt te zien als resultaat.
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 |
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”. (indien de operator % wordt gebruikt is het resultaat de rest van de deling van de twee geallen, bv 5%3=2)
Let op dat je in je if == gebruikt en niet =, de betekenis is namelijk heel anders.
Meer info(https://www.php.net/manual/en/language.operators.comparison.php)

★ Opdracht 6
Neem de code over die je hiervoor zag, noem dit bestand dan operator.php
en maak een screenshot van de uitkomst(die sla je op als operator.jpg
Natuurlijk test je dit met de USBWebserver aan natuurlijk!!

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.
uitleg van "for" statement
★ Opdracht 7

Schrijf een script dat de getallen 10 tot en met 100 bij elkaar optelt
Gebruik in je code het for-statement.
Sla je opdracht op als optellen.php.
Bekijk de vorig code en uitleg goed!! dan moet je eruit komen
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>";
}
?>
Je gebruikt while() vooral bij mysql, want daarmee kan je makkelijk records weergeven.
Daar komen verder in deze lessen serie weer op terug
While
De syntax van de while-loop ziet er als volgt uit:
<?php
while( statement )
{
// Doe iets
}
?>
Zolang aan statement voldaan wordt, zal de code in de loop, die wederom tussen accolades {} staat, telkens opnieuw uitgevoerd worden. Vaak wordt een while-loop in combinatie met een tellertje gebruikt, bijvoorbeeld om de getallen 1-10 weer te geven:
<?php
$i = 1;
while($i <= 10)
{
echo $i.' ';
//Valt het op?, in de eerdere code hebben we de min tekens gebruikt.
$i++;
}
?>
1 2 3 4 5 6 7 8 9 10
Deze code telt de waarde dus op.
De vertaling van dit stukje code is als volgt: 'Zolang $i kleiner dan of gelijk aan 10 is, echo $i en verhoog de waarde van $i met 1'. De uitdrukking $i++ zorgt er dus voor dat de waarde van $i met 1 opgehoogd wordt. Merk op de variabele $i al aangemaakt moet zijn voordat de while-loop begint, anders zal PHP het niet slikken.
For
Een tweede soort loop is de for-loop. Hoewel deze eigenlijk precies hetzelfde doet, is de syntax iets anders:
<?php
for( beginconditie ; statement ; increment )
{
// Doe iets
}
?>
In de beginconditie stel je de beginwaarden voor de loop in. Dit zou bijvoorbeeld het declareren van de variabele $i kunnen zijn, zoals we dat ook voor de while loop deden. Het statement is hetzelfde als bij de while-loop en het increment gedeelte bepaalt wat er na elke loop met de variabelen uit de beginconditie gebeurt.
Ook nu is het weer mogelijk om de getallen 1-10 te genereren:
//
For loop in php
<?php
for ($i = 0; $i < 10; $i++) {
echo $i."<br>";
}
?>
Deze constructie zou dezelfde vertaling hebben als het voorbeeld hiervoor, alleen zitten de verschillende onderdelen op een andere plaats. Zo vormt $i = 0 de beginconditie, is het statement hetzelfde als in de while-loop en vormt $i++ het increment gedeelte.
Switch

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.
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 © 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 © 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.
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 functie zou er dan alsvolgt uit kunnen zien
<?php
function show_copyright($site_naam)
{
echo "Copyright © 2008 - " . date("Y") . " ".$site_naam." Alle rechten voorbehouden.";
}
show_copyright();
?>
Tussen de haakjes van de functie mag je zelf een variabele bedenken. Deze variabele bestaat alleen binnen de functie.
De aanroep van de functie: show_copyright("Enigma");
Met als resultaat:
Copyright © 2008 - 2021 Enigma Alle rechten voorbehouden.
★ Opdracht 8
Maak een bestand vlag.php
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 functie.
https://cdn.pixabay.com/photo/2017/06/11/02/24/netherlands-2391370_1280.png
Tips:
Als je niet meer weet hoe de html <img> tag werkt kijk dan even bij W3schools.
Je hoeft de afbeelding niet eerst te downloaden. Je kan de url die hierboven staat als src gebruiken.
Uitbreiding
Je kan ook aan je functie toon_vlag()een parameter toevoegen.
bv
toon_vlag("NL");
toon_vlag("GB");
Pas je functie aan zodat dit ook gaat werken.
Tip: Kijk naar de URL van de vlag en ga hier wat aanpassen
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 = € $prijs<br>\n";
$tarief = 100 * $btw;
echo "BTW-tarief = $tarief<br>\n";
echo "De eindprijs = € $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 € " . $bestedingsbedrag . " verwijderd van uw kredietlimiet.";
} else {
$overschrijding = number_format(($aankoopbedrag - $kredietlimiet),2);
echo "Uw aankoopbedrag overstijgt de kredietlimiet met € ". $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:
Geef onderstaand code in je editor de naam verkoop.php
<?php
include("functions.php");
$prijs = 24.95;
$btw = .21;
$eindprijs = bereken_eindprijs($prijs,$btw);
$eindprijs = number_format($eindprijs,2);
echo "Verkoopprijs zonder BTW = € $prijs<br>\n";
$tarief = 100 * $btw;
echo "BTW-tarief = $tarief<br>\n";
echo "De eindprijs = € $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);
}
?>
Je hebt dus TWEE bestanden nodig, het bestand verkoop.php die het bestand functions.php aanroept
★ Opdracht 9
Neem bovenstaand code over, pas de waarde aan naar de prijs van b.v. een auto.
Gebruik als extra Functie de code van je flag(vlag.php) bij Opdracht 8 en gebruik dan als afbeelding een plaatje van een auto
Arrays, Wat is dat?

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 = ["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.
LET OP
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".
Dit hebben we alleen NIET goed gedaan. Test deze code maar eens in je browser

Zoals in de code ziet, mis je dus de "array"

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. NIET BIJ 1 DUS
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.
Escape
★ Opdracht 10
Met loops kan je gemakkelijk array's op het scherm tonen hieronder een voorbeeld van een array met provincies.
<?php
$provincies= array (
"Groningen",
"Friesland",
"Drenthe",
"Overijssel",
"Flevoland",
"Gelderland",
"Utrecht",
"Noord-Holland",
"Zuid-Holland",
"Zeeland",
"Noord-Brabant",
"Limburg",
);
foreach($provincies as $provincie)
{
echo $provincie."<br>";
}
?>
De foreach loop gaat alle elementen van een array af en die stop je in een andere variabele. In dit geval $provincie
Maak een script kleuren.php en stop daar de missende array in.(zie bovenstaande code)
Extra kudo's als het lukt om dan ook met een loop de daadwerkelijke kleuren op het scherm te krijgen.
$kleuren=???(
"red",
"green",
"yellow",
"blue"
);
Resultaat
redgreenyellowblue
Tipje
Kijk goed naar de code hierboven van hoe de landen zijn weergeven.
en met echo 
zou je resultaat moeten krijgen( de \ is terug te vinden in de uitleg van "escapen")
Handige functies

Er bestaan handige functies die je in combinatie met arrays kunt gebruiken. Bijvoorbeeld de functie count():
<?php
$mijnArray = [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 = [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:
Arrayfuncties en databases

Op weg naar de koppeling met een Database!
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
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="utf-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. Wanneer de action wordt weggelaten zullen de gegevens naar de huidige pagina worden verstuurd. 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 $_POST. De variabelen naam, adres en woonplaats worden dus opgeslagen in de array $_POST.
De code van naw.php is:
<?php
$naam = $_POST["naam"];
$adres= $_POST["adres"];
$woonplaats = $_POST["woonplaats"];
?>
<!DOCTYPE html>
<html lang="nl">
<head>
<title>verwerken NAW-gegevens</title>
<meta charset="utf-8">
</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.
★ Opdracht 11
Neem de code van het formulier over, sla deze op onder fomulier.html
Neem de code van naw.php over en sla deze dan op onder naw.php
bij de weergave is het veld van invoer leeg, je weet dus niet waar je nu dan de naam, adres of plaatst moet invoeren.
pas dit aan zodat je als eindgebruiker weet wat je moet invoeren

Test deze eerst, en vul deze daarna aan met de volgende extra velden
Provincie
Land
en test deze wederom.
★ Opdracht 11.1
Maak een bestand ik.php
Start met een html opmaak
Plaats in de body het volgende formulier:
<form method="post">
<p><input type="text" name="naam" placeholder="Naam"></p>
<p><input type="number" name="leeftijd" placeholder="Leeftijd"></p>
<p><input type="text" name="sport" placeholder="Sport"></p>
<p><input type="submit" value="verstuur"></p>
</form>
Omdat het formulier geen action heeft zullen de gegevens naar ik.php worden verstuurd.
Voeg helemaal boven aan een stukje php code toe die alle waardes die zijn verstuurd omzetten in een variabele. Hieronder is alvast een begin gemaakt.
<?php
$naam = $_POST['naam'];
$leeftijd =
?>
Hierna kan je een nieuw stukje php code toevoegen in de body, waarin de zin komt te staan.
Ik ben <naam>, ben <leeftijd> jaar oud en doe graag <sport>.
Hierbij worden natuurlijk de stukjes tussen < > vervangen door de verstuurde waardes.
Als je de pagina voor de eerste keer opent heeft de $_POST nog geen inhoud. Dit zal een foutmelding geven bij $naam = $_POST['naam'];. Na het versturen van je formulier zal de foutmelding verdwijnen omdat de $_POST nu wel inhoud heeft.
Je kan deze fout eenvoudig vermijden door onderstaande IF toe te voegen.
if($_POST!=null){
$naam = $_POST['naam'];
//.. nog meer code
}
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" placeholder="Naam" name ="naam"></p>
<p><input type = "text" placeholder="Adres" name ="adres"></p>
<p><input type = "text" placeholder="Woonplaats" name ="woonplaats"></p>
</fieldset>
<p><input type = "submit" value = "Verstuur"></p>
</form>
</body>
</html>
★ Opdracht 11.2
Maak een bestand hoofdstad.php
Maak een formulier met een radio buttons zoals hieronder

Om te kijken of iets verstuurd is in je script kan je gebruik maken van
Verstuur het antwoord naar hetzelfde bestand (laat de action dus leeg
if($_POST!=null){
//hier jou code
}
Zorg ervoor dat onder je formulier de volgende tekst op het scherm wordt geschreven.
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!
test beide bestanden in je Root UsbWebserver

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.
Wij gebruiken USBWebserver waarbij de database en PHP gebruikt kunnen worden. Eventueel kan je XAMPP gebruiken. Bij de meeste webhosting pakketten is PHP en MySQL al voor geïnstalleerd. En dit is ook een optie (alleen dit is niet gratis)
Voor de opdrachten zullen we gebruik maken database film.
Eerste voorbereiding
We gaan als eerste controleren of we toegang hebben tot de database

Is dit zichtbaar met de groene vinkjes. Dan hebben we een werkende "webserver"
Klik op Mysql, en daarna op settings

Open deze met "kladblok" of Notepad++
Zoek deze regel op
#password =
en verander deze in
password = usbw
En sla deze op(gewoon op opslaan klikken)
Herstart nu je server en klik dan op "PHPMyadmin

Log nu in met de geactiveerde inlog gegevens
root
usbw

Als het goed is zie dan onderstaand beeld

Database maken
We gaan nu een DataBase maken

Vul hier in Film
en klik op aanmaken, dat gaat heel snel en je hebt dan een lege Database gemaakt.
Nu gaan we deze vullen met tabellen. Klik op SQL bovenaan bij de opties

en kopieer in het witte vak onderstaand tekst
-- phpMyAdmin SQL Dump
-- version 3.3.0
-- http://www.phpmyadmin.net
--
-- Machine: localhost
-- Genereertijd: 14 Feb 2022 om 08:21
-- Serverversie: 5.1.44
-- PHP-Versie: 5.2.13
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- Database: `film`
--
-- --------------------------------------------------------
--
-- Tabelstructuur voor tabel `films`
--
CREATE TABLE IF NOT EXISTS `films` (
`id` int(5) NOT NULL,
`filmnr` int(5) NOT NULL,
`titel` varchar(40) NOT NULL,
`regisseurnr` int(5) NOT NULL,
`jaar` int(5) NOT NULL,
`genre` varchar(40) NOT NULL,
`tijdsduur` int(5) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Gegevens worden uitgevoerd voor tabel `films`
--
INSERT INTO `films` (`id`, `filmnr`, `titel`, `regisseurnr`, `jaar`, `genre`, `tijdsduur`) VALUES
(1, 12, 'Reacher', 23, 2005, 'actie', 90),
(3, 13, 'The Way of the Gun', 23, 2000, 'actie', 90),
(2, 10, 'Avatar', 12, 2017, 'actie', 85);
Helemaal rechts zie je dan "Start" staan, klik hier dan op
Als alles goed is gegaan zie je dan dit beeld

Benaderen database

Met PHP kunnen we gegevens uit een database opvragen of gegevens aan een database toevoegen. Dit proces verloopt in drie fasen:
- Als eerste maken we contact met de database server via Database Management Services en wordt de juiste database geselecteerd.
- 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.
- 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 functie- 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:
$link = mysqli_connect($host,$user,$password,$database)
or die(mysqli_connect_error());
De ' or die(mysqli_connect_error()) kan ook weggelaten worden. Maar dit geeft een duidelijke foutmelding als er geen verbinding kan worden gemaakt. Zeker in het begin erg handig.
Boven aan het scipt van " or die(mysqli_connect_error()) " vul je onderstaand voorbeeld in.
$host = "localhost";
$user = "root";
$password = "usbw";
$database = "film";
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”. Of je krijgt gelijk resultaat in je website te zien.
Voor het verbreken van de connectie met de MySQL server kan de functie mysqli_close() worden gebruikt.
★ Opdracht 12 maken connect_film.php

In deze opdracht ga je PHP-code schrijven voor het maken van een verbinding met de database Film.
Voor het opzetten van een verbinding met de database Film heb je de onderstaande gegevens nodig:
Deze heb je in voorgaande uitleg al gezien en bekeken.
Host: |
localhost |
Gebruikersnaam: |
root |
Wachtwoord: |
usbw |
Database: |
film |
Maak een bestand connect_film.php Schrijf de PHP-code voor het leggen van een verbinding met de database film. Gebruik geen HTML in dit bestand. Als de verbinding tot stand gebracht kan worden, krijg je te zien "verbinding gemaakt", of je ziet gelijk waarde van de ingevoerde .SQL tabellen
Als de verbinding mislukt is dan moet er een error verschijnen.
neem onderstaand code over in connect_film.php

Als dit werkt, dan zie je niks.
En dat is goed ;-)
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:
$result = mysqli_query($link, $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:
//verbinding maken met de database
include "connect_film.php";
$query = "SELECT * FROM films ORDER BY titel";
$result = mysqli_query($link, $query);
Belangrijke functies - Array
Elke kolom van een rij wordt benaderd met een array notatie:
De eerste kolom is $row["filmnr"] of $row[0]
De tweede kolom is $row["titel"] of $row[1]
Bij gebruik van mysqli_fetch_array kan zowel een key als kolomnummer worden gebruikt. Bij mysqli_fetch_assoc kan alleen een key worden gebruikt.
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_assoc($result)) {
echo $row["titel"] . "<br>\n";
}
We zullen alle tot nu toe behandelde functies eens in een compleet voorbeeld laten zien. Daarin maken we contact met de database film en voeren we een query op deze database uit waarmee we alles uit de tabel films selecteren. De gegevens worden oplopend gesorteerd op naam van de provincie. Het resultaat, een tabel, wordt op het scherm afgebeeld.
De code hiervoor is:
<!DOCTYPE html>
<html lang="nl">
<head>
<title>overzicht films</title>
<meta charset="utf-8">
</head>
<body>
<h3>Een overzicht van alle films</h3>
<table border="1" cellpadding="3">
<tr>
<th>filmnr</th>
<th>titel</th>
<th>regisseurnr</th>
<th>jaar</th>
<th>genre</th>
<th>tijdsduur</th>
</tr>
<?php
include "connect_film.php";
$query = "SELECT * FROM films ORDER BY titel";
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_assoc($result)) {
?>
<tr>
<td><?php echo $row["filmnr"]; ?></td>
<td><?php echo $row["titel"]; ?></td>
<td><?php echo $row["regisseurnr"]; ?></td>
<td><?php echo $row["jaar"]; ?></td>
<td><?php echo $row["genre"]; ?></td>
<td><?php echo $row["tijdsduur"]; ?></td>
</tr>
<?php
}
?>
</table>
<?php
mysqli_close($link);
?>
</body>
</html>
★ Opdracht 13
Maak een bestand regisseurs.php. Schrijf de PHP-code waarmee op het scherm een tabel wordt afgebeeld met de film en nummer van alle regisseurs.
zoek formulier
We gaan aan de slag met een eenvoudige zoekopdracht, en hoe je deze kunt maken met PHP en MySQL. Je zal leren:
GET- en POST-methoden gebruiken
Verbinding maken met database
Communiceren met database
Vind overeenkomende database-items met een bepaald woord of zin
Resultaten weergeven
Voorbereiding
Ga naar phpMyAdmin, start de USBWebserver op je computer.
Je kunt deze openen via http://localhost/phpmyadmin/
En we gaan werken op basis van de bestaande database "Film"
De bestanden
we maken als eerste het bestand
zoeken.php
Daarin plaatsen we de volgende code, zoals je ziet is dit een combi van HTML en PHP.
In deze eerste bestand roepen we dan ook een tweede bestand op!! let goed op, staat in de code.

Tweede bestand noemen we dus
search.php
en daarin plaatsen we de volgende code.
<?php
mysql_connect("localhost", "root", "usbw") or die("Error connecting to database: ".mysql_error());
/*
localhost - de lokatie van de mysql server, meestal localhost
root - gebruikersnaam
derde is password van de phpmyadmin server
Note. dit is niet de veilige weg, gebruik include commando om de database te koppelen.
als er geen verbinding is zie je een error
*/
mysql_select_db("film") or die(mysql_error());
/* film is de naam van de database die we reeds hebben */
?>
<html>
<head>
<title>Search results</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--<link rel="stylesheet" type="text/css" href="style.css"/>-->
</head>
<body>
<?php
$query = $_GET['query'];
// gets waarde verkregen via zoeken.php form
$min_length = 1;
// kan je aanpassen naar een minimum lengte van de query als je dat wilt
if(strlen($query) >= $min_length){ // als de query lengte meer of gelijk is aan de gestelde minimum, dan
$query = htmlspecialchars($query);
// veranderd de characters die je in html gebruikt naar de juiste omschrijving, zoals: < to >
$query = mysql_real_escape_string($query);
// voorkomen van een SQL injection(zoek maar op google wat dit betekend)
$raw_results = mysql_query("SELECT * FROM films
WHERE (`filmnr` LIKE '%".$query."%') OR (`titel` LIKE '%".$query."%')") or die(mysql_error());
// * betekende dat je zoekt in alle velden, je kan dit aanpassen zoals naar : `id`(in plaatst van filmnr), `title(etc)`, `regisseurnr`
// films is de naam van de table
// '%$query%' is waar we naar zoeken, % betekend alls, voorbeel als $query Hello is
// zoeken we naar alles wat past bij "hello", "Hello man", "gogohello", wil je een exacte zoekopdracht dan gebruik je `title`='$query'
// of een volledig woord, zoals "gogohello" gebruiken we '% $query %' ...OR ... '$query %' ... OR ... '% $query'
if(mysql_num_rows($raw_results) > 0){ // 1 of meer regels dan doen we
while($results = mysql_fetch_array($raw_results)){
// $results = mysql_fetch_array($raw_results) plaatst de data van de database in een array, zolang het geldig is als een loop
echo "<p><h3>".$results['id']."</h3>".$results['titel']."</p>";
// plaatst het resultaat vanuit de database(filmnr en titel) je kan ook de id laten zien ($results['id'])
}
}
else{ // Niks gevonden dan...
echo "No results";
}
}
else{ // minmale lengte als zoekopdracht dan...
echo "Minimum length is ".$min_length;
}
?>
</body>
</html>
★ Opdracht 14
Nu zelf aan de slag
kijk terug naar eerder uitleg, aanmaken database, contact maken en laten zien op het scherm.
Maak een nieuwe database(neem films gewoon als voorbeeld)
v.b
voetbal vereniging
adressen bestand voor thuis
school, vak en docent
etc
en maak daar dan volgens bovenstaand eerdere uitleg een formulier van.
Let op, denk aan je connect_database.php
En denk niet te moeilijk, begin klein.
Aanpassen met meer velden kan altijd nog.
leg uit wat je doet(Word document) en wat er fout gaat.
Om een database te maken met tabellen heb je gegevens nodig.
v.b
database geef je als naam "adressen"
Tabellen in die database geef je als naam dan "naw"
en die heeft dan 3 velden. Naam, Adres en Woonplaats.


Klik dan op Aanmaken. En vul dan in NAW met als waarde 3.

de volgende velden heb ik als voorbeeld ingevuld:
Veld: Naam, Adres, Woonplaats
bij Type kies je dan "Text" het de dropdown want alles is een tekst in dit geval
en aantal tekens is 40

Blijf "nadenken" als je als "veld" een datum gebruikt, moet je bij "type" dan "date" kiezen.
alles in gevuld? dan op Opslaan kiezen en je hebt je tabellen

Succes