François Vonk (XAMP vervangen door USB Webserver, minor edits)
Inhoudsopgave 1Wat is PHP?........................................................................................................4 1.1Wat heb je nodig?.................................................................................................5 1.2het eerste script....................................................................................................5 1.3voorwaarden.........................................................................................................8 1.4herhalingen...........................................................................................................9 1.5even terug naar HTML........................................................................................12 1.6gegevens opslaan..............................................................................................15 1.7GET of POST.....................................................................................................20
1 Wat is PHP? Voor we die vraag kunnen beantwoorden is het goed eerst iets te vertellen over hoe het internet eigenlijk in elkaar zit. Als je op het internet surft maak je (meestal) gebruik van een browser. Dat kan Internet Explorer zijn maar ook Firefox, Opera en er zijn er nog wel een aantal. Met een browser kun je webpagi na's opvragen die ergens op het internet staan. De plaats waar ze staan noemen we een server of beter, webserver. De browser wordt dan de client genoemd. Zo ontstaan een zogenaamd client-server systeem waarbij de webpagina's op de server staan en de client steeds verzoeken indient bij de server om pagina's te laten zien. Een webserver zorgt er dus voor dat er, verzoeken van verschillende clients (browsers dus), webpagina's naar die clients worden verzonden zodat ze daar getoond kunnen worden. Om dat allemaal goed te laten verlopen maakt men gebruik van een protocol, namelijk het HTTP protocol. En dat is weer een afkorting (voor HyperText Transfer Protocol) dat je vaak boven in de adresbalk in de browser hebt zien staan. Tot nu toe maakten we pagina's die we ook zo wel in de browser konden bekijken. Daar hadden we niet eens een server voor nodig. Maar wil je het via het internet ook aan anderen laten zien dan zul je dus moeten zorgen dat je jouw pagina’s op een webserver zet. En dan een webserver die uiteraard met het internet is verbonden. Soms heb je meer dan een server nodig. Bijvoorbeeld als de inhoud van de pagina steeds wij zigt. Zoals bij een internetwinkel. De gegevens in die winkel zijn niet iedere keer hetzelfde als je daar een pagina opvraagt. Dus kun je ook niet een webpagina maken waarin die gegevens er als gewone tekst in komt te staan. Je hebt dan behoefte aan een manier om de pagina's steeds met andere informatie naar de browser te sturen. En dat is wat we met PHP Uit WikiPedia: PHP is een scripttaal, die bedoeld is om kunnen doen. op webservers dynamische webpagina's te creëren. PHP PHP werkt op een webserver en maakt is in 1994 ontworpen door Rasmus Lerdorf, een senior daar de HTML-pagina’s. Maar het bij- software engineer bij IBM. zondere is dat PHP iedere keer als zo'n pagina wordt opgevraagd hem dan op- Aanvankelijk stonden de letters PHP voor Personal Home nieuw maakt. Als je een PHP pagina Page (de volledige naam van de software was Personal opvraagt zal de webserver eerst kijken Home Page/Forms Interpreter, PHP/FI). Sinds PHP 3.0 is welke PHP code in die pagina staat. de betekenis een recursief acroniem geworden: "PHP: Aan de hand daarvan wordt HTMLHypertextPreprocessor". Deze naam geeft aan waar de code gegenereerd en dat wordt dan taal meestal voor gebruikt wordt: informatie verwerken tot naar de browser gestuurd. hypertext (meestal HTML en XHTML). Het grote verschil tussen het gebruik van PHP en JavaScript kun je zien als je van de webpagina de bron bekijkt. Bij JavaScript zie je dan HTML met daarin de JavaScript code. Bij PHP zie je alleen maar 4
1Wat is PHP?
HTML. Met PHP kun je dus jouw code geheim houden. PHP is overigens, net als JavaScript, een scripttaal. Zo noemt men een taal die niet eerst gecompileerd (omgezet) hoeft te worden tot een uitvoerbaar bestand. De code wordt gewoon regel voor regel, zoals jij dat ingetypt hebt, rechtstreeks door de server uitgevoerd. We noemen PHP een server sided programmeertaal. Een taal dus die zijn werk doet op de server. Dit in tegenstelling tot JavaScript dat zijn werk doet in de browser en om die reden een client sided programmeertaal wordt genoemd. Naast PHP zijn er vergelijkbare oplossingen. Zo heeft Microsoft Active Server Pages (ASP met als opvolger ASP.NET). Van Sun Microsystems is Java Server Pages (JSP), gebaseerd op Java en beschikbaar voor veel webservers.
1.1
Wat heb je nodig?
Om met PHP te kunnen werken hebben we een webserver nodig. We moeten dan de bestanden die we maken op die webserver plaatsen en daarna via een browser de pagina opvragen. Vaak is een webserver ook nog eens een aparte computer. Maar we kunnen ook een webserver op onze eigen computer installeren en er op die manier mee werken. Het klinkt allemaal wel wat ingewikkelder dan het is want er zijn veel kant en klare oplossingen op internet te vinden. De zogenaamde WAMP pakketten (Windows, Apache, MySQL en PHP) kun je in z’n geheel downloaden en installeren. Tegenwoordig zijn er ook oplossingen die vanaf een USB stick draaien. Dit is handig want dan hoef je niks op je PC te installeren. We gaan voor deze module weer gebruik maken van USB Webserver. Om goed te kunnen werken is het daarom weer noodzakelijk dat je zelf een USB stick hebt en die elke les meeneemt. Als je je kennis over USB Webserver op wilt halen dan kun je kijken hoe je USB Webserver op je USB stick krijgt en hoe het werkt in het document USB Webserver installatie en gebruik dat je vindt in Moodle. Als je weer weet hoe USB Webserver werkt kunnen we gaan programmeren. Bij USB Webserver is het handig, maar niet noodzakelijk, om het hoofdbestand van je webomgeving index.php te noemen. Dit is namelijk het bestand dat standaard wordt geladen door Apache. In deze module ga je echter werken met bestandsnamen die het opdrachtnummer in zich hebben om de opdrachten zo gemakkelijk uit elkaar te houden. We plaatsen alle bestanden in de root van USB Webserver zoals uitgelegd in de installatie- en gebruikershandleiding in Moodle. De PHP-bestanden maken we weer met behulp van Notepad++.
1.2
het eerste script
Laten we beginnen met een eenvoudig script waarmee je kunt bepalen of het zomer- of wintertijd is.
Opdracht 1 Maak een bestand met de naam opdracht1.php en sla dit bestand op in de map waar de websitebestanden moeten staan (in de root dus). Typ in dat bestand de volgende code: <meta charset="utf-8"> Zomertijd
//Tijdzone instellen date_default_timezone_set('Europe/Amsterdam'); //Controleer zomertijd if(date('I') == 1) { echo "Het is zomertijd"; } else { echo "Het is wintertijd"; } ?> Bewaar het bestand, start een browser en typ in het url veld: http://localhost:8080/opdracht1.php Als het goed gegaan is krijg je nu de melding of het zomer- dan wel wintertijd is. Werkt dit niet, controleer dan eerst of Apache wel klaar is in het USB Webserver console! Aan het bovenstaande voorbeeld zie je dat het in eerste instantie heel veel lijkt op een HTML pagina. Het PHP gedeelte staat tussen . In dat gedeelte wordt eerst de tijdzone ingesteld. De zomertijd/wintertijd omschakeling verschilt namelijk per tijdzone. Daarna wordt er gebruik gemaakt van de standaard date functie. Als (if) date('I') een 1 geeft is het zomertijd, anders is het wintertijd. Dit is typisch hoe een functie werkt. Je vraagt de functie iets en hij geeft iets terug als resultaat. Nu zul je je misschien afvragen: 'Maar hoe weet ik dan wat dat resultaat moet zijn?' Kijk maar eens bij de datefunctie op http://nl.php.net/manual/en/function.date.php. Dat zie je ook dat de date-functie nog veel meer mogelijkheden heeft die je op kunt vragen. Je ziet dat met de opdracht echo iets op het scherm geplaatst wordt. echo gaan we nog veel vaker gebruiken omdat we er binnen PHP heel veel mee kunnen doen. Maar dat komt later aan de orde.
Opdracht 2 Maak een nieuw bestand, geef het de naam opdracht2.php en zet er de volgende code in: <meta charset="utf-8"> Begroeting '; $uur = date('H'); if($uur >= 0 && $uur < 6){ echo "Goedenacht meneer/mevrouw, "; } elseif($uur >= 6 && $uur < 12){ echo "Goedemorgen meneer/mevrouw, "; } elseif($uur >= 12 && $uur < 18){ echo "Goedemiddag meneer/mevrouw, "; } 6
1.2het eerste script
elseif($uur >= 18 && $uur < 24){ echo "Goedenavond meneer/mevrouw, "; }; echo "het is nu $uur uur."; echo ''; ?> Bewaar het bestand, start een browser en typ in het url veld: http://localhost:8080/opdracht2.php Hier gebruiken we opnieuw de date-functie. Nu halen we daaruit het uur van dit moment in de vorm van een getal. Die plaatsen we in de variabele $uur en daarvan maken we gebruik in de if en de echo regels. Bekijk het resultaat van opdracht 2 op verschillende tijdstippen van de dag!
Opdracht 3 Sla opdracht2.php op onder de naam opdracht3.php en verander in opdracht3.php de regel: echo "het is nu $uur uur."; in echo " het is nu $uur uur."; en leg uit wat het effect is.
Opdracht 4 Kijk opnieuw naar http://nl.php.net/manual/en/function.date.php. In de vorige opdracht hebben we weer de date functie gebruikt. Wat zou er gebeurd zijn als we in plaats van date('H') gebruik hadden gemaakt van date('G')? Nog even wat uitleg. Met $uur wordt een variabele aangegeven. In PHP beginnen alle variabelen met het dollar teken. In een variabele kun je een gegeven opslaan. In het bovenstaande voorbeeld wordt in $uur het getal dat het uur van de dag voorstelt opgeslagen. Bij opdracht 2 en opdracht 3 heb je gemerkt dat je HTML code in de PHP code mag stoppen. We deden dat met echo '
'; maar ook met echo " het is nu $uur uur.";. Met echo wordt zo’n regel naar de browser gestuurd en die beschouwt het als HTML. Wanneer je tekst met daarin een variabele door middel van echo naar de browser stuurt moet je de dubbele aanhalingstekens gebruiken ("). Gebruik je de enkele aanhalingstekens dan controleert PHP niet of er zich in de tekst ook variabelen bevinden. In dat geval wordt $uur dus gewoon als $uur afgedrukt.
Opdracht 5 Zoek op met welke date-functie je de minuten op kunt vragen. Verander dan opdracht2.php dusdanig dat je het aantal minuten ook in een variabele krijgt en de tijd nu als volgt op het scherm komt: het is nu 18:48 uur.
Opdracht 6 Als je de pagina van opdracht 5 bekijkt en je klikt met je rechtermuisknop op die pagina en kiest voor Bron weergeven, wat zie je dan? Zie je ook PHP code?
Hoofdstuk 1Wat is PHP?
7
1.3
voorwaarden
In opdracht 1 maakten we al gebruik van if en else. Aan de if opdracht zit een voorwaarde verbonden. Het programma kan als het ware uit twee dingen kiezen. Het ene als de voorwaarde waar is, het andere als de voorwaarde niet waar is. Dat gaat met het if statement als volgt: if (voorwaarde) { doe iets als de voorwaarde waar is; } else { doe iets als de voorwaarde niet waar is; } Dit zal je bekend voorkomen. Je hebt dat immers bij JavaScript al gehad! Alleen is de syntax hier een klein beetje anders.
Opdracht 7 a. Wat bedoelen we met syntax? b. Wat is het verschil in de syntax tussen de if opdracht in JavaScript en die in PHP? Zoals je ziet staat de voorwaarde tussen haakjes en de opdrachten die daarna komen staan tussen accolades. Dat laatste hoeft niet als de voorwaarde maar één regel lang is maar maak er toch maar een gewoonte van. Het is wel zo duidelijk. Als de voorwaarde niet waar is kom je bij het deel na else. Je zou dan opnieuw een voorwaarde kunnen stellen door in plaats van else de opdracht elseif te gebruiken. We hebben dat gebruikt in opdracht 2. Je ziet in opdracht 2 ook het gebruik van &&. Deze logische operator kwam ook al voor in hoofdstuk 6 van het html-deel. Daarmee worden twee voorwaarden met elkaar gecombineerd door middel van de EN-functie of, zoals die meestal wordt aangeduid: de AND-functie. Bij deze voorwaarde: ($uur >= 0 && $uur < 6) betekent het dus dat als aan beide voorwaarden voldaan is, ($uur groter of gelijk is aan 0 EN $uur is kleiner dan 6), het programma vervolgd wordt met het gedeelte na deze beide voorwaarden. Naast de && kennen we ook de || voor de OF-functie (de OR-functie) en de ! voor de NIETfunctie (de NOT-functie).
Opdracht 8 Leg uit waarom een voorwaarde als: ($uur >= 0 || $uur < 6) geen zinvolle betekenis heeft. Een andere manier om voorwaarden in jouw code in te bouwen is met het gebruik van het switch-statement. Wanneer je meer dan drie elseif’s in je code hebt staan is het vaak handiger en overzichtelijker om met switch te gaan werken. Kijk naar de volgende code om te zien hoe je met switch het probleem van opdracht 2 te lijf kunt gaan: '; $uur = date('H'); switch ($uur) { case ($uur >= 0 && $uur < 6): echo "Goedenacht meneer/mevrouw, "; break; case ($uur >= 6 && $uur < 12): 8
Zo is de code toch nog wat overzichtelijker nietwaar?
Opdracht 9 Met $maand = date('m') wordt er in de variabele $maand een getal geplaatst, afhankelijk van welke maand het op dit moment is. Dat getal zal dus een getal zijn uit de reeks van 1 t/m 12. Maak een PHP bestand, noem dit opdracht9.php, en plaats daar code in waarmee je met behulp van switch het getal omzet naar de maand in woorden. Zorg daarna dat de juiste maand op het scherm wordt afgedrukt. Om je even op weg te helpen: switch ($maand) { case 1: echo "januari"; break; case 2: echo "februari"; break; enz. Bestudeer nu verder de date() functie in PHP en zorg ervoor dat de volledige datum op Nederlandse wijze op het scherm komt te staan dus in de vorm van 30 september 2009 (maar dan met de huidige datum).
1.4
herhalingen
Naast de voorwaarden met if of switch kennen we in PHP ook de herhalingen. Je wilt bijvoorbeeld een berekening een aantal keren herhalen. Of je wilt een tekstbestand regel voor regel lezen. Bij herhalingen kennen we while, do-while en for(). Allereerst een eenvoudig voorbeeld met while.
Opdracht 10 Maak een nieuw bestand, geef het de naam opdracht10.php en zet er de volgende code in: <meta charset="utf-8"> Tot 3 tellen
9
"; ?> Maak van dit programma (het PHP gedeelte) ook een PSD. Als je dat niet lukt, lees dan de ver klaring hieronder en probeer het alsnog. Test het programma en probeer de werking van iedere regel te begrijpen. Hier de verklaring: $teller is een variabele die in het begin de waarde 1 krijgt. while ($teller <= 3) betekent: Doe, zolang $teller kleiner of gelijk is aan 3, de code die daarna tussen de accolades staat. echo "$teller "; Met deze regel wordt de waarde van $teller afgedrukt. $teller++; Tel bij $teller 1 bij op. Met while stel je dus een voorwaarde en zolang daar aan voldaan wordt, wordt de code tussen de accolades uitgevoerd. while gebruik je als je die voorwaarde vooraf wilt stellen. Maar het is ook mogelijk de voorwaarde achteraf te stellen. In dat geval maak je gebruik van do-while. In de volgende opdracht gaan we dat uittesten.
Opdracht 11 Maak een nieuw bestand, geef het de naam opdracht11.php en zet er de volgende code in: <meta charset="utf-8"> While Dit is de do-while "; $teller = 5; do { echo "De teller is $teller "; $teller--; } while ($teller >= 6); echo "Deze telt dus wel omdat de while pas na "; echo "het afdrukken van de teller staat!"; echo "
En dit is de while "; $teller = 5; while ($teller >= 6) { echo "De teller is $teller "; $teller--; }; echo "Maar deze telt niet mee omdat de while voor "; echo "het afdrukken van de teller staat. "; 10
1.4herhalingen
echo "Daarom loopt hij dus niet door de while loop.
"; ?> Maak van dit programma (het PHP gedeelte) ook een PSD. Met het PSD en de uitleg van de vo rige opdracht moet dat nu wel lukken. Het verschil tussen while en do-while wordt pas zichtbaar wanneer de bewering die achter while staat meteen al onwaar is. Tenslotte de for lus. Deze is wat ingewikkelder omdat er in één opdracht zoveel informatie zit. De algemene uitdrukking is: for (begin; voorwaarde; opdracht) { hier kan aanvullende code komen die steeds opnieuw uitgevoerd wordt zolang de lus loopt. } Je mag alle delen tussen de haakjes weg laten maar de ; ‘s moeten blijven staan! for wordt vooral gebruikt om een aantal keren een stukje code te doorlopen. Maar het wordt het best dui delijk gemaakt aan de hand van een voorbeeld:
Opdracht 12 Maak een nieuw bestand, geef het de naam opdracht12.php en zet er de volgende code in: <meta charset="utf-8"> Tafel van 7 "; }; ?> Test de code en probeer deze regel voor regel te begrijpen. Het belangrijkste is hier uiteraard de for regel. In die regel beginnen we met: $teller = 1. Dat is de beginwaarde waarmee we gaan werken. Met het tweede gedeelte: $teller <= 10 geven we aan dat we net zo lang doorgaan als deze voorwaarde waar is. Tenslotte hebben we op die regel nog $teller++ waarmee we aangeven dat bij iedere keer dat we deze lus doorlopen, er steeds bij $teller één wordt bijgeteld. Herinner je je het volgende nog? Waar dient de * voor? Als je het niet meer weet, kijk dan in hoofdstuk 6 van Programmeren in HTML, CSS en JavaScript. Soms wil je dat een lus pas stopt nadat aan een bepaalde voorwaarde is voldaan. Dat kun je in de for lus zelf uiteraard doen, in het deel tussen de haakjes. Maar soms is die voorwaarde com plexer en stoppen we dat in de code van de lus. We kunnen dan gebruik maken van de break opdracht. Zo zouden we de bovenstaande code ook als volgt hebben kunnen schrijven:
Hoofdstuk 1Wat is PHP?
11
10) { break; } $antwoord = $teller * 7; echo "$teller x 7 = $antwoord "; }; ?> Zoals je ziet wordt de code er zo niet echt overzichtelijker op. Daarom ook een waarschuwing: gebruik break alleen als je de code voor het einde van de lus echt niet in het deel tussen haakjes kwijt kunt. In dit voorbeeld is het dus echt onzinnig om break te gebruiken.
Opdracht 13 Misschien heb je wel in de gaten dat de for lus erg veel lijkt op de while lus. Maak een nieuw bestand, geef het de naam opdracht13.php en zorg dat hij hetzelfde doet als opdracht 12. Maar doe het nu met een while lus.
1.5
even terug naar HTML
We gaan weer even terug naar HTML. We hebben daar destijds een formulier gebruikt met be hulp van de codes: Maak nu ook een programma aan met de naam achtergrond.php met de volgende code: <meta charset="utf-8"> Achtergrondkleuren ">
Als je het bovenstaande test en je ziet een nieuwe pagina starten als je een achtergrondkleur kiest en op de knop “doen” geklikt hebt, dan heb je vast ook al een redelijk idee wat er in deze programma’s gebeurt. Eerst het programma opdracht14.php. Daarbinnen zie je met de regel: En getest? Werkt hij goed? Er staat niet zoveel nieuws in dit programma maar toch gebeuren er wel bijzondere dingen. Je ziet get als methode in de code staan maar toch wordt dat niet doorgegeven aan een ander stukje PHP-code. Wel zien we hier heel duidelijk dat de code uit twee gedeelten bestaat. In de head sectie staat heel veel PHP-code en in de body zien we een formulier met alleen in de action wat PHP. Kijk eerst eens naar de php-code in de head sectie. Met if (!empty($_GET)) controleert het programma of er via $_GET een waarde beschikbaar is. Maar aangezien er de eerste keer nog niets ingevuld is slaat hij domweg de rest van het PHP gedeelte in de head sectie over en laat hij het formulier zien dat in de body staat. Dus dan maar eens het formulier bekijken. Daarin staat als action aangegeven: action="" Het attribuut "PHP_SELF" wijst naar zichzelf. Dat betekent dat hij niet een ander PHP programma aanroept maar zichzelf. Beetje bijzonder natuurlijk maar als hij zichzelf opnieuw aan roept, dan is de variabele, of beter gezegd de matrix van variabelen $_GET wel gevuld en doorloopt hij dan dus het PHP gedeelte in de head sectie wel.
Opdracht 28 Verklaar alle regels van opdracht 27. Weet je niet wat een bepaalde regel doet? Zoek het dan op via internet of laat zo’n regel eens weg om te zien wat het resultaat ervan is.
Opdracht 29 Waarom stond er in dit programma niet de regel: rewind($fp); ?
Hoofdstuk 1Wat is PHP?
19
Opdracht 30 Kun jij een reden bedenken waarom met deze regels fclose($fp); $fp = fopen("naam.txt", "w+"); het bestand eerst gesloten wordt en meteen daarna weer geopend?
Opdracht 31 Maak nu een soortgelijk programma als in opdracht 27 maar nu met 3 invulvelden, naam, adres en woonplaats. Zorg ervoor dat het bestand waar je gegevens in worden opgeslagen niet iedere keer weer ge wist wordt maar dat de gegevens steeds aan het einde van het bestand er aan toegevoegd worden. (Welk attribuut moet je dan bij fopen() gebruiken?)
1.7
GET of POST
Tot nu toe hebben we steeds get gebruikt om gegevens van de ene webpagina naar de andere (of dezelfde) webpagina door te geven. Maar er is nog een andere methode, namelijk post. Misschien is het je wel al opgevallen. Als je get gebruikt verschijnen de gegevens die je met get wilt versturen in de URL van de nieuwe webpagina die je opvraagt. Dat kan heel handig zijn als je fouten aan het zoeken bent. Dan weet je tenminste wat er doorgegeven wordt. Maar het zal duidelijk zijn dat dat helemaal niet handig is om een wachtwoord door te geven. Dan wil je juist niet dat het zichtbaar is! De get variabelen worden ook opgeslagen in de logbestanden op de webserver en passeren ongecodeerd diverse routers op het internet. Gemakkelijk voor kwaadwilligen om ze te onderscheppen. Tenslotte heeft get nog een nadeel: de lengte van een de tekst die je met get doorgeeft is beperkt tot maximaal 8 KB. Om die reden heeft men een tweede methode bedacht, namelijk post. Voor onze toepassingen maakt het niet uit of we post of get gebruiken. Maar wanneer de veiligheid in het geding komt, gebruik dan post! In de volgende oefening zullen we de post methode toepassen.
Opdracht 32 In deze opdracht maken we een gastenboek. Je kent ze ongetwijfeld, de websites die je de mogelijkheid geven om te reageren op iets. Allereerst maken we een gastenboek waarmee je de gegevens in een gewoon tekstbestand op slaat. Later gaan we de gegevens opslaan in een echte database. Maak een php-bestand en sla dat op onder de naam opdracht32.php. Typ daarin de volgende code: <meta charset="utf-8"> Gastenboek
Test jouw code. Krijg je hetzelfde scherm als afbeelding 1? In dit programma gebeurt nog niet echt wat nieuws. Er zit ook nauwelijks php-code in maar het is wel weer een mooi voorbeeld van hoe je midden in jouw html-code php kunt invoegen. De menukeuze wordt hier met behulp van een ongeordende lijst gemaakt. Kijk eventueel bij de html hoofdstukken als je niet meer weet hoe die precies werkt.
Afbeelding 1: Gastenboekmenu
Het zal duidelijk zijn dat de links nog niet werken. Daarvoor zullen we eerst de bestanden gastenboekschrijven.php en gastenboeklezen.php moeten maken. Maak een php-bestand en sla dat op onder de naam gastenboekschrijven.php. Typ daarin de volgende code: <meta charset="utf-8"> In het gastenboek schrijven Ook dit is een bestand zonder php-code. Er is bewust voor gekozen de php-code buiten dit programma te houden. Met PHP-SELF was het wel mogelijk geweest dit in één bestand te plaatsen maar dan zou het nogal onoverzichtelijk worden. Bovendien geeft dit de mogelijkheid om later een andere manier van opslaan te kiezen, bijvoorbeeld in een database. Het betekent wel dat we straks ook nog een bestand opslaan.php moeten maken. Het allereerste nieuwe is het gebruik van method="post". Bij het bestand opslaan.php zullen we daar ook rekening mee moeten houden. Bij de input-tag zien we de size en tabindex attributen. Met size geven we aan hoe groot het invulveld moet zijn. Met tabindex geven we de volgorde aan waarmee we door het formulier willen gaan. Je weet ongetwijfeld dat je met de Tab-toets van het ene veld naar het ande re kunt springen. Als je tabindex gebruikt kun je daarmee die volgorde nummeren. Tenslotte maken we hier gebruik van de textarea tag waarbij we het aantal rijen en kolommen aangeven. Experimenteer gerust met de getallen daarbij om te zien wat het effect is. En dan nu het echte opslaan! Maak een php-bestand en sla dat op onder de naam opslaan.php. Typ daarin de volgende code: Het lukt niet om het gastenboek te openen"; exit; } // het wegschrijven van de gegevens fputs($fp, $datum); fputs($fp, "\n"); fputs($fp, $_POST["naam"]); fputs($fp, "\n"); fputs($fp, $_POST["email"]); fputs($fp, "\n"); fputs($fp, $_POST["woonplaats"]); fputs($fp, "\n"); fputs($fp, $_POST["bericht"]); fputs($fp, "\n"); fclose($fp); echo "
Klaar
"; echo "
De bijdrage is opgeslagen
"; 22
1.7GET of POST
echo "Terug naar het beginscherm"; ?> Hier hebben we dan eindelijk volop php-code. Maar echt moeilijk is het niet. Laten we de be langrijkste zaken even doornemen. Allereerst wordt met $bestandsnaam = "gastenboek.txt" aangegeven in welk bestand de gegevens zullen komen. Omdat we er ook de datum bij willen hebben zoeken we die vast op met $datum = date("d-m-Y, G:i"). Dan wordt de bestandsnaam geopend met het attribuut "a+". Zoek maar op wat dat attribuut doet. Vooropgesteld dat het lukt om het bestand te openen (met if (!$fp = fopen($bestandsnaam, "a+")) wordt dat gecontroleerd) krijg je daarna een aantal fputs opdrachten waarmee dan de betreffende gegevens worden weggeschreven. Met $fp (de filepointer) wordt aangegeven waarin het moet worden weggeschreven en bijgehouden op welke plaats in het bestand. Na ieder gegeven dat wordt weggeschreven volgt een fputs($fp, "\n"). Daarmee wordt de code voor een nieuwe regel (zeg maar de [Enter] toets) weggeschreven. Anders zou je al je tekst achter elkaar aan krijgen. En dat is niet de bedoeling. Tenslotte nog even de laatste zin: echo "Terug naar het beginscherm" Alles wat na echo komt moet tussen aanhalingstekens (") staan. Maar als je daarbinnen ook nog de aanhalingstekens wilt gebruiken moet je iets doen om te voorkomen dat de computer denkt dat de echo-regel al weer afgelopen is. En dat kan door er een backslash voor te plaatsen zoals gebeurt bij \"opdracht32.php\". Als alles goed werkt dan krijg je aan het eind de melding: “De bijdrage is opgeslagen”. Maar kun je die ook zien? In jouw htdocs map staat nu een bestand gastenboek.txt. Als je dat opent zie je, als het goed gegaan is, dat wat je op het scherm hebt ingevuld. Maar uiteraard is het veel te lastig om zo de bijdragen in het gastenboek te lezen. We zullen nog één programma moeten maken, namelijk gastenboeklezen.php. Maak een php-bestand en sla dat op onder de naam gastenboeklezen.php, en typ daarin de volgende code: <meta charset="utf-8"> Het gastenboek lezen
23
$fp = fopen($bestandsnaam, "r"); } else{ echo "
Het gastenboek is nog leeg!
Wees de eerste die erin schrijft! "; exit; } while (!feof($fp)){ $regel = fgets($fp); if (!feof($fp)){ if ($teller % $aantal_regels == 0){ // kop afdrukken $aantal_bijdragen++; echo ""; echo "
Bijdrage: $aantal_bijdragen
"; } } // regel afdrukken echo "$regel "; $teller++; } echo "Terug naar de homepage"; ?> Het eerste deel zal, zeker met de commentaarregels erin, niet zo moeilijk te begrijpen zijn. Laten we naar het tweede gedeelte kijken: De while (!feof($fp)) regel start een zogenaamde loop. Je zou die kunnen vertalen met: Doe zolang (while) je nog niet (!) het eind (feof) van het bestand ($fp) hebt bereikt alles wat daarna tussen accolades staat. En tussen de accolades komen we eerst $regel = fgets($fp) tegen. Met fgets worden de regels van $fp één voor één uitgelezen en in de variabele $regel gestopt. Daarna vraagt hij opnieuw met if (!feof($fp)) of hij aan het eind van het bestand is gekomen. Met de voorgaande code-regel heeft hij immers een regel van het bestand ingelezen dus het zou kunnen dat hij daarna wel aan het eind was. Dit lijkt een beetje vreemd maar het probleem is dat als hij de laatste regel heeft ingelezen, hij nog niet weet of hij daadwerkelijk aan het eind van het bestand is gekomen. Want het inlezen van die laatste regel ging immers nog prima. Maar pas als hij probeert een regel na de laatste regel in te lezen zal de functie feof(...) een true als resultaat geven en dus is dan pas duidelijk dat het bestand helemaal gelezen is. Hier gaat het eigenlijk alleen maar om de vraag of de kop moet worden afgedrukt. In eerste instantie zal hij nog niet aan het eind van het bestand zijn dus komt hij bij de regel if ($teller % $aantal_regels == 0). Het procentteken hier is de modulus functie. Met de modulus functie wordt de rest berekend van een deling. Dus hier staat: als je $teller deelt door $aantal_regels en de rest is 0, doe dan wat er tussen de accolades staat. Daarmee zorgt hij ervoor dat er na iedere 5 regels een lijn geplaatst wordt en dat daarna het nummer van de volgende bijdrage op het scherm komt. $teller telt het aantal regels dat ingelezen is. $aantal_regels geeft aan hoeveel regels één bericht bevat. Dus als $teller een veelvoud is van 5 wordt $aantal_bijdragen met één verhoogd, wordt er een horizontale lijn getekend en wordt de volgende kopregel met het bijdragenummer op het scherm getoond. 24
1.7GET of POST
Bij de allereerste keer heeft $teller nog de waarde 0, zal de deling dus een rest van 0 opleveren en wordt de kop afgedrukt. Daarna wordt de eerste regel van het bericht afgedrukt. Met $teller++ wordt de regelteller met 1 verhoogd waarna de while loop opnieuw doorlopen wordt, alle regels worden afgedrukt en bij iedere 5de regel wordt er ook een kop afgedrukt. En dat heeft je dus een werkend gastenboek opgeleverd. Alleen één ding mis je met dit gastenboek wel. Alle bijdragen verwijderen kan eenvoudig door gastenboek.txt van jouw schijf te verwijderen maar het zou handig zijn om gewoon via dit programma ook één bijdrage uit de reeks te kunnen verwijderen. Om dat te kunnen gaan we het gastenboek later onderbrengen in een database.
Opdracht 33 Probeer het programma dusdanig te wijzigen dat niet alleen de regels afgedrukt worden maar voor elke regel ook staat wat het is. Dus niet alleen: [email protected] maar: email: [email protected] Bijvoorbeeld zoals in afbeelding 2. Tip: je kunt strings (tekstregels) aan elkaar koppelen in PHP door er een punt tussen te zetten. Zoals: fputs($fp, $datum);
"Datum:
".
Afbeelding 2: Gastenboek lezen met aanduiding voor elke regel
Opdracht 34 Wat gebeurt er als je in het berichtenveld op [Enter] drukt? Controleer of het wel goed werkt! Heb je een idee hoe je dat op zou kunnen lossen?
Opdracht 35 Pas het gastenboek dusdanig aan dat je gebruik maakt van een apart CSS bestand waarin de opmaak geregeld wordt. In dat CSS bestand (dat voor alle bij het gastenboek gebruikte programma’s moet gelden) moeten in ieder geval zaken geregeld worden als de achtergrondkleur, de link kleuren en de lettertypen.
Opdracht 36 Pas het gastenboek dusdanig aan dat steeds na iedere bijdrage een horizontale lijn krijgt i.p.v. voor iedere bijdrage.
Hoofdstuk 1Wat is PHP?
Afbeelding 3: Gastenboek lezen met horizontale lijn onder de bijdrage
25
2 PHP met database Eén van de meest voorkomende toepassingen van PHP op een webserver is die waarbij PHP contact maakt met een database. Omdat we al gewend zijn aan het werken met XAMPP zullen we nu ook het MySQL gedeelte daarvan gaan gebruiken. En die MySQL database gaan we be naderen met behulp van PHP met de zogenaamde PDO extensie. PDO is de afkorting van PHP Data Objects. Het is gemaakt om diverse databases te kunnen be naderen zonder al teveel aan de PHP-code te moeten veranderen. Het is als het ware wat extra software tussen PHP en de database. Laten we eerst de belangrijkste mogelijkheden ervan bekijken. Het eerste wat je moet doen om vanuit PHP met een database te kunnen werken is de verbinding naar die database tot stand te brengen. Gelukkig is dat niet zo heel erg moeilijk. Als je dan ge bruik gemaakt hebt van de database moet je de verbinding ook weer sluiten. Dat gaat als volgt in een stukje PHP-code: Wat je in feite hier doet is een nieuwe (new) instantie (object) van de PDO klasse maakt. Bij het aanmaken ervan wordt met ('mysql:host=localhost;port=3307;dbname=test','root', 'usbw') een aantal parameters meegegeven. Het zal duidelijk zijn dat PHP hier een verbinding wil aanmaken met mysql. Met host=localhost wordt aangegeven dat het om een database gaat die op dezelfde computer draait als waar ook PHP werkt. Met port=3307 wordt aangegeven op welke poort van de computer de communicatie met de database plaats vindt. Met dbname=test wordt in MySQL verbinding gezocht met een database met de naam test. Tenslotte wordt er met 'user', 'password' een gebruikersnaam en wachtwoord meegegeven.
26
2PHP met database
Het nieuwe object wordt dan aangemaakt en er wordt in de objectvariabele $db een verwijzing naar dat object opgeslagen. De verbinding met de database kun je weer sluiten door de verwijzing in de objectvariabele $db gelijk te stellen aan NULL waarna het object niet meer bestaat. Laten we het eens met een echte database proberen en kijken wat we er dan mee kunnen.
Let op: het volgende deel komt uit de module Databases & SQL. Heb je dat bewaard dan heb je de database al geïmporteerd en hoef je dat natuurlijk niet opnieuw te doen. Om goed te oefenen met SQL kunnen we natuurlijk een groot oefenbestand aanmaken. Handiger is het gebruik te maken van een reeks SQL opdrachten die in een bestand zitten. Bekijk het bestand winkel.sql (je krijgt dat van je docent of het staat in de elo) maar eens met Notepad++. Je ziet dan een aantal SQL opdrachten waarmee eerst de database wordt aangemaakt, daarna de tabellen en die worden ook met behulp van een SQL opdracht gevuld met gegevens. Een dergelijk bestand noemen we een SQL-dump. Met MySQL kun je ook zo’n dump maken waarmee je dus een backup van jouw gegevens hebt. Maar nu gebruiken we het om de gegevens in MySQL te importeren.
Opdracht 11 •
Start phpMyAdmin
•
Klik op de tab
•
Klik op bestand kiezen en selecteer het bestand winkel.sql
•
Klik op Start Als het goed gegaan is krijg je de melding: Import is geslaagd, 7 queries uitge voerd. Dat betekent dat we nu de beschikking hebben over een bestand om mee te oefenen. Maar voor we aan de slag gaan is het goed nog even te kijken naar de structuur van de tabellen die we nu in de database winkel hebben. Want om goed te kunnen oefenen moet je de velden kennen. Door het bestand winkel.sql werden met de CREATE TABLE opdracht de volgende twee tabellen gemaakt: klanten
bestelde_artikelen
klantnummer
klantnummer
voornaam
order_datum
achternaam
artikel
woonplaats
hoeveelheid
provincie
prijs
In de SELECT opdrachten zullen we gebruik maken van de namen van de velden.
Hoofdstuk 2PHP met database
27
Nu we de beschikking hebben over een echte database kunnen we aan de slag met SQL-op drachten met behulp van PHP.
2.1
gegevens lezen
Opdracht 37 Zorg eerst dat Apache en MySQL gestart zijn. Typ daarna de volgende code in Notepad++ of de editor die jij gebruikt en sla dit bestand op in de map htdocs. Start daarna het programma door in de browser http://localhost:8080/opdracht37.php te typen. Let op: als je een ▬► ziet betekent dat dat je de volgende regel er achteraan moet typen! <meta charset="utf-8"> De klanten van de winkel query($sql); foreach($resultaat as $row) { echo $row['achternaam'].' '; } // Sluiten van verbinding $db = NULL; ?> En? Zie je het lijstje namen uit de klantentabel? Dat is namelijk de bedoeling. Mocht je de lijst niet zien dan heb je misschien vergeten Apache en/of MySQL te starten? Of misschien heb jij zelf de standaard inlogcode van MySQL gewijzigd? In dat geval zul je de code daarop aan moeten passen. Eerst maar even wat uitleg van deze code. De verbinding met de database wordt met de regel: $db = new PDO('mysql:host=localhost;port=3307;dbname=winkel', 'root', 'usbw'); tot stand gebracht. Je ziet dat de database-naam winkel hier in de code staat net zoals de inlognaam root. Met de standaard installatie van XAMPP is er maar één gebruiker, namelijk root en die heeft geen wachtwoord. Dat is natuurlijk helemaal niet veilig en zul je bij een echte database nooit moeten doen maar voor ons is het prima zo.
28
2.1gegevens lezen
De verbinding is een object en wordt in de objectvariabele $db opgeslagen. $db noemen we ook wel de database-handle. Als we verderop in de code de database gaan benaderen dan doe we dat door gebruik te maken van de database-handle. Met de regel: $sql = 'SELECT achternaam FROM klanten'; wordt de query samengesteld en in de variabele $sql opgeslagen. De PDO klasse heeft twee methodes voor het uitvoeren van queries op de database, namelijk query() en exec(). query() is het eenvoudigst, die voert de query uit en geeft het resultaat terug. exec() doet dat ook maar geeft naast het resultaat ook het aantal aangepaste rijen terug. Hier gebruiken we eerst query(). De zin: $resultaat = $db->query($sql); zal nu ook wel duidelijk zijn ook al is de notatie misschien een beetje vreemd. Op deze manier wordt de query op de database die wordt aangegeven met $db uitgevoerd en het resultaat van de query wordt in $resultaat opgeslagen. Tenslotte het stukje code waarmee het resultaat op de webpagina wordt weergegeven. foreach($resultaat as $row) { echo $row['achternaam'].' '; } Hier wordt gebruik gemaakt van een foreach-loop. Voor iedere rij in het $resultaat wordt de achternaam naar het scherm ge’echo’d. Met de erachter krijgen we ze keurig steeds op een nieuwe regel afgedrukt. Herinner jij je nog dat je met een punt strings aan elkaar kunt koppelen? Voor HTML staat daardoor meteen achter de achternaam.
Opdracht 38 Maak op dezelfde wijze een PHP programma waarmee je de artikelen en de bijbehorende prijs uit de bestelde_artikelen-tabel krijgt. (Je zult merken dat de uitvoer mogelijk niet zo mooi is. De prijs komt vlak achter de arikelnaam. Vaak wordt een dergelijke uitvoer in een tabel gepresenteerd maar met behulp van JavaScript en CSS kan het nog veel mooier. Voorlopig is dat voor ons niet van belang.)
2.2
gegevens toevoegen
Opdracht 39 Op soortgelijke manier kunnen we ook een klant toevoegen. Maak een PHP programma, geef het de naam opdracht39.php en plaats er de volgende code in: <meta charset="utf-8"> Een klant toevoegen
29
woonplaats, provincie) VALUES ('Karel', 'Doorman', ▬► 'Assen', 'Drenthe')"; $resultaat = $db->exec($sql); echo 'Aantal toegevoegde klanten: '.$resultaat; $db = NULL; ?> Heb je met phpMyAdmin gecontroleerd of de nieuwe klant is toegevoegd nadat je het bovenstaande programma gestart hebt? Dan is je misschien ook opgevallen dat het klantnummer niet ingevuld is. Oftewel dat heeft de waarde 0. Het is duidelijk dat het hier geen AUTO_INCREMENT veld is. Laten we dan in de volgende opdracht het klantnummer aanpassen:
2.3
gegevens wijzigen
Opdracht 40 Maak een PHP programma, geef het de naam opdracht40.php en plaats er de volgende code in: <meta charset="utf-8"> Een klant wijzigen exec($sql); echo 'Aantal aangepaste rijen: '.$resultaat; $db = NULL; ?> De code van opdracht 39 en opdracht 40 zal verder niet zo moeilijk te begrijpen zijn. Het enige echte verschil is de regel die begint met $sql. Met INSERT INTO voeg je dus een record toe aan de tabel, met UPDATE kun je een record wijzigen. Bij UPDATE moet je er uiteraard wel goed voor waken dat je het juiste record wijzigt. Meestal zal dat gebeuren op basis van het sleu telveld omdat een record daaraan uniek is te herkennen.
30
2.3gegevens wijzigen
2.4
foutmeldingen
Tot nu toe hebben we niets aan foutmeldingen gedaan. Toch is het wel handig daar gebruik van te maken. PDO heeft een redelijk aantal foutmeldingen waarvan wij zelf kunnen beslissen of we ze wel of niet aan zullen zetten. We zullen daar niet al te diep op in gaan maar één is toch wel belangrijk. We willen namelijk altijd wel weten of de verbinding met de MySQL server en de database is gelukt. Dat heeft immers ook te maken met of de gebruikersnaam en het wacht woord wel goed zijn ingetypt.
Opdracht 41 Open opdracht37.php in jouw editor en sla deze opnieuw op maar nu onder de naam opdracht41.php Wijzig de regel: $db = new PDO('mysql:host=localhost;port=3307;dbname=winkel', 'root', 'usbw'); in: try { $db = new PDO('mysql:host=localhost;port=3307; ▬► dbname=winkel', 'root', 'usbw'); } catch(PDOException $e) { echo $e->getMessage(); } Nu moeten we nog een fout genereren om het te testen. Schakel daarvoor de MySQL-server even uit en test dan het programma. Als het goed is krijg je nu een foutmelding met de mededeling dat hij geen verbinding kan maken met de MySQL: SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'localhost' (10061) Er zijn nog veel meer mogelijkheden met foutmeldingen, je kunt ieder contact met de server daarmee controleren, maar voor ons doel is het zo voldoende.
2.5
een CRUD voorbeeld
Onder CRUD wordt verstaan: Create, Retrieve, Update en Delete. Dat zijn zo ongeveer alle acties die we op een tabel of een aantal tabellen los willen laten. Tot nu toe hebben we een beetje gespeeld met de diverse SQL opdrachten maar laten we de CRUD acties met de winkel database eens helemaal uitwerken. Het handigst is dan te beginnen met een menu van waarnuit we alles kunnen doen.
Opdracht 42 Maak een php bestand met de naam opdracht42menu.php en plaats daarin de code zoals hieronder: <meta charset="utf-8"> Klanten van de winkel Hoofdstuk 2PHP met database
Dat bestandje zul je ongetwijfeld nog wel herkennen van het menu van het gastenboek. Dus de code zal ook geen problemen opleveren. We zien daarin twee links en dat betekent dat we die bestanden ook aan moeten maken. Eerst het toevoegen maar. Maak een PHP-bestand met de naam opdracht42toevoegen.php aan en plaats daarin de code zoals hieronder: <meta charset="utf-8"> Klanten invoeren Wat je hier ziet is een gewoon HTML formulier waarvan de gegevens door middel van POST naar opdracht42opslaan.php worden verstuurd. Dus tijd om daarmee aan de slag te gaan. Maak een PHP-bestand met de naam opdracht42opslaan.php aan en plaats daarin de code zoals hieronder: <meta charset="utf-8"> Een klant toevoegen getMessage(); } // De SQL opdracht $sql = "INSERT INTO klanten (klantnummer, voornaam, ▬► achternaam, woonplaats, provincie) ▬► VALUES ($_POST[klantnummer], '$_POST[voornaam]', ▬► '$_POST[achternaam]', '$_POST[woonplaats]', ▬► '$_POST[provincie]')"; $resultaat = $db->exec($sql); // Controle van de toegevoegde gegevens $sql = "SELECT * FROM klanten where ▬► klantnummer = $_POST[klantnummer]"; $resultaat = $db->query($sql); foreach($resultaat as $row) { echo '
"; echo ""; $db = NULL; ?> Ook hier niet echt wat nieuws in dit deel. De SQL-opdrachten zijn hier wat uitgebreider dan eerder maar echt nieuwe zaken zitten hier niet in. De INSERT INTO opdracht werkt met de gegevens die via POST meegenomen zijn vanuit opdracht42toevoegen.php. Eenmaal toegevoegd worden de gegevens meteen weer opgevraagd zodat je kunt controleren of het toevoegen is gelukt. Dan nu het bekijken, wijzigen en verwijderen van klanten. Als je de klanten kunt bekijken is het handig meteen in dat overzicht aan te kunnen geven of je gegevens wilt wijzigen of bepaalde klanten wilt verwijderen. Vandaar dat dat in één overzicht geplaatst is.
Afbeelding 4: Het klantenoverzicht met wijzig en verwijderknop Maak een PHP-bestand met de naam opdracht42bekijken.php aan en plaats daarin de code zoals hieronder: <meta charset="utf-8"> Het klantenoverzicht getMessage(); } // De SQL opdracht $sql = 'SELECT * FROM klanten'; $resultaat = $db->query($sql);
34
2.5een CRUD voorbeeld
// De HTML-tabel opbouwen echo '
'; foreach($resultaat as $row) { echo '
'; $nummer = $row['klantnummer']; echo '
'.$row['klantnummer'].'
'; echo '
'.$row['voornaam'].'
'; echo '
'.$row['achternaam'].'
'; echo '
'.$row['woonplaats'].'
'; echo '
'.$row['provincie'].'
'; echo "
"; echo "
"; echo '
'; } echo '
'; // Sluiten van verbinding $db = NULL; ?> Met behulp van een foreach loop worden de resultaten van de query getoond. Bijzonder hieraan is dat de gegevens in een HTML-tabel zichtbaar worden. Bovendien worden in die tabel meteen twee knoppen meegenomen. In de bijbehorende echo opdracht zie je dat iedere knop in een form zit met een eigen action. Op die manier wordt er per regel een knop toegevoegd met een actie die bij die regel hoort. Om het klantnummer mee te nemen in die action wordt deze via een hidden input aan het form toegevoegd. De actions in dit programmadeel brengen ons naar weer twee programma’s. Dus aan de slag daarmee. Eerst opdracht42wijzigen.php. Maak een PHP-bestand met de naam opdracht42wijzigen.php aan en plaats daarin de code zoals hieronder: <meta charset="utf-8"> Klant wijzigen
35
}
echo $e->getMessage();
// De SQL opdracht // Hier wordt de klant geselecteerd om de gegevens op // te halen die je wilt wijzigen. Het klantnummer zit // in $_POST[verstopt] $sql = "SELECT * FROM klanten WHERE ▬► klantnummer = $_POST[verstopt]"; $resultaat = $db->query($sql); // De klantgegevens worden in variabelen gestopt zodat // we ze in het formulier kunnen zien foreach($resultaat as $row) { $klantnummer = $row['klantnummer']; $voornaam = $row['voornaam']; $achternaam = $row['achternaam']; $woonplaats = $row['woonplaats']; $provincie = $row['provincie']; } // Sluiten van verbinding $db = NULL; echo ""
?>
36
2.5een CRUD voorbeeld
Wat we hier zien is eigenlijk weer hetzelfde programmadeel als dat wat we gebruikten voor het invoeren van een nieuwe klant. Het verschil is hier dat er eerst een query gedaan wordt om de gegevens van de betreffende klant te vinden en door middel van variabelen worden die gegevens nu in het formulier geplaatst. Dit gebeurt door de value’s van de invulvelden te vullen met de variabelen zoals die uit de database zijn gehaald. En ook hier zien we weer een action die ons doorstuurt naar het programma opdracht42wijzigdefinitief.php. Dat wordt dus het volgende te maken programma. Maak een PHP-bestand met de naam opdracht42wijzigdefinitief.php aan en plaats daarin de code zoals hieronder: <meta charset="utf-8"> Klant wijzigen getMessage(); } // De update opdracht $sql = "UPDATE klanten ▬► SET voornaam = '$_POST[voornaam]', ▬► achternaam = '$_POST[achternaam]', ▬► woonplaats = '$_POST[woonplaats]', ▬► provincie = '$_POST[provincie]' ▬► WHERE klantnummer = $_POST[klantnummer]"; $aantalregelsgewijzigd = $db->exec($sql); // Het wijziging bekijken $sql = "SELECT * FROM klanten ▬► WHERE klantnummer = $_POST[klantnummer]"; $resultaat = $db->query($sql); foreach($resultaat as $row) { echo '
$db = NULL; ?> In opdracht 40 hebben we de update opdracht al gehad dus echt wat nieuws zie je hier ook niet bij. Nog twee programma’s te gaan. Ze worden hier zonder verder commentaar geplaatst in de veronderstelling dat je nu wel de code zou moeten begrijpen. Maak een PHP-bestand met de naam opdracht42verwijderen.php aan en plaats daarin de code zoals hieronder: <meta charset="utf-8"> Klant verwijderen getMessage(); } // De SQL opdracht // Hier wordt de klant geselecteerd om de gegevens op // te halen die je wilt verwijderen. Het klantnummer zit // in $_POST[verstopt] $sql = "SELECT * FROM klanten WHERE ▬► klantnummer = $_POST[verstopt]"; $resultaat = $db->query($sql); foreach($resultaat as $row) { echo '
"; echo ""; // Sluiten van verbinding $db = NULL; ?> Maak een PHP-bestand met de naam opdracht42definitiefverwijderen.php aan en plaats daarin de code zoals hieronder: <meta charset="utf-8"> Klant verwijderen getMessage(); } // Hier wordt de klant geselecteerd om de gegevens op // te halen die je wilt verwijderen $sql = "SELECT * FROM klanten WHERE ▬► klantnummer = $_POST[klantnummer]"; $resultaat = $db->query($sql); foreach($resultaat as $row) { echo '
'; } $sql = "DELETE FROM klanten WHERE ▬► klantnummer = $_POST[klantnummer]"; $resultaat = $db->exec($sql); echo "
is nu verwijderd!
"; echo ""; // Sluiten van verbinding $db = NULL;
?>
Hoofdstuk 2PHP met database
39
Zo dat was hem, een volledige CRUD uitwerking. Zeker nog op veel plaatsen mooier te maken maar wat hij doen moet, doet hij. Probeer elk onderdeel te begrijpen. Voor de volgende opdrachten heb je dat nodig. Meer weten? Er is veel op internet hierover te vinden. Kijk bijvoorbeeld hier: http://www.phptuts.nl/view/27/1/
Opdracht 43 Eerder, in opdracht 25, hebben we een bezoekersteller gemaakt. Maak die nu opnieuw maar gebruik PHP PDO en sla de gegevens op in MySQL.
Opdracht 44 Maak nu een gastenboek zoals we eerder gemaakt hebben maar werk het nu uit tot een volledige CRUD toepassing. Gebruik daarbij PHP PDO en MySQL.