Databases via internet Zo werken Statische HTML-pagina’s Een webserver kun je zien als een programma die een verzameling HTML-documenten, zogenaamde webpagina's beheert. Dit programma staat op een computer die verbonden is met het internet (de webserver machine). Iemand die zo'n pagina wil bekijken (de client), kan met zijn browser via het internet contact leggen met de server en een verzoek sturen voor het bekijken van die pagina. De webserver stuurt dan een kopie van het HTMLdocument naar de client. Zijn browser zorgt er vervolgens voor dat de HTML-code wordt omgezet in een leesbare pagina. webserver machine HTML-pagina's web server internet http-verzoek http-verzoek voor vooreen eenpagina pagina HTML pagina gebruikers machine browser weergave De inhoud van een database bekijken via een website Wanneer je via een website gegevens uit een database wilt bekijken, of daarin opslaan, dan is er meer nodig. Er moet een klein programma, een zogenaamd script worden uitgevoerd. Dit script maakt contact met de database en zorgt voor het ophalen (of opslaan) van de gegevens. Bovendien moet het script deze gegevens omzetten in HTML, omdat ze alleen in deze vorm kunnen worden weergegeven in de browser. andere bestanden scriptmachine (PHP parser) Verwerking database (MySQL) verzoek + formulierinvoer HTML HTML-pagina's web server (Apache) webserver machine (PHP)scripts HTML internet http-verzoek voor http-verzoek voor script + eventuele script + formulierinvoer formulierinvoer HTML HTML pagina pagina browser weergave gebruikers machine Hoe maakt een script HTML-code We beginnen eenvoudig. We kijken eerst hoe we een script kunnen uitvoeren dat een eenvoudige HTMLpagina maakt (zonder gebruik van gegevens uit een database). Daarna bekijken we de inhoud van het script. Het starten van een script gebeurt via een httpverzoek: in de browser wordt de URL (het internet adres) van het script in de adresbalk ingetypt. De webserver stuurt het verzoek door naar de scriptmachine die het script ophaalt en verwerkt. De uitvoer van deze verwerking is een HTML-pagina die naar de client wordt teruggestuurd en wordt weergegeven in de browser. scriptmachine (PHP parser) Verwerking verzoek HTML HTML-pagina's web server (Apache) webserver machine (PHP)scripts HTML internet http-verzoek voor voor http-verzoek script + script formulierinvoer HTML HTML pagina pagina browser weergave gebruikers machine scriptmachine (PHP parser) (PHP)scripts Verwerking <?php verzoek webserver machine HTML HTML-pagina's print("<HTML> \n"); web server (Apache) print("<BODY> \n"); print("HaiHTML \n"); print("</BODY> \n"); print("</HTML> internet \n"); ?> http-verzoek voor voor http-verzoek script + script formulierinvoer HTML HTML pagina pagina browser weergave gebruikers machine Een PHP-script script1.php <?php print("<HTML>"); print("<BODY>"); print("Hai"); print("</BODY>"); print("</HTML>"); ?> Een belangrijk commando van de scripttaal is de HTML: schrijf-opdracht. In de scripttaal<HTML> PHP is dat het <BODY> commando: print . Hai Daarmee wordt de HTML</BODY> code opgebouwd </HTML> Een script kan ook in HTML-code worden ingevoegd (zoals bijvoorbeeld JavaScipt). De HTML-code buiten het script veranderd niet. Op de plaats van het script komt de HTML-code te staan die door het scipt wordt gemaakt. Kan ook binnen HTML script2.php <HTML> <BODY> <?php print("Hai"); ?> </BODY> <HTML> HTML: <HTML> <BODY> Hai </BODY> </HTML> Enkele mogelijkheden en voorbeelden met PHP Veel mogelijkheden die programmeertalen bieden, bestaan ook in een scripttaal (hier: PHP) , zoals bijvoorbeeld het werken met variabelen. In PHP geef je een variabele aan met een woord dat begint met een $-teken, bijvoorbeeld: $x, of $naam. PHP is veel minder streng bij het gebruik van variabelen dan een taal als Java. Variabelen hoeven bijvoorbeeld niet eerst gedeclareerd te worden. Werken met variabelen script3.php <HTML> <BODY> <?php $woord = "Hai"; print("$woord"); ?> </BODY> <HTML> HTML: <HTML> <BODY> Hai </BODY> </HTML> De herhalings-opdracht is natuurlijk ook een oude bekende. Hij heeft dezelfde schrijfwijze als in Java Herhalingen script4.php <HTML> <BODY> <?php $woord = "Hai"; for($x=0 ; $x<10 ; $x++) { print("$woord "); } ?> </BODY> <HTML> HTML: <HTML> <BODY> Hai Hai Hai Hai Hai Hai Hai Hai Hai Hai </BODY> </HTML> Wanneer je scripts gebruikt om gegevens uit een database op te halen, dan zul je dit vaak willen weergeven in een tabel. Het volgende script maakt een HTML-tabel. Het maakt gebruik van de herhalingsopdracht. script5.php Maak een HTML-tabel <HTML> <BODY> <?php print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<10 ; $x++) { print("<TR> \n"); for($y=0 ; $y<10 ; $y++) { print("<TD>hai</TD> \n"); } print("</TR> \n"); } print("</TABLE> \n"); ?> </BODY> <HTML> Formulier gegevens doorgeven en verwerken met behulp van (PHP)scripts We willen niet alleen gegevens zichtbaar kunnen maken op een website, maar ook gegevens kunnen opsturen Voor het opsturen van gegevens maken we gebruik van HTML-formulieren. De gegevens van zo’n formulier worden altijd verwerkt door een script op de server. In het volgende voorbeeld voorbeeld sturen we door middel van een formulier een naam op. Deze naam wordt door een scipt gebruikt om een pagina te maken waarin die naam 100 keer in een tabel wordt weergegeven. Dit willen we maken: Eerst een pagina met een formulier: Als eerste moeten we een HTML-pagina maken met een formulier erop. Deze pagina kan gewoon als statische pagina (zonder script) worden opgehaald. scriptmachine (PHP parser) verzoek HTML HTML-pagina's web server (Apache) webserver machine (PHP)scripts HTML internet http-verzoek http-verzoek voor voor pagina met script + formulier formulierinvoer HTML HTML pagina pagina browser weergave gebruikers machine scriptmachine (PHP parser) verzoek <HTML> <BODY> HTML HTML-pagina's web server (Apache) webserver machine (PHP)scripts HTML <FORM ACTION=”script6.php" METHOD="post"> internet <INPUT TYPE="text" NAME=”woord" VALUE=""> http-verzoek http-verzoek voor voor <input TYPE =submit VALUE ="Voer in"> HTML HTML pagina met script + pagina pagina formulier formulierinvoer </ FORM > </BODY> <HTML> browser weergave gebruikers machine Pagina met formulier Hier zie je de HTML-code. Het formulier wordt gedefinieerd tussen <FORM ...> en </FORM> De ingevulde gegevens worden onder de naam “woord” opgestuurd naar het script:”script6.php” pagina1.htm <HTML> <BODY> <FORM ACTION=”script6.php" METHOD="post"> <INPUT TYPE="text" NAME=”woord" VALUE=""> <input TYPE =submit VALUE ="Voer in"> </ FORM > </BODY> <HTML> Formulier verzenden ( ) ACTION=”script6.php" NAME=”woord" http-verzoek: http://localhost/script6.php formuliergegevens: woord=Piet Nu naar het script voor de verwerking: Bij het drukken op de knop bij het formulier wordt er een http-verzoek voor “script6.php” verstuurd naar de server. Bovendien wordt de informatie uit het formulier: “woord=Piet” meegestuurd: scriptmachine (PHP parser) Verwerking verzoek HTML HTML-pagina's web server (Apache) webserver machine (PHP)scripts HTML internet http-verzoek voor script + formulierinvoer formuliergegevens HTML HTML pagina pagina browser weergave gebruikers machine scriptmachine (PHP)scripts <HTML> (PHP parser) Verwerking <BODY> verzoek HTML <?php HTML-pagina's print("<TABLE BORDER=1 \n"); web CELLPADDING=5> server (Apache) for($x=0 ; $x<10 ; $x++) webserver { print("<TR> \n"); HTML machine for($y=0 ; $y<10 ; $y++) { print("<TD>$woord</TD> \n"); internet } http-verzoek voor print("</TR> \n"); http-verzoek voor HTML HTML script + script pagina pagina } formulierinvoer print("</TABLE> \n"); ?> browser </BODY> weergave gebruikers <HTML> machine script5.php Het formuliergegeven: “woord=Piet” zorgt ervoor dat er in het script een variabele $woord wordt gemaakt die als waarde “Piet” krijgt. <HTML> <BODY> <?php print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<10 ; $x++) { print("<TR> \n"); for($y=0 ; $y<10 ; $y++) { print("<TD>$woord</TD> \n"); } print("</TR> \n"); } print("</TABLE> \n"); ?> </BODY> <HTML> Het resultaat: Gegevens uit een database halen met PHP Nu gaan we met behulp van een script gegevens uit een (MySQL) database halen. Er moet dan een databaseprogramma op de servermachine zijn geinstalleerd. We gaan er ook vanuit dat er database genaamd: “ledendatabase” aanwezig is. We kijken eerst nog even naar het schema waarin de weg: verzoek - verwerking - weergave wordt doorlopen. Daarna kijken we in het script welke opdrachten nodig zijn. (PHP)scripts scriptmachine (PHP parser) Verwerking database (MySQL) verzoek + formulierinvoer HTML HTML-pagina's web server (Apache) webserver machine HTML internet http-verzoek http-verzoek voor voor script script HTML HTML pagina pagina browser weergave gebruikers machine (PHP)scripts <HTML> scriptmachine <BODY BGCOLOR="#FFDDBB"> database (PHP parser) (MySQL) Verwerking <CENTER> <?php verzoek + mysql_connect('localhost','root'); HTML-pagina's HTML formulierinvoer mysql_select_db(’ledendatabase'); $query = "SELECT * FROM leden";web server $result = mysql_query($query); (Apache) $aantalrijen = mysql_num_rows($result); webserver= mysql_num_fields($result); $aantalvelden HTML machine print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<$aantalrijen ; $x++) { print("<TR> \n"); internet $array = mysql_fetch_array($result); for($y=0 ; $y<$aantalvelden ; $y++) http-verzoek voor http-verzoek voor { print("<TD bgcolor=white> $array[$y]</TD> \n"); HTML HTML script + script + } pagina pagina formulierinvoer formulierinvoer print("</TR> \n"); } print("</TABLE> \n"); ?> browser </CENTER> weergave </BODY> gebruikers <HTML> machine script7.php <HTML> <BODY BGCOLOR="#FFDDBB"> <CENTER> Er wordt een <?php verbinding mysql_connect('localhost','root'); gemaakt met mysql_select_db(’ledendatabase'); database$query = "SELECT * FROM leden"; $result = mysql_query($query); programma $aantalrijen = mysql_num_rows($result); $aantalvelden = mysql_num_fields($result); print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<$aantalrijen ; $x++) { print("<TR> \n"); $array = mysql_fetch_array($result); for($y=0 ; $y<$aantalvelden ; $y++) { print("<TD bgcolor=white> $array[$y]</TD> \n"); } print("</TR> \n"); } print("</TABLE> \n"); ?> </CENTER> </BODY> <HTML> het script7.php <HTML> <BODY BGCOLOR="#FFDDBB"> Er wordt een <CENTER> <?php database met de mysql_connect('localhost','root'); naam: mysql_select_db(’ledendatabase'); “ledendatabase” $query = "SELECT * FROM leden"; geselecteerd $result = mysql_query($query); $aantalrijen = mysql_num_rows($result); $aantalvelden = mysql_num_fields($result); print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<$aantalrijen ; $x++) { print("<TR> \n"); $array = mysql_fetch_array($result); for($y=0 ; $y<$aantalvelden ; $y++) { print("<TD bgcolor=white> $array[$y]</TD> \n"); } print("</TR> \n"); } print("</TABLE> \n"); ?> </CENTER> </BODY> <HTML> script7.php <HTML> <BODY BGCOLOR="#FFDDBB"> Er wordt een query <CENTER> <?php gemaakt die de hele mysql_connect('localhost','root'); tabel “leden” mysql_select_db(’ledendatabase'); selecteert. $query = "SELECT * FROM leden"; $result = mysql_query($query); $aantalrijen = mysql_num_rows($result); $aantalvelden = mysql_num_fields($result); print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<$aantalrijen ; $x++) { print("<TR> \n"); $array = mysql_fetch_array($result); for($y=0 ; $y<$aantalvelden ; $y++) { print("<TD bgcolor=white> $array[$y]</TD> \n"); } print("</TR> \n"); } print("</TABLE> \n"); ?> </CENTER> </BODY> <HTML> script7.php <HTML> <BODY BGCOLOR="#FFDDBB"> De query wordt <CENTER> <?php uitgevoerd en het mysql_connect('localhost','root'); resultaat wordt mysql_select_db(’ledendatabase'); opgeslagen in de $query = "SELECT * FROM leden"; variabele $result $result = mysql_query($query); $aantalrijen = mysql_num_rows($result); $aantalvelden = mysql_num_fields($result); print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<$aantalrijen ; $x++) { print("<TR> \n"); $array = mysql_fetch_array($result); for($y=0 ; $y<$aantalvelden ; $y++) { print("<TD bgcolor=white> $array[$y]</TD> \n"); } print("</TR> \n"); } print("</TABLE> \n"); ?> </CENTER> </BODY> <HTML> script7.php <HTML> <BODY BGCOLOR="#FFDDBB"> Het aantal records <CENTER> <?php en het aantal velden mysql_connect('localhost','root'); van het resultaat mysql_select_db(’ledendatabase'); wordt opgevraagd $query = "SELECT * FROM leden"; $result = mysql_query($query); $aantalrijen = mysql_num_rows($result); $aantalvelden = mysql_num_fields($result); print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<$aantalrijen ; $x++) { print("<TR> \n"); $array = mysql_fetch_array($result); for($y=0 ; $y<$aantalvelden ; $y++) { print("<TD bgcolor=white> $array[$y]</TD> \n"); } print("</TR> \n"); } print("</TABLE> \n"); ?> </CENTER> </BODY> <HTML> script7.php <HTML> <BODY BGCOLOR="#FFDDBB"> De records worden <CENTER> <?php opgevraagd en mysql_connect('localhost','root'); weergegeven in een mysql_select_db(’ledendatabase'); HTML-tabel $query = "SELECT * FROM leden"; $result = mysql_query($query); $aantalrijen = mysql_num_rows($result); $aantalvelden = mysql_num_fields($result); print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<$aantalrijen ; $x++) { print("<TR> \n"); $array = mysql_fetch_array($result); for($y=0 ; $y<$aantalvelden ; $y++) { print("<TD bgcolor=white> $array[$y]</TD> \n"); } print("</TR> \n"); } print("</TABLE> \n"); ?> </CENTER> </BODY> <HTML> script7.php <HTML> <BODY BGCOLOR="#FFDDBB"> <CENTER> <?php mysql_connect('localhost','root'); mysql_select_db(’ledendatabase'); $query = "SELECT * FROM leden"; $result = mysql_query($query); $aantalrijen = mysql_num_rows($result); $aantalvelden = mysql_num_fields($result); print("<TABLE BORDER=1 CELLPADDING=5> \n"); for($x=0 ; $x<$aantalrijen ; $x++) { print("<TR> \n"); $array = mysql_fetch_array($result); for($y=0 ; $y<$aantalvelden ; $y++) { print("<TD bgcolor=white> $array[$y]</TD> \n"); } print("</TR> \n"); } print("</TABLE> \n"); ?> </CENTER> </BODY> <HTML> Gegevens opslaan in een database met PHP We willen niet alleen gegevens kunnen opvragen uit een database, maar ook gegevens kunnen opsturen en toevoegen. Voor het opsturen van gegevens maken we weer gebruik van HTML-formulieren waarvan de gegevens worden verwerkt door een script. We bekijken een voorbeeld waarin we een persoon (voornaam en achternaam) willen toevoegen aan de ledendatabase in de tabel leden. Eerst een pagina met een formulier: Pagina met formulier Hier is de HTML-code van het formulier dat we gebruiken. De ingevulde gegevens worden onder de namen “voornaam” en “achternaam” opgestuurd naar het script:”script8.php” pagina2.htm <HTML> <BODY> <FORM ACTION=”script8.php" METHOD="post"> <INPUT TYPE="text" NAME=”voornaam" VALUE=""> <INPUT TYPE="text" NAME=”achternaam" VALUE=""> <input TYPE =submit VALUE ="Voer in"> </ FORM > </BODY> <HTML> http-verzoek: http://localhost/script8.php formuliergegevens: voornaam=Pietje achternaam=Puk script8.php <HTML> <BODY> De formuliergegevens: “achternaam=Puk” en “voornaam=Pietje” zorgen ervoor dat er in het script de variabelen $voornaam en $achternaam worden gemaakt en de juiste waarden krijgen. <?php mysql_connect('localhost','root'); mysql_select_db('ledendatabase'); $query = "INSERT INTO leden(id,voornaam,achternaam) VALUES('null','$voornaam','$achternaam')"; $result = mysql_query($query); ?> De gegevens zijn toegevoegd aan de database. </BODY> </HTML> } script8.php <HTML> <BODY> Er wordt een verbinding gemaakt met het databaseprogramma <?php mysql_connect('localhost','root'); mysql_select_db('ledendatabase'); $query = "INSERT INTO leden(id,voornaam,achternaam) VALUES('null','$voornaam','$achternaam')"; $result = mysql_query($query); ?> De gegevens zijn toegevoegd aan de database. </BODY> </HTML> } script8.php <HTML> <BODY> Er wordt een database met de naam: “ledendatabase” geselecteerd <?php mysql_connect('localhost','root'); mysql_select_db('ledendatabase'); $query = "INSERT INTO leden(id,voornaam,achternaam) VALUES('null','$voornaam','$achternaam')"; $result = mysql_query($query); ?> De gegevens zijn toegevoegd aan de database. </BODY> </HTML> } script8.php <HTML> <BODY> Er wordt een query gemaakt die de nieuwe gegevens invoert <?php mysql_connect('localhost','root'); mysql_select_db('ledendatabase'); $query = "INSERT INTO leden(id,voornaam,achternaam) VALUES('null','$voornaam','$achternaam')"; $result = mysql_query($query); ?> De gegevens zijn toegevoegd aan de database. </BODY> </HTML> } script8.php <HTML> <BODY> De query wordt uitgevoerd. <?php mysql_connect('localhost','root'); mysql_select_db('ledendatabase'); $query = "INSERT INTO leden(id,voornaam,achternaam) VALUES('null','$voornaam','$achternaam')"; $result = mysql_query($query); ?> De gegevens zijn toegevoegd aan de database. </BODY> </HTML> } Tenslotte kijken we nog een keer naar het schema waarin de weg: verzoek - verwerking - weergave wordt doorlopen. (PHP)scripts scriptmachine (PHP parser) Verwerking database (MySQL) verzoek + formulierinvoer HTML HTML-pagina's web server (Apache) webserver machine HTML internet http-verzoek http-verzoek voor script + voor script + formulier invoer formulier invoer HTML HTML pagina pagina browser weergave gebruikers machine