# PHP Opdrachten

# Bankrekening controle *

![Image result for iban nummer](https://factuur.tips/wp-content/uploads/voorbeeld-iban-rekeningnummer.jpg)

Een bankrekeningnummer in Nederland bestaat niet uit zomaar willekeurige nummers. Niet elk nummer van 9 cijfers is een geldig en goed bankrekeningnummer. Een bankrekeningnummer bestaat een aantal velden, bijvoorbeeld:

**<span style="font-size: 1.5em;">NL 69 INGB <span style="color: #800080;">0123456789</span></span>**

De eerste twee tekens NL, staan voor het land, 69 is een controlenummer en INGB is de bank (in dit geval ING). Dan volgt er een een rekeningnummer van 10 cijfers. Deze opdracht gaat voer deze laatste 10 cijfers (in donkerrood weergegeven).

Om typefouten te voorkomen, wordt er in Nederland de elfproef gedaan met rekeningnummers. Dit betekent dat de nummers in een rekeningnummer vermenigvuldigd worden met 10 terug naar 1 en als de som van die getallen gedeeld door 11 een geheel getal is, dan is het een geldig rekeningnummer.  
Bijvoorbeeld:

Rekeningnummer: 012 34 56 789  
Som: 0\*10 + 1\*9 + 2\*8 + 3\*7 + 4\*6 + 5\*5 + 6\*4 + 7\*3 + 8\*2 + 9\*1 = 165

(Omdat het cijfer maar 9 posities lang is wordt er een voorloop nul aan toegevoegd)

165/11 is een geheel getal want 11 x 15 = 165 en 165 % 11 = 0, omdat de rest van de deling 165/11, 0 is.

12 34 56 789 is dus een geldig rekeningnummer.

#### **Opdracht**

Maak een functie die een rekeningnummer meekrijgt (alleen maximaal 10 cijfers) en die true of false terug geeft. True als het een goed bankrekeningnummer is en false als het een niet goed bankrekeningnummer is.

Let op netjes inspringen en lever de code in een .php file aan in Teams.

#### **Optioneel (extra punten)**

1. Maak een form waarmee je een rekeningnummer kunt invullen, zodat het kan worden gecontroleerd.
2. Bereid de code uit, zodat je controleer of er een volledig IBAN nummer of alleen het rekeningnummer wordt ingevoerd. Als er een IBAN nummer wordt ingevoerd, controleer deze dan ook door hier het rekeningnummer zelf uit te halen.
3. Maak het formulier wat mooier door CSS te gebruiken. Bootstrap kun je ook gebruiken. Misschien kun je bij het vorm ook uitleggen waarvoor het dient.
4. Maak deze opdracht van jouw portfolio.

\--

# Password Hash - zoeken in groot text bestand ***

*Snel zoeken in password hash lijst. Je leert wat een zoek algoritme is en gaat een zoekalgoritme implementeren.*

### Wat ga je leren?

- met hash functies werken
- PHP en files lezen en doorzoeken
- een programmeer-opdracht opdelen in stapjes; een plan maken
- wat een zoeklagoritme is
- implementeren van een zoekalgortime

### Inleiding

Er is een zeer lange lijst met password hashes. Je kan daarin zoeken of jouw password is gehacked. Dit kan je online doen, maar je wilt je super-goede-geheime password waarschijnlijk niet zomaar naar een of andere site sturen. We gaan dus onze eigen lokale password validation maken. En de uitdaging is wie de snelste code kan maken. Hoe snel kan jij een hash vinden in een half miljard password hashes. Ik kan je vertellen dat dat op een i5 laptop met SSD onder de paar seconden moet kunnen.

### Have I been powned?

Kijk op [https://haveibeenpwned.com/Passwords](https://haveibeenpwned.com/Passwords) je kunt daar je password invullen en controleren of het een 'bekend' (dus gehacked) wachtwoord is. Deze wachtwoorden zijn onder hackers bekend en zijn dus eigenlijk niet (meer) veilig. Maar als je de controle wilt uitvoeren zonder jouw wachtwoord over het internet te sturen dan zal je zelf iets moeten maken. En ja, de site heeft een secure connectie via SSL, maar wat als de programmeur stiekem een lijstje bijhoud van alle wachtwoorden die worden geprobeerd?

### Case

We gaan dus onze eigen versie maken van 'Have I been powned'. Daarvoor moet je het grote bestand met hashes downloaden. Deze staat op de genoemde site. Kies de versie in het format <span style="background-color: #ffff00;">SHA-1 ordered by hash</span>.

De file ziet er als volgt uit:

```
000000005AD76BD555C1D6D771DE417A4B87E4B4:4
00000000A8DAE4228F821FB418F59826079BF368:3
00000000DD7F2A1C68A35673713783CA390C9E93:630
00000001E225B908BAC31C56DB04D892E47536E0:5
00000006BAB7FC3113AA73DE3589630FC08218E7:2
00000008CD1806EB7B9B46A8F87690B2AC16F617:4
0000000A0E3B9F25FF41DE4B5AC238C2D545C7A8:15
0000000A1D4B746FAA3FD526FF6D5BC8052FDB38:16
0000000CAEF405439D57847A8657218C618160B2:15
0000000FC1C08E6454BED24F463EA2129E254D43:40
```

Elke regel bestaat uit een password hash, een dubbele punt en een getal. Dit laatste getal geeft aan bij hoeveel hacks het password is gevonden. Het enige dat je moet is dus een password hash zoeken.

### Hints

Onder Linux kun je met het wc (word count) commando vrij snel bepalen hoeveel regels het bestand heeft. Je zult er snel achter komen dat gewoon de file doorlopen en regel voor regel kijken of je de juiste hash hebt gevonden niet werkt. Dit ligt natuurlijk wel aan de snelheid van jouw computer/laptop. Probeer maar eens in te schatten hoelang het duurt voordat je bijvoorbeeld 10% van de file heb doorzocht. Ik heb een algoritme genaakt dat op elke eenvoudige laptop de hash binnen 1 seconden vind.

Als je gaat nadenken over een strategie bedenk dan hoe jij het handmatig zou aanpakken?

Deel nu het probleem op in stapjes en test elke stapje. Wat zijn je stapjes en hoe wil je het aanpakken.

#### Maak het probleem eenvoudiger.

Als je er nog niet uitkomt, maak het probleem dan eenvoudiger. Bijvoorbeeld je hebt 20 hashes:

```
1200
1201
2011
2045
2234
3400
4000
4001
4010
4098
4099
5332
8020
8100
8201
8245
8376
8898
8999
9010
```

Stel je zoekt de hash van het een wachtwoord en de hash is 9500. Ga jij nu 20x maal kijken of de hash gelijk is of zie je dit sneller? En stel je zoekt naar de hash 8020, ga je dan alle hashes vergelijken of die je dit op een snellere manier. Probeer een plan te maken hoe je zelf in zo min mogelijk stappen bepaald of een hash in de lijst staat. Deze strategie kun je dan mogelijk ook toepassen op het grote bestand.

Maar een plan en bespreek dat eventueel met je docent voordat je begint. Een goed plan is het halve werk!

\--

# Corona Simulatie in PHP **

*In deze les gaan we code van een ander lezen en aanpassen. In het kader van Covid-19, (Corona) heb ik een virus-simulatie gemaakt. Dit is een **zeer vereenvoudigde weergave van de werkelijkheid** en je moet dit niet zien als een simulatie van de echte wereld. Dus alle getallen die je zien moet je niet betrekken op hetgeen er nu in de echte wereld afspeelt.*

#### De simulatie ziet er in de browser als volgt uit.

![](http://roc.ovh/uploads/images/gallery/2020-03/scaled-1680-/image-1584549820302.png)

In het 'grid' (het grote gedeelte bovenin) zie je de bevolking. Elke karakter is een persoon. Een - is een gewoon, onbesmet persoon, een oranje s is een ziek persoon, een groene o is een immuun persoon en een rode X is een overleden persoon. Met de knoppen kun je één, drie of zeven dagen vooruit springen. In de grafiek zie je het aantal zieke personen.

### Installeer de simulatie

Zet de twee php files in één directory in je document root en test de simulatie uit.

### MVC

MVC is een principe waarin je bepaalde zaken scheidt. M staat voor **Model**, dat is de database of eigenlijk de opslag en toegang tot data. De V staat voor **View,** dat is eenvoudig gezegd de GUI, wat de gebruiker ziet: daar zit dus vaak veel HTML en JavaScript bij. Later zullen we ook libraries als bootstrap gaan gebruiken voor de GUI. De C tenslotte, staat voor **Control** en dat is alle logica, zeg maar de 'brains' van het systeem.

### Opdracht 1

Beschrijf van de hieronder genoemde onderdelen van de software of ze bij M, V of C horen.

(a) Regel 141 t/m 145

(b) De functie *printPopulation* (regel 57-77)

(c) De functie *passTime* (regel 41-55)

(d) Regel 214 t/m 230 (de table)

### Opdracht 2

De knop "Next 7 &gt;&gt;&gt;" die je in de screen afdruk ziet springt een week vooruit in de simulatie. Deze knop is nog niet geïmplementeerd. Pas de code aan zodat je deze knop wel hebt en zorg ervoor dat de knop ook werkt.

### Opdracht 3

In de 'grid' staat elke oranje s voor een ziek persoon, een groene o staat voor iemand die immuun is geworden, - staat voor iemand die nog niet besmet is en ene rode X staat voor iemand die is overleden.

![](http://roc.ovh/uploads/images/gallery/2020-03/scaled-1680-/image-1584551470794.png)

Verander de code zodat iemand die niet is besmet niet wordt weergegeven, zie voorbeeld hierboven.

### Opdracht 4

We gaan functionaliteit uitbreiden, zodat de simulatie-parameters kunnen worden aangepast.

Op regel 3 t/m 8 worden de parameters van de simulatie gedefinieerd.

(a) Zet deze definities in een aparte file, parameters.php en `include 'parameters.php'` in de corona.php file.

(b) Maak een form (editparams.php) om de parameters aan te passen. In dit form worden de waardes uit de parameters.php ingelezen (met een include). Deze parameters worden gebruikt als default values voor het form. Als je het form post dan wordt er een nieuwe parameters.php file geschreven. Hierin staan de aangepaste waarden. Na het aanpassen van de waarden wordt de simulatie (corona.php) vanzelf aangeroepen.

(c) Maak een extra knop op de corona.php pagina die je kunt gebruiken om naar de editparams.php pagina te gaan.

(d) Maak een extra knop op de editparams.php. Indien je deze knop indrukt worden alle waarden in het form weer op de standaard waarden ingesteld. De standaard waarden zijn de waarde zoals ze in de code staan:

```PHP
population=4200;
$popWidth=120;
$contactPerPerson=10; // number of contacts per person
$changeToGetSick=5;   // when you contact someone change to get infected
$changeToDie=3;       // when you are infected, change to die
$daysSick=10;         // days sick
```

### Opdracht 5

Pas de code aan, zodat de simulatie begint met 100 mensen die immune zijn.

Pas de editparams.php aan, zodat dit aantal immuun personen kan worden aangepast.

\--

# Lotto Spel *

Dit is een vrije opdracht waar je meerdere technieken die je hebt geleerd kan gebruiken. Wat je in ieder geval nodig hebt, is HTML Forms en PHP. Met Javascript (of Bootstrap) kun je de interface opleuken.

### Lotto

Lotto is een gokspel in Nederland - in principe verlies je hier altijd geld mee. Maar om een gevoel te krijgen hoe het werkt gaan wij het lotto spel naspelen.

Dit is een vrije opdracht die je kunt gebruiken voor je portfolio.

Wat je moet maken is een manier waarop de gebruiker kan invoeren welke getallen hij kiest. Dan wordt het spel gestart en volgt de trekking. Je laat zien wat de getallen zijn die de gebruiker heeft ingevoerd en hoe hoog de eventuele geldprijs is.

### Spelen

Een lot kost 2 euro. Je kiest zelf 6 getallen. Je kunt zes getallen kiezen tussen 1 en 45.

### Trekking

![](https://www.roc.ovh/uploads/images/gallery/2020-04/scaled-1680-/image-1587580476967.png)

### Prijzen

<table id="bkmrk-getallen-goed-prijze"><thead><tr><th class="left">Getallen goed

</th><th class="left">Prijzen

</th></tr></thead><tbody><tr><td class="left">6 getallen goed

</td><td class="left">Jackpot € 2.500.000,-

</td></tr><tr><td class="left">5 getallen   
\+ reservegetal goed

</td><td class="left">€ 25.000,-

</td></tr><tr><td class="left">5 getallen goed

</td><td class="left">€ 1.000,-

</td></tr><tr><td class="left">4 getallen   
\+ reservegetal goed

</td><td class="left">€ 50,-

</td></tr><tr><td class="left">4 getallen goed

</td><td class="left">€ 20,-

</td></tr><tr><td class="left">3 getallen   
\+ reservegetal goed

</td><td class="left">€ 10,-

</td></tr><tr><td class="left">3 getallen goed

</td><td class="left">€ 7,50,-

</td></tr><tr><td class="left">2 getallen   
\+ reservegetal goed

</td><td class="left">€ 5,-

</td></tr><tr><td class="left">2 getallen goed

</td><td class="left">€ 2,- speltegoed

</td></tr></tbody></table>

### Minimale versie

De minimale versie heeft een formulier (form) waar je de nummers in kan opgeven. Je drukt op de knop speel en je simuleert een trekking. Je toont de uitslag, deze bestaat minimaal uit een overzicht met de door jouw gekozen nummers, de getrokken nummers en de geldprijs.

### Opties

Maak een handige manier van getallen invoeren, bijvoorbeeld met check boxes. Als je dit doet, zou het natuurlijk mooi zijn dat je niet meer dan 6 getallen kan invoeren.

Na het spelen van het spel wil je misschien nog een keer met dezelfde getallen spelen, maar het makkelijk om nog een keer met dezelfde getallen te 'spelen'.

Houd bij hoe vaak je het spel speelt - of houd bij wat je virtuele banksaldo is. Begin met bijvoorbeeld 100 virtuele euro's.

# Patiëntgegevens in JSON File **

*In deze opdracht ga je een JSON-file analyseren. JSON is een file formaat om data op te slaan. De data wordt gestructureerd opgeslagen en is leesbaar (als txt). Het formaat lijkt een beetje op een assiociative array en wordt veel gebruikt bij REST API's.*

### De opdracht

Van een onderzoeksbureau heb je twee JSON-bestanden gehad. Het bestand bevat gegevens van Corona patiënten. Omwille van de privacy van de patiënten worden geen namen gebruikt, maar anonieme patiëntnummers.

Aan elke patiënt wordt een codering toegekend. In het schema hieronder worden de coderingen toegelicht.

<table border="1" id="bkmrk-codering-betekenis-0" style="border-collapse: collapse; width: 65.4321%;"><tbody><tr><td style="width: 14.6914%; background-color: #f0f0f0;">Codering</td><td style="width: 50.7407%; background-color: #f0f0f0;">Betekenis</td></tr><tr><td style="width: 14.6914%;">0</td><td style="width: 50.7407%;">Vermoedelijk Covid-19</td></tr><tr><td style="width: 14.6914%;">1</td><td style="width: 50.7407%;">Covid-19 vastgesteld - patiënt ligt op gewone afdeling</td></tr><tr><td style="width: 14.6914%;">2</td><td style="width: 50.7407%;">Covid-19 vastgesteld - patiënt ligt op de intensive care</td></tr><tr><td style="width: 14.6914%;">3</td><td style="width: 50.7407%;">Patiënt is genezen</td></tr><tr><td style="width: 14.6914%;">4</td><td style="width: 50.7407%;">Patiënt is overleden</td></tr></tbody></table>

Je krijgt een functie waarmee je het JSON-bestand kan inlezen. De functie krijgt de file naam mee als parameter en de return value is een assiociative array. Het array ziet er bijvoorbeeld als volgt uit:

<table border="1" id="bkmrk-key-value-betekenis-" style="border-collapse: collapse; width: 100%; height: 87px;"><tbody><tr><td style="width: 20.6173%; background-color: #f0f0f0;">Key</td><td style="width: 17.5309%; background-color: #f0f0f0;">Value</td><td style="width: 61.8519%; background-color: #f0f0f0;">Betekenis</td></tr><tr style="height: 29px;"><td style="width: 20.6173%; height: 29px;">p-nc-199134</td><td style="width: 17.5309%;">3</td><td style="width: 61.8519%; height: 29px;">Patiënt p-nc-199134 is genezen</td></tr><tr style="height: 29px;"><td style="width: 20.6173%; height: 29px;">p-nc-199114</td><td style="width: 17.5309%;">2</td><td style="width: 61.8519%; height: 29px;">Patiënt p-nc-199114 ligt op IC</td></tr><tr style="height: 29px;"><td style="width: 20.6173%; height: 29px;">p-nc-199126</td><td style="width: 17.5309%;">0</td><td style="width: 61.8519%; height: 29px;">Patiënt p-nc-199126 heeft vermoedelijk Covid-19</td></tr></tbody></table>

Je krijgt twee bestanden:

<table border="1" id="bkmrk-p-nc-191.json-bestan" style="border-collapse: collapse; width: 100%;"><tbody><tr><td style="width: 24.321%;">p-nc-191.json</td><td style="width: 75.679%;">bestand van een dag</td></tr><tr><td style="width: 24.321%;">p-nc-192.json</td><td style="width: 75.679%;">bestand van de volgende dag</td></tr></tbody></table>

De bestanden staan op deze pagina - links.

Met de functie die hieronder staat kan je het JSON-bestand lezen en krijg je een assiociative array.

```PHP
<?php

function getData($file) { // JSON bestand
  if ( file_exists($file) ) {
    return(json_decode(file_get_contents($file), true)); // return assiociative array
  } else {
    return(0);
  }
}
```

Lees met behulp van de gegeven functie de bestanden in.

### De vragen

De opdrachtgever heeft de volgende vragen.

#### Vraag 1, overzicht

Maak een overzicht van **beide** dagen waarbij van elke categorie wordt aangegeven hoeveel patiënten er zijn.  
**Bijvoorbeeld:**  
Er zijn 212 patiënten die vermoedelijk Covid-19 hebben.  
Er zijn 376 patiënten waarbij Covid-19 is vastgesteld.  
etc.  
(het liefst heeft de opdrachtgever deze gegevens netjes in een tabel)

#### Vraag 2, fouten vinden

Het blijkt dat er bij een paar patiënten een fout is gemaakt bij de invoer van hun status. Hun status is dus niet gelijk aan 1,2,3 of 4. Laat zien om welke patiënten dit gaat en wat de foutief ingevoerde code is. Heb je misschien een idee wat de juiste code zou moeten zijn? Leg uit.

#### Vraag 3, fouten corrigeren

Met de volgende functie kun je een assiosiative array wegschrijven als JSON-file

```
file_put_contents("file_name",json_encode($array))
```

Kun je de fouten die je bij (2) hebt gevonden corrigeren en het bestand wegschrijven. Doe dit voor beide bestanden.

#### Vraag 4a, veranderingen

Er zijn op de tweede dag helaas drie patiënten overleden. Zoek op welke patiënten dit zijn (patiëntnummers).

#### Vraag 4b, veranderingen

Wat was de vorige status van de drie overleden patiënten, komen ze van de IC of wat was hun vorige status?

\--

# Quizzes

# Quiz 1a

### Opgave 1

(10 minuten)

De functie *verschil* bepaald het verschil tussen twee getallen. De functie krijgt twee getallen mee en returned het verschil. Dus verschil(12,10) en verschil(10,12) returnen beide 2.

(a) Er zitten **twee** fouten in de code. Kun jij die er uit halen en ervoor zorgen dat de echo in regel 14 netjes een 2 afdrukt?

(b) Dan ziet er nog iets vreemds in de code, het is niet fout maar het kan beter. Kun je de code nog verder verbeteren?

Corrigeer de code en lever de gehele gecorrigeerde code in, in je PHP-bestand.

```
function verschil() {
    
    if ( $getal1 > $getal2 ) {
    	return $getal1 - $getal2 ;
    else {
    	return $getal2 - $getal1 ;
    }
    
    return 0;
 }
     
$getal1 = 10;
$getal2 = 12;
echo verschil($getal1, $getal2); // hier verwacht je een uitkomst van 2 ($getal2-$getal1), maar het werkt niet, help!
```

### Opgave 2

(10 minuten)

Maak een functie, grootste($getal1, $getal2, $getal3) die drie parameters mee krijgt. De return value van de functie moet het grootste getal zijn.

Bijvoorbeeld:

```
echo grootste(1,2,3)    // dit drukt 3 af
echo grootste(6,12,3)   // dit drukt 12 af
echo grootste(-1,-2,-3) // dit drukt -1 af
echo grootste(0,-2,3)   // dit drukt 3 af
```

Zet de functie grootste($getal1, $getal2, $getal3) in je PHP-bestand.

### Opgave 3

(20 minuten)

Maak een functie die die de gemiddelde snelheid uitrekent.

Stel:

```
Je fietst 3 uur en je hebt 60 km afgelegd, dan is de gemiddelde snelheid 60/3 = 20 km/uur.
Je zit 2 uur in de auto en je hebt 160 km afgelegd, dan is de gemiddelde snelheid 160/2 = 80 km/uur.
```

Om de gemiddelde snelheid te berekenen deel je dus de afstand (in kilometers) door de tijd (in uren).

#### Deel 1, functie maken

Maak nu een functie gemSnelheid($tijd, $afstand), die twee parameters mee krijgt: $tijd in uren en $afstand in kilometers. De functie returned de gemiddelde afstand.

Gebruik onderstaande template.

```
function gemSnelheid.....
...
...
...

//Je fietst 3 uur en je hebt 60 km afgelegd, dan is de gemiddelde snelheid 60/3 = 20 km/uur.
echo gemSnelheid(3, 60); // dit drukt 20 af

//Je zit 2 uur in de auto en je hebt 160 km afgelegd, dan is de gemiddelde snelheid 160/2 = 80 km/uur.
echo gemSnelheid(2, 160); //dit drukt 80 af
```

Op de plaats van de puntjes in de bovenstaande code maak je de functie en zorg je dat het werkt. Controleer of er inderdaad 20 en 80 wordt afgedrukt.

##### Deel 2, output netjes maken

Pas de code aan, zodat de output netjes wordt geformatteerd. De output moet er als volgt uit zien:

```
Je doet 3 uur over 60 kilometer, dat betekent dat je gemiddelde snelheid 20 km/uur was.
Je doet 2 uur over 160 kilometer, dat betekent dat je gemiddelde snelheid 80 km/uur was.
```

Denk er wel aan dat je de functie generiek houd en dat je alle taalelementen buiten de functie houd. De functie returned dus alleen een getal.

\--

# Quiz 1b

### Opgave 1

(10 min)

De functie *verschil* bepaald het verschil tussen twee getallen. De functie krijgt twee getallen mee en returned het verschil. Dus verschil(12,10) en verschil10,12) returnen beide 2.

(a) Er zitten **twee** fouten in de code. Kun jij die er uit halen en ervoor zorgen dat de echo in regel 14 netjes een 2 afdrukt?

(b) Dan ziet er nog iets vreemds in de code, het is niet fout maar het kan beter. Kun je de code nog verder verbeteren?

Corrigeer de code en lever de gehele gecorrigeerde code in, in je PHP-bestand.

```
function verschil($getal1, $getal2) {
    
    if ( $getal1 > $getal2 ) {
    	return $getal1 - $getal2 ;
    else {
    	return $getal2 - $getal1 ;
    }
    
    return 0;
 }
     
$getal1 = 10;
$getal2 = 12;
echo verschil(); // hier verwacht je een uitkomst van 2 ($getal2-$getal1), maar het werkt niet, help!
```

### Opgave 2

(20 minuten)

Maak een functie, kleinste($getal1, $getal2, $getal3) die drie parameters mee krijgt. De return value van de functie moet het kleinste getal zijn.

Bijvoorbeeld:

```
echo kleinste(1,2,3)    // dit drukt 1 af
echo kleinste(6,12,3)   // dit drukt 3 af
echo kleinste(-1,-2,-3) // dit drukt -3 af
echo kleinste(0,2,3)    // dit drukt 0 af
```

Zet de functie kleinste($getal1, $getal2, $getal3) in je PHP-bestand.

### Opgave 3

(20 minuten)

Maak een functie die die de gemiddelde snelheid uitrekent.

Stel:

```
Je fietst 3 uur en je hebt 60 km afgelegd, dan is de gemiddelde snelheid 60/3 = 20 km/uur.
Je zit 2 uur in de auto en je hebt 160 km afgelegd, dan is de gemiddelde snelheid 160/2 = 80 km/uur.
```

Om de gemiddelde snelheid te berekenen deel je dus de afstand (in kilometers) door de tijd (in uren).

#### Deel 1, functie maken

Maak nu een functie gemiddeldeSnelheid($tijd, $afstand), die twee parameters mee krijgt: $tijd in uren en $afstand in kilometers. De functie returned de gemiddelde afstand.

Gebruik onderstaande template.

```
function gemiddeldeSnelheid.....
...
...
...

//Je fietst 3 uur en je hebt 60 km afgelegd, dan is de gemiddelde snelheid 60/3 = 20 km/uur.
echo gemSnelheid(3, 60); // dit drukt 20 af

//Je zit 2 uur in de auto en je hebt 160 km afgelegd, dan is de gemiddelde snelheid 160/2 = 80 km/uur.
echo gemSnelheid(2, 160); //dit drukt 80 af
```

Op de plaats van de puntjes in de bovenstaande code maak je de functie en zorg je dat het werkt. Controleer of er inderdaad 20 en 80 wordt afgedrukt.

##### Deel 2, output netjes maken

Pas de code aan, zodat de output netjes wordt geformatteerd. De output moet er als volgt uit zien:

```
Je doet 3 uur over 60 kilometer; dit betekent dat je gemiidelde snelheid 20 km/uur was.
Je doet 2 uur over 160 kilometer; dit betekent dat je gemiidelde snelheid 80 km/uur was.
```

Denk er wel aan dat je de functie generiek houd en dat je alle taalelementen buiten de functie houd. De functie returned dus alleen een getal.

\--

# Quiz 1c

### Opgave 1

(10 min)

De functie *verschil* bepaald het verschil tussen twee getallen. De functie krijgt twee getallen mee en returned het verschil. Dus verschil(12,10) en verschil10,12) returnen beide 2.

(a) Er zitten **twee** fouten in de code. Kun jij die er uit halen en ervoor zorgen dat de echo in regel 14 netjes een 2 afdrukt?

(b) Dan ziet er nog iets vreemds in de code, het is niet fout maar het kan beter. Kun je de code nog verder verbeteren?

Corrigeer de code en lever de gehele gecorrigeerde code in, in je PHP-bestand.

```
function verschil($nummer1, $nummer2) {
    
    if ( $nummer1 > $nummer2 ) {
    	return $nummer1 - $nummer2 ;
    else {
    	return $nummer2 - $nummer1 ;
    }
    
    return 0;
 }
     
$nummer1 = 10;
$nummer2 = 12;
echo verschil(); // hier verwacht je een uitkomst van 2 ($getal2-$getal1), maar het werkt niet, help!
```

### Opgave 2

(20 minuten)

Maak een functie, kleinste($nummer, $nummer, $nummer) die drie parameters mee krijgt. De return value van de functie moet het kleinste getal zijn.

Bijvoorbeeld:

```
echo kleinste(1,2,3)    // dit drukt 1 af
echo kleinste(6,12,3)   // dit drukt 3 af
echo kleinste(-1,-2,-3) // dit drukt -3 af
echo kleinste(0,2,3)    // dit drukt 0 af
```

Zet de functie kleinste($getal1, $getal2, $getal3) in je PHP-bestand.

### Opgave 3

(20 minuten)

Maak een functie die die de gemiddelde snelheid uitrekent.

Stel:

```
Je fietst 3 uur en je hebt 60 km afgelegd, dan is de gemiddelde snelheid 60/3 = 20 km/uur.
Je zit 2 uur in de auto en je hebt 160 km afgelegd, dan is de gemiddelde snelheid 160/2 = 80 km/uur.
```

Om de gemiddelde snelheid te berekenen deel je dus de afstand (in kilometers) door de tijd (in uren).

#### Deel 1, functie maken

Maak nu een functie gemiddeldeSnelheid($tijd, $afstand), die twee parameters mee krijgt: $tijd in uren en $afstand in kilometers. De functie returned de gemiddelde afstand.

Gebruik onderstaande template.

```
function gemiddeldeSnelheid.....
...
...
...

//Je fietst 3 uur en je hebt 60 km afgelegd, dan is de gemiddelde snelheid 60/3 = 20 km/uur.
echo gemSnelheid(3, 60); // dit drukt 20 af

//Je zit 2 uur in de auto en je hebt 160 km afgelegd, dan is de gemiddelde snelheid 160/2 = 80 km/uur.
echo gemSnelheid(2, 160); //dit drukt 80 af
```

Op de plaats van de puntjes in de bovenstaande code maak je de functie en zorg je dat het werkt. Controleer of er inderdaad 20 en 80 wordt afgedrukt.

##### Deel 2, output netjes maken

Pas de code aan, zodat de output netjes wordt geformatteerd. De output moet er als volgt uit zien:

```
Je doet 3 uur over 60 kilometer; je gemiddelde snelheid was 20 km/uur.
Je doet 2 uur over 160 kilometer; je gemiddelde snelheid was 80 km/uur.
```

Denk er wel aan dat je de functie generiek houd en dat je alle taalelementen buiten de functie houd. De functie returned dus alleen een getal.

\--

# Quiz 1.2

(Totale tijd 50 minuten)

### Opgave 1

(10 min)

De functie *verschil* bepaald het verschil tussen twee getallen. De functie krijgt drie getallen mee en returned een verschil. Kijk naar de code en beschrijf precies wat de code doet. De code krijgt 3 argumenten mee, hoe wordt het verschil precies berekend?

(a) Beschrijf zo nauwkeurig mogelijk wat de functie doet. Zet dit als commentaar in je PHP-bestand.

(b) Er zit een (klein) foutje in de code, los dit op.

(c) Dan ziet er nog iets vreemds in de code, het is niet fout maar het kan beter. Kun je de code nog verder verbeteren?

Zet de juiste, verbeterde code in je PHP-bestand.

```
function verschil($a, $b, $c) {
    
	return (max($a, $b, $c) - min($a, $b, $c)
    
    return 0;
 }
     
$nummer1 = 10;
$nummer2 = 12;
$nummer3 = 6
echo verschil($nummer1, $nummer2, $nummer3); 
```

### Opgave 2

(20 minuten)

Maak een functie, middelste($nummer, $nummer, $nummer) die drie parameters mee krijgt. De return value van de functie moet het middelste getal zijn.

Bijvoorbeeld:

```
echo middelste(1,2,3)    // dit drukt 2 af
echo middelste(6,12,3)   // dit drukt 6af
echo middelste(-1,-2,-3) // dit drukt -2 af
echo middelste(0,2,3)    // dit drukt 2 af
```

Zet de functie middelste($getal1, $getal2, $getal3) in je PHP-bestand.

### Opgave 3

(20 minuten)

Maak nu een functie herhaaldAfdrukken($string, $aantal). De $string wordt $aantal keer afgedrukt. De functie bevat dus een echo en de functie returned niets.

Denk aan de fout afvang en aan juist inspringen!

Gebruik onderstaande template.

```
function herhaaldAfdrukken( $string, $aantal) {
	...
	...
	...
}

herhaaldAfdrukken('*',12);          // dit drukt ************ af
herhaaldAfdrukken('hello<br>',4);   // dit drukt hello<br>hello<br>hello<br>hello<br> af, dus in de browser is dat 4 maal een volgende regel
herhaaldAfdrukken('--.-- ',2);      // dit drukt --.-- --.-- af
```

Zet de functie in je PHP-bestand.

\--

# Quiz 1.3 - PHP1 - 1 juli

### Beoordeling

Je wordt in de eerste plaats beoordeeld of de code doet wat het moet doen. Daarnaast wordt je ook beoordeeld op netheid van de code. Er wordt daarbij vooral gelet op juist inspringen en op onnodige code of onnodige variabele.

Zet alle antwoorden in één PHP file (mag in commentaar) en schrijf telkens duidelijk de opgave erbij.

##### Puntentelling

<table border="1" id="bkmrk-opgave-punten-1-1.5-" style="border-collapse: collapse; width: 44.4444%;"><tbody><tr><td style="width: 27.1514%; background-color: #f0f0f0;">**Opgave**</td><td style="width: 17.293%; background-color: #f0f0f0;">**Punten**</td></tr><tr><td style="width: 27.1514%;">1</td><td style="width: 17.293%;">1.5</td></tr><tr><td style="width: 27.1514%;">2</td><td style="width: 17.293%;">1</td></tr><tr><td style="width: 27.1514%;">3</td><td style="width: 17.293%;">1</td></tr><tr><td style="width: 27.1514%;">4</td><td style="width: 17.293%;">1</td></tr><tr><td style="width: 27.1514%;">5</td><td style="width: 17.293%;">1</td></tr><tr><td style="width: 27.1514%;">6</td><td style="width: 17.293%;">1.5</td></tr><tr><td style="width: 27.1514%;">7</td><td style="width: 17.293%;">1.5</td></tr><tr><td style="width: 27.1514%;">8</td><td style="width: 17.293%;">1.5</td></tr><tr><td style="width: 27.1514%; background-color: #f0f0f0;">**TOTAAL**</td><td style="width: 17.293%; background-color: #f0f0f0;">**10**</td></tr></tbody></table>

##### Tijd

Tijd totaal 2 uur.

Tijd gaat lopen nadat alle opgaven zijn doorgelezen en zijn doorgenomen - tijdens doorlezen nog niets opzoeken.

#### Template

[Antwoorden-template is beschikbaar op deze pagina.](http://roc.ovh/attachments/41)

### Opgave 1

(10 minuten)

#### 1a

Je hebt het volgende array

```
$age =  array( array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"),
        array("Anna"=>"25", "Julia"=>"36", "Miranda"=>"13")  ) ;
```

Gebruik dit array en druk de leeftijd van Anna af. Je moet de leeftijd dus opzoeken en gebruik maken van het array ('echo 25' is dus geen goed antwoord).

*Schrijf de regel(s) code waarmee je dat doet op je antwoordenblad.*

#### 1b

Je hebt het volgende formulier

```
<form action="verwerk.php" method="get">
  Gebruikersnaam <input type="text" name="userName"> <br>
  <input type="submit" value="Submit">
</form>
```

In de PHP file verwerk.php wil je de Gebruikersnaam afdrukken. Hoe doe je dat.

*Schrijf de regel(s) code waarmee je dat doet op je antwoordenblad; je mag het antwoord in PHP-commentaar schrijven.*

#### 1c

Maak de volgende code netjes en zorgt dat die goed inspringt.

```
<?php
 for($i=0; $i<=100; $i++) {
$j=10;
while ($j) {
echo "*";
$j--;
}
 }
```

Zet de nette code (met inspringen) op je antwoordenblad.

#### 1d

Hoeveel sterretjes worden er in de code van opgave 1c afgedrukt?

*Schrijf op je antwoorden blad in PHP-commentaar (vul het aantal in op de plaats van de puntjes).*

```
// er worden ... sterretjes afgedrukt.
```

### Opgave 2

De volgende functie bepaald de middelste waarde van drie waarden. Dus als je `middelste2(3,6,2)` aanroept, dan zou je je 3 moeten terug krijgen, omdat 4 de waarde is die tussen 2 en 6 ligt.

Nu zit er een klein tik foutje in de code. Haal het foutje er uit en zorg dat de code goed werkt.

```PHP
<?php

function middelste($getal1, $getal2, $getal3) {
  $myArray=array($getal1, $getal2, $getal3);
  sort($myArray); // let op gebruik van de juiste sort
  if ( $myArray[0] == $myArray[1] || $myArray[1] == $myArray[2]) {
    return ("Er is geen middelste getal"); // of return false als foutmelding
  }
  return $myArray[0];
}
```

### Opgave 3

( 10 minuten)

Maak een stukje code dat alle getallen van 1 /tm 1000 afdrukt die deelbaar zijn door 3.

De code drukt dus af: 3, 6, 9, 12 ,15 ,1 8, 21, 24, 27,......., 993, 996, 999

Tip: je hoeft geen functie te maken, maar je moet wel gebruik maken van een loop

### Opgave 4

(15 minuten)

Op een website wordt een afgedrukt of het warm is in het lokaal of niet. Als de temperatuur meer dan 22 graden is dan is het warm. Beneden de 18 is het koud en vanaf 18 tot 22 is het normaal.

Maar een functie die als parameter de temperatuur mee krijgt en die 'koud', 'normaal', of 'warm' terug geeft.

<table border="1" id="bkmrk-functienaam-antwoord" style="border-collapse: collapse; width: 55.3086%;"><tbody><tr><td style="width: 216.35px;">**Functienaam**</td><td style="width: 230.717px;">lokaalStatus</td></tr><tr><td style="width: 216.35px;">**Input**</td><td style="width: 230.717px;">temperatuur, bijvoorbeeld 21</td></tr><tr><td style="width: 216.35px;">**Output (return value)** </td><td style="width: 230.717px;">koud, normaal, of warm</td></tr></tbody></table>

```PHP
<?php

function lokaalStatus($temperatuur) {
   ...
   ...

   ...
}

echo lokaalStatus(17); // dit drukt af koud
echo lokaalStatus(22); // dit drukt af normaal
echo lokaalStatus(23); // dit drukt af warm
echo lokaalStatus(24); // dit drukt af warm
```

### Opgave 5

(15 minuten)

Maak een functie die jouw multiple choice test kan invullen. Hiervoor moet je een telkens een letter a, b, c, d, e of f returnen. De letters worden willekeurig gekozen.

Tip: met de PHP functie

<span class="methodname">**rand**</span> ( <span class="methodparam"><span class="type">int</span> `$min`</span> , <span class="methodparam"><span class="type">int</span> `$max`</span> ) : <span class="type">int</span>

kun je een willekeurig getallen bedenken.

Zoek zelf even uit hoe je die functie kunt gebruiken.

<table border="1" id="bkmrk-functienaam-antwoord-0" style="border-collapse: collapse; width: 68.519%;"><tbody><tr><td style="width: 48.2143%;">**Functienaam**</td><td style="width: 75.4464%;">antwoord</td></tr><tr><td style="width: 48.2143%;">**Input**</td><td style="width: 75.4464%;"> </td></tr><tr><td style="width: 48.2143%;">**Output (return value)** </td><td style="width: 75.4464%;">a of b of c of d of e (willekeurig één letter)</td></tr></tbody></table>

```PHP
<?php
function antwoord() {
   ...
   ...
     
   ...
}

echo antwoord(); // dit returned één willekeurige letter a, b, c, d of e
echo antwoord(); // dit returned één willekeurige letter a, b, c, d of e
echo antwoord(); // dit returned één willekeurige letter a, b, c, d of e
```

### Opgave 6

(20 minute)

Maak een functie die een array met getallen meekrijgt. De functie returned *true* als alle getallen in het array gelijk zijn en de functie returned *false* als dat niet het geval is.

Indien een array met 0 elementen wordt meegegeven dan wordt er altijd false gereturned.

<table border="1" id="bkmrk-functienaam-allengel" style="border-collapse: collapse; width: 55.3086%;"><tbody><tr><td style="width: 25.4668%;">**Functienaam**</td><td style="width: 29.8418%;">allenGelijk</td></tr><tr><td style="width: 25.4668%;">**Input**</td><td style="width: 29.8418%;">array met getallen, bijv. \[2,2,2,2\]</td></tr><tr><td style="width: 25.4668%;">**Output (return value)** </td><td style="width: 29.8418%;">true of false</td></tr></tbody></table>

```PHP
<?php
function allenGelijk($array) {
  ...
  ...
  
  ...
}

// let op, json encode wordt gebruitk om ervoor te zorgen dat true of false netjes wordt afgedrukt
// (standaard wordt een false namelijk niet afgedrukt).

echo json_encode( allenGelijk([3,4,5]) ); // dit drukt false af
echo "<br>";

echo json_encode( allenGelijk([3,3,3]) ); // dit drukt true af
echo "<br>";

echo json_encode( allenGelijk([5]) );     // dit drukt true af
echo "<br>";

echo json_encode( allenGelijk([]) );     // dit drukt false af
echo "<br>";
```

### Opgave 7

(15 minuten)

Maak de functie maandNummer($maand). Als argument geef je een drie letter code (jan, feb, mrt, ...., dec) en je returned het maandnummer. Voor jan een 1, voor feb een 2, ....voor dec een 12.

Als er **ongeldige waarde** wordt opgegeven, bijvoorbeeld maandNummer('max') dan returned de functie **0.**

Je kunt de onderstaande code aanvullen.

<table border="1" id="bkmrk-functienaam-maandnum" style="border-collapse: collapse; width: 55.3086%; height: 87px;"><tbody><tr style="height: 29px;"><td style="width: 26.1364%; height: 29px;">**Functienaam**</td><td style="width: 29.1722%; height: 29px;">maandNummer</td></tr><tr style="height: 29px;"><td style="width: 26.1364%; height: 29px;">**Input**</td><td style="width: 29.1722%; height: 29px;">maand afkortng, bijvoorbeeld sep</td></tr><tr style="height: 29px;"><td style="width: 26.1364%; height: 29px;">**Output (return value)** </td><td style="width: 29.1722%; height: 29px;">maandnummer, bijvoorbeeld 9</td></tr></tbody></table>

```PHP
<?php
function maandNummer($dezeMaand) {
  maanden=array('jan','feb','mrt','apr','mei','jun','jul','aug','sep','okt','nov','dec');
  ...
  ...
    
  ...
}

echo maandNummer('mrt'); // dit returned 3
echo maandNummer('dec'); // dit returned 12
echo maandNummer('max'); // dit returned 0
```

### Opgave 8

(15 minuten)

Maak een functie telWaardeninArray($array). De functie krijgt een array met getallen mee en returned een getal dat aangeeft hoevaak de waarde 1 voorkomt in het array.

<table border="1" id="bkmrk-functienaam-telwaard" style="border-collapse: collapse; width: 55.3086%; height: 87px;"><tbody><tr style="height: 29px;"><td style="width: 26.1364%; height: 29px;">**Functienaam**</td><td style="width: 29.1722%; height: 29px;">telWaardeninArray</td></tr><tr style="height: 29px;"><td style="width: 26.1364%; height: 29px;">**Input**</td><td style="width: 29.1722%; height: 29px;">array met getallen</td></tr><tr style="height: 29px;"><td style="width: 26.1364%; height: 29px;">**Output (return value)** </td><td style="width: 29.1722%; height: 29px;">nummer dat aantal 1-en weergeeft in array</td></tr></tbody></table>

```PHP
<?php

function telWaardeninArray($array) {
  ...
  ...
  ...
}



$array=[1,2,3];
echo telWaardeninArray($array); // dit returned 1, er komt 1 x een 1 voor in $array

$array=[1,3,3,1,1,2,-1,0,2,1];
echo telWaardeninArray($array); // dit returned 4, er komt 4 x een 1voor in $array

$array=[6,6,6,6,6,6,6];
echo telWaardeninArray($array); // dit returned 0, er komt geen 1 voor in $array
```

# Quiz 2.1 (8a - 28 mei)

(totale tijd: 55 minuten voor vier opgaven)

### Opgave 1 - fouten uit code halen

(10 min)

De functie *verschil* bepaald het verschil tussen twee getallen. De functie krijgt twee getallen mee en returned het verschil. Dus verschil(12,10) en verschil10,12) returnen beide 2.

(a) Er zitten een fout in regel 3, haal deze fout uit de code.

(b) Er zit nog een fout in de code. De functie werkt namelijk niet in alle gevallen. Los deze bug op.

(c) Pas de code aan, zodat er juist wordt ingesprongen.

Lever de gehele gecorrigeerde code in, in je PHP-bestand.

```
function verschil($a, $b) {
    
$result =  $nummer1 - $nummer2;
    
if ( $result < 0 ) {
 	$result = $result * -1;
 	return $result;
 }

}
     
$nummer1 = 10;
$nummer2 = 12;
echo verschil($nummer1, $nummer2); // hier verwacht je een uitkomst van 2 ($nummer2-$nummer1), maar het werkt niet, help!
```

### Opgave 2 - middelste

(15 minuten)

Maak een functie, middelste($nummer, $nummer, $nummer) die drie parameters mee krijgt. De return value van de functie moet het middelste getal zijn.

Bijvoorbeeld:

```
echo middelste(1,2,3)    // dit drukt 2 af
echo middelste(6,12,3)   // dit drukt 6 af
echo middelste(-1,-2,-3) // dit drukt -2 af
echo middelste(0,2,3)    // dit drukt 2 af
```

Zet de functie middelste($getal1, $getal2, $getal3) in je PHP-bestand.

### Opgave 3 - gemiddelde snelheid

(15 minuten)

Maak een functie die die de gemiddelde snelheid uitrekent.

Stel:

```
Je fietst 3 uur en je hebt 60 km afgelegd, dan is de gemiddelde snelheid 60/3 = 20 km/uur.
Je zit 2 uur in de auto en je hebt 160 km afgelegd, dan is de gemiddelde snelheid 160/2 = 80 km/uur.
```

Om de gemiddelde snelheid te berekenen deel je dus de afstand (in kilometers) door de tijd (in uren).

#### Deel 1, functie maken

Maak nu een functie gemiddeldeSnelheid($tijd, $afstand), die twee parameters mee krijgt: $tijd in uren en $afstand in kilometers. De functie returned de gemiddelde afstand.

Gebruik onderstaande template.

```
function gemiddeldeSnelheid.....
...
...
...

//Je fietst 3 uur en je hebt 60 km afgelegd, dan is de gemiddelde snelheid 60/3 = 20 km/uur.
echo gemSnelheid(3, 60); // dit drukt 20 af

//Je zit 2 uur in de auto en je hebt 160 km afgelegd, dan is de gemiddelde snelheid 160/2 = 80 km/uur.
echo gemSnelheid(2, 160); //dit drukt 80 af
```

Op de plaats van de puntjes in de bovenstaande code maak je de functie en zorg je dat het werkt. Controleer of er inderdaad 20 en 80 wordt afgedrukt.

##### Deel 2, output netjes maken

Pas de code aan, zodat de output netjes wordt geformatteerd. De output moet er als volgt uit zien:

```
Je doet 3 uur over 60 kilometer; je gemiddelde snelheid was 20 km/uur.
Je doet 2 uur over 160 kilometer; je gemiddelde snelheid was 80 km/uur.
```

Denk er wel aan dat je de functie generiek houd en dat je alle taalelementen *buiten* de functie houd. De functie returned dus alleen een getal.

### Opgave 4 - herhaald afdrukken

(15 minuten)

Maak nu een functie herhaaldAfdrukken($string, $aantal). De $string wordt $aantal keer afgedrukt.

De functie bevat dus een echo en de functie returned niets.

Denk aan de fout afvang en aan juist inspringen!

Let op, je mag bij deze opdracht **<span style="background-color: #ffff00;">niet</span>** gebruik maken van de PHP-functie ***str\_repeat***

Gebruik onderstaande template.

```
function herhaaldAfdrukken( $string, $aantal) {
	...
	...
	...
}

herhaaldAfdrukken('*',12);          // dit drukt ************ af
herhaaldAfdrukken('hello<br>',4);   // dit drukt hello<br>hello<br>hello<br>hello<br> af, dus in de browser is dat 4 maal een volgende regel
herhaaldAfdrukken('--.-- ',2);      // dit drukt --.-- --.-- af
```

Zet de functie in je PHP-bestand.

\--

# Quiz 2.2

### Opgave 1

Maak een form dat de gebruiker vraagt om zijn geboortedatum in te vullen. Maak drie velden; jaar, maand en dag.

Dus stel dat je bent geboren op 21-juni-2001, dan vul je het form als volgt in:

![](https://www.roc.ovh/uploads/images/gallery/2020-05/scaled-1680-/image-1588876471490.png)

Het form heeft een action, action.php en de form-method is GET.

### Opgave 2

Hieronder staat een stukje code uit de action.php die je verder moet aanvullen (de regels 1 t/m mag je *niet* veranderen).

```
<?php

$months=['jan','feb','mrt','apr','mei','jun','jul','aug','sep','okt','nov','dec'];

$dag=$_GET['dag'];
$maand=$_GET['maand'];
$jaar=$_GET['jaar'];

...

 ?>
```

Maak deze code compleet door op de plaats van de puntjes code toe te voegen, zodat er wordt afgedrukt

```
U bent 21 jun in 2002 geboren
```

(dit is natuurlijk een voorbeeld en de echte datum die wordt afgedrukt komt uit het form).

### Opgave 3

Voeg deze functie aan de action.php

```
function verschilTussenTweeDatums($dateString1, $dateString2) {
  $date1 = strtotime($dateString1);
  $date2 = strtotime($dateString2);
  $diff = $date2 - $date1;
  $diff = $diff/60/60/24;
  return($diff);
}
```

Deze functie krijgt twee parameters mee. Dat zijn twee datums in het formaat yyyy-mm-dd (bijvoorbeeld "2020-05-07" voor 7 mei 2020). De eerste datum is de oudste. De functie returned het aantal dagen tussen de twee datums.

Gebruik deze functie om te bepalen hoe veel dagen je leeft en druk het volgende af.

```
U bent 21 jun in 2002 geboren
U leeft 6530 dagen
```

### Opgave 4

Maak een nieuwe functie waarmee je afdrukt hoeveel uren je leeft. De output wordt dan:

```
U bent 21 jun in 2002 geboren
U leeft 6530 dagen
U leeft 156720 dagen
```

# Quiz 2.3 -  PHP2 - 30 juni

### Beoordeling

Je wordt in de eerste plaats beoordeeld of de code doet wat het moet doen. Daarnaast wordt je ook beoordeeld op netheid van de code. Er wordt daarbij vooral gelet op juist inspringen en op onnodige code of onnodige variabele.

Zet alle antwoorden in één PHP file (mag in commentaar) en schrijf telkens duidelijk de opgave erbij. Je kunt de [template](http://roc.ovh/attachments/40) gebruiken.

##### Puntentelling

*(indicatief)*

<table border="1" id="bkmrk-opgave-punten-1-1.5-" style="border-collapse: collapse; width: 44.4444%;"><tbody><tr><td style="width: 27.1514%; background-color: #f0f0f0;">**Opgave**</td><td style="width: 17.293%; background-color: #f0f0f0;">**Punten**</td></tr><tr><td style="width: 27.1514%;">1</td><td style="width: 17.293%;">1.5</td></tr><tr><td style="width: 27.1514%;">2</td><td style="width: 17.293%;">1.5</td></tr><tr><td style="width: 27.1514%;">3</td><td style="width: 17.293%;">1</td></tr><tr><td style="width: 27.1514%;">4</td><td style="width: 17.293%;">1</td></tr><tr><td style="width: 27.1514%;">5</td><td style="width: 17.293%;">1.5</td></tr><tr><td style="width: 27.1514%;">6</td><td style="width: 17.293%;">1.5</td></tr><tr><td style="width: 27.1514%;">7</td><td style="width: 17.293%;">2</td></tr><tr><td style="width: 27.1514%; background-color: #f0f0f0;">**TOTAAL**</td><td style="width: 17.293%; background-color: #f0f0f0;">**10**</td></tr></tbody></table>

##### Tijd

Tijd totaal 1:50 uur.

Tijd gaat lopen nadat alle opgaven zijn doorgelezen en zijn doorgenomen - tijdens doorlezen nog niets opzoeken.

#### Template

[Antwoorden-template is beschikbaar op deze pagina.](http://roc.ovh/attachments/40)

### Opgave 1

(10 minuten)

#### 1a

Je hebt het volgende array

```
$age =  array( array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"),
        array("Anna"=>"25", "Julia"=>"36", "Miranda"=>"13")  ) ;
```

Gebruik dit array en druk de leeftijd van Anna af. Je moet de leeftijd dus opzoeken en gebruik maken van het array ('echo 25' is dus *geen* goed antwoord).

*Schrijf de regel(s) code waarmee je dat doet op je antwoordenblad.*

#### 1b

Je hebt het volgende formulier

```
<form action="verwerk.php" method="get">
  Gebruikersnaam <input type="text" name="userName"> <br>
  <input type="submit" value="Submit">
</form>
```

In de PHP file verwerk.php wil je de Gebruikersnaam afdrukken. Hoe doe je dat?

*Schrijf de regel(s) code waarmee je dat doet op je antwoordenblad; je mag het antwoord in PHP-commentaar schrijven.*

#### 1c

Hoeveel \* worden er door de volgende code afgedrukt?

```
<?php
for($i=0; $i<=100; $i++) {
	$j=10;
	while ($j) {
		echo "*";
		$j--;
	}
}
```

*Schrijf op je antwoorden blad in PHP-commentaar (vul het aantal in op de plaats van de puntjes).*

```
// er worden ... sterretjes afgedrukt.
```

### Opgave 2

( 10 minuten)

Maak een stukje code dat alle getallen van 1 /tm 1000 afdrukt die deelbaar zijn door 3.

De code drukt dus af: **3, 6, 9, 12 ,15 ,1 8, 21, 24, 27,......., 993, 996, 999.**

<span style="background-color: #ffff00;">Let op</span>, dat er tussen elk getal een komma en een spatie staat, behalve achter het laatste getal staat een punt.

Tip: je hoeft geen functie te maken, maar je moet wel gebruik maken van een loop

### Opgave 3

(15 minuten)

Op een website wordt afgedrukt of het warm is in een lokaal of niet. Als de temperatuur meer dan 22 graden is dan is het warm. Beneden de 18 is het koud en vanaf 18 tot 22 is het normaal.

Maar een functie die als parameter de temperatuur mee krijgt en die 'koud', 'normaal', of 'warm' terug geeft.

<table border="1" id="bkmrk-functienaam-antwoord" style="border-collapse: collapse; width: 55.3086%;"><tbody><tr><td style="width: 216.35px;">**Functienaam**</td><td style="width: 230.717px;">lokaalStatus</td></tr><tr><td style="width: 216.35px;">**Input**</td><td style="width: 230.717px;">temperatuur, bijvoorbeeld 21</td></tr><tr><td style="width: 216.35px;">**Output**</td><td style="width: 230.717px;">koud, normaal, of warm</td></tr></tbody></table>

```PHP
<? php

function lokaalStatus($temperatuur) {
   ...
   ...

   ...
}

echo lokaalStatus(17); // dit drukt af koud
echo lokaalStatus(22); // dit drukt af normaal
echo lokaalStatus(23); // dit drukt af warm
```

### Opgave 4

(15 minuten)

Maak een functie die jouw multiple choice test kan invullen. Hiervoor moet je een telkens een letter a, b, c, d, e of f returnen. De letters worden willekeurig (random) gekozen.

<table border="1" id="bkmrk-functienaam-antwoord-0" style="border-collapse: collapse; width: 55.3086%;"><tbody><tr><td style="width: 216.35px;">**Functienaam**</td><td style="width: 230.717px;">antwoord</td></tr><tr><td style="width: 216.35px;">**Input**</td><td style="width: 230.717px;"> </td></tr><tr><td style="width: 216.35px;">**Output**</td><td style="width: 230.717px;">a of b of c of d of e (willekeurig)</td></tr></tbody></table>

```PHP
<?php
function antwoord() {
   ...
   ...
     
   ...
}

echo antwoord(); // dit returned een willekeurige letter a, b, c, d of e
echo antwoord(); // dit returned een willekeurige letter a, b, c, d of e
echo antwoord(); // dit returned een willekeurige letter a, b, c, d of e
```

### Opgave 5

(20 minute)

Maak een functie die een array met getallen meekrijgt. De functie returned *true* als alle getallen in het array gelijk zijn en de functie returned *false* als dat niet het geval is.

Indien een array met 0 elementen wordt meegegeven dan wordt er altijd false gereturned.

<table border="1" id="bkmrk-functienaam-allengel" style="border-collapse: collapse; width: 55.3086%;"><tbody><tr><td style="width: 17.6543%;">**Functienaam**</td><td style="width: 37.6543%;">allenGelijk</td></tr><tr><td style="width: 17.6543%;">**Input**</td><td style="width: 37.6543%;">array met getallen, bijv. \[2,2,2,2\]</td></tr><tr><td style="width: 17.6543%;">**Output**</td><td style="width: 37.6543%;">true of false</td></tr></tbody></table>

```PHP
<?php
function allenGelijk($array) {
  ...
  ...
  
  ...
}

// let op, json encode wordt gebruitk om ervoor te zorgen dat true of false netjes wordt afgedrukt
// (standaard wordt een false namelijk niet afgedrukt).

echo json_encode( allenGelijk([3,4,5]) ); // dit drukt false af
echo "<br>";

echo json_encode( allenGelijk([3,3,3]) ); // dit drukt true af
echo "<br>";

echo json_encode( allenGelijk([5]) );     // dit drukt true af
echo "<br>";

echo json_encode( allenGelijk([]) );     // dit drukt false af
echo "<br>";
```

### Opgave 6

(15 minuten)

Maak de functie maandNummer($maand). Als argument geef je een drie letter code (jan, feb, mrt, ...., dec) en je returned het maandnummer. Voor jan een 1, voor feb een 2, ....voor dec een 12.

Als er **ongeldige waarde** wordt opgegeven, bijvoorbeeld maandNummer('max') dan returned de functie **0.**

Je kunt de onderstaande code aanvullen.

<table border="1" id="bkmrk-functienaam-maandnum" style="border-collapse: collapse; width: 55.3086%; height: 87px;"><tbody><tr style="height: 29px;"><td style="width: 17.6543%; height: 29px;">**Functienaam**</td><td style="width: 37.6543%; height: 29px;">maandNummer</td></tr><tr style="height: 29px;"><td style="width: 17.6543%; height: 29px;">**Input**</td><td style="width: 37.6543%; height: 29px;">maand afkorting, bijvoorbeeld sep</td></tr><tr style="height: 29px;"><td style="width: 17.6543%; height: 29px;">**Output**</td><td style="width: 37.6543%; height: 29px;">maandnummer, bijvoorbeeld 9</td></tr></tbody></table>

```PHP
<?php
function maandNummer($dezeMaand) {
  maanden=array('jan','feb','mrt','apr','mei','jun','jul','aug','sep','okt','nov','dec');
  ...
  ...
    
  ...
}

echo maandNummer('mrt'); // dit returned 3
echo maandNummer('dec'); // dit returned 12
echo maandNummer('max'); // dit returned 0
```

### Opgave 7

(25 minuten)

Schrijf een functie die een array met getallen mee krijgt. Als het array *meer* dan 2 elementen heeft dan return je het array maar je haalt de hoogste en laagste waarde eruit. De volgorde van de getallen moeten wel hetzelfde blijven.

Al de hoogste- of laagste waarde meerdere keren voorkomt dan haal je een hoogste en een laagste waarde uit het array, welke dat is maakt niet uit. Je haalt nooit meer dan twee waarden uit het array. De return value van de functie is dus een array waar twee waarden zijn uitgehaald. Zie voorbeelden:

<table border="1" id="bkmrk-input-output-uitleg-" style="border-collapse: collapse; width: 100%; height: 232px;"><tbody><tr style="height: 29px;"><td style="width: 31.7284%; background-color: #f0f0f0; height: 29px;">**Input**</td><td style="width: 34.1358%; background-color: #f0f0f0; height: 29px;">**Output**</td><td style="width: 34.1358%; background-color: #f0f0f0; height: 29px;">**uitleg**</td></tr><tr style="height: 29px;"><td style="width: 31.7284%; height: 29px;">2,3,4,5</td><td style="width: 34.1358%; height: 29px;">3,4</td><td style="width: 34.1358%; height: 29px;">2 en 5 zijn eruit gehaald</td></tr><tr style="height: 29px;"><td style="width: 31.7284%; height: 29px;">4,3,2,1</td><td style="width: 34.1358%; height: 29px;">3,2</td><td style="width: 34.1358%; height: 29px;">1 en 4 zijn er uit gehaald</td></tr><tr style="height: 29px;"><td style="width: 31.7284%; height: 29px;">2,2,2,2</td><td style="width: 34.1358%; height: 29px;">2,2</td><td style="width: 34.1358%; height: 29px;">2 en 2 zijn eruit gehaald</td></tr><tr style="height: 29px;"><td style="width: 31.7284%; height: 29px;">1,2,3</td><td style="width: 34.1358%; height: 29px;">2</td><td style="width: 34.1358%; height: 29px;">1 en 3 zijn eruit gehaald</td></tr><tr style="height: 29px;"><td style="width: 31.7284%; height: 29px;">1,2</td><td style="width: 34.1358%; height: 29px;">1,2</td><td style="width: 34.1358%; height: 29px;">er is niets gehaald</td></tr><tr style="height: 29px;"><td style="width: 31.7284%; height: 29px;">2,2,5,2,1,7,12,6</td><td style="width: 34.1358%; height: 29px;">2,2,5,2,7,6</td><td style="width: 34.1358%; height: 29px;">1 en 12 zijn eruit gehaald</td></tr><tr style="height: 29px;"><td style="width: 31.7284%; height: 29px;">1,4,3,5,3,3,5</td><td style="width: 34.1358%; height: 29px;">4,3,3,3,5 **of** 4,3,5,3,3</td><td style="width: 34.1358%; height: 29px;">de 1 en één 5 is eruit gehaald.</td></tr></tbody></table>

Als het array 2 of minder elementen heeft dan return je array ongewijzigd.

<table border="1" id="bkmrk-functienaam-mwaarden" style="border-collapse: collapse; width: 55.3086%; height: 87px;"><tbody><tr style="height: 29px;"><td style="width: 17.6543%; height: 29px;">**Functienaam**</td><td style="width: 37.6543%; height: 29px;">mWaarden</td></tr><tr style="height: 29px;"><td style="width: 17.6543%; height: 29px;">**Input**</td><td style="width: 37.6543%; height: 29px;">array getallen</td></tr><tr style="height: 29px;"><td style="width: 17.6543%; height: 29px;">**Output**</td><td style="width: 37.6543%; height: 29px;">array getallen</td></tr></tbody></table>

Probeer deze code zo ver mogelijk goed te krijgen. Als test zal elke input die hierboven in het voorbeeld staat worden getest. Als slecht een paar gevallen werken dan kun je ook punten krijgen voor deze vraag.

```PHP
<?php

// met deze code kan je je functie testen

print_r( mWaarden([2,3,4,5]) ); echo "<br>"; // Array ( [0] => 3 [1] => 4 )
print_r( mWaarden([4,3,2,1]) ); echo "<br>"; // Array ( [0] => 3 [1] => 2 )
print_r( mWaarden([2,2,2,2]) ); echo "<br>"; // Array ( [0] => 2 [1] => 2 )
print_r( mWaarden([1,2,3]) ); echo "<br>";   // Array ( [0] => 2 )
print_r( mWaarden([1,2]) ); echo "<br>";     // Array ( [0] => 1 [1] => 2 )
print_r( mWaarden([2,2,5,2,1,7,12,6]) ); echo "<br>";  // Array ( [0] => 2 [1] => 2 [2] => 5 [3] => 2 [4] => 7 [5] => 6 )
```

### Klaar?

PHP file inleveren in de opdracht in **Teams OITAOO8A PHP-3**

\--