Hoofdstuk 19. PHP en MySQL
19.6. Arrays, require, sessies, datum/tijd, functies, enz.
19.6.1. Een array maken
Een array is een geindexeerde rij getallen of strings.
Als je een array $b hebt, dan is $b[0] het eerste element van de rij, $b[1] is de tweede van de rij, enz.
Met count($b) wordt in dat geval bedoeld: het aantal elementen van die rij.
Je kunt op verschillende manieren waarden toekennen aan een array:
- De eerste manier:
$b[0] = "Jan";
$b[1] = "Piet";
$b[2] = "Klaas";
- De tweede manier:
$b = array ("Jan" , "Piet" , "Klaas");
Nog steeds geldt dan $b[0] = "Jan" enz.
- De derde manier:
$b[ ] = "Jan";
$b[ ] = "Piet";
$b[ ] = "Klaas";
Ook nu geldt $b[0] = "Jan" enz.
Als je een nieuw element, zonder index, toevoegt aan de rij, dan wordt het achteraan de rij toegevoegd.
- De vierde manier:
$b = array ("5"=>"Jan" ,"6"=> "Piet" ,"7"=> "Klaas");
Dan geldt $b["5"] = "Jan" enz.
- De vijfde manier:
$namen = "Jan,Piet,Klaas";
$b = explode("," , $namen);
Dan geldt $b[0] = "Jan" enz.
Je moet bij explode aangeven wat het scheidingsteken is (het eerste argument tussen de haakjes, achter explode). Dat is
meestal een komma of een spatie.
Explode wordt vaak gebruikt als de elementen van de rij al achterelkaar in een variabele zijn opgeslagen.
(het omgekeerde kan ook: array-waarden achterelkaar zetten gescheiden door een bepaald teken, en dat opslaan in een variabele. Dat
kan m.b.v. implode)
Een array met strings als sleutelwaarden
- Je hoeft voor de index (of sleutelwaarden) niet beslist getallen te gebruiken, het kan ook met strings als sleutelwaarden (of hashes),
bijv:
$cijfers["Jaap"] = "76";
$cijfers["Petra"] = "81";
$cijfers["Karin"] = "65";
- Dit kan ook zo:
$cijfers = array ("Jaap"=>"76" ,"Petra"=> "81" ,"Karin"=> "65");
Nog steeds geldt dan $cijfers["Jaap"] = "76" enz.
Een array gemaakt m.b.v. het verwerken van een formulier
- Als je een formulier in een html-document hebt, waarin gegevens worden opgevraagd, dan worden die gegevens na verwerking door een
php-script automatisch in een array gezet, en die array heeft de naam $_POST (tenminste als de POST-methode werd gebruikt)
Als je bijv. het formulier met de volgende code maakt (zie hoofdstuk 16.7):
Voornaam: <input type="text" name="voornaam" size="20" > <br>
Achternaam: <input type="text" name="achternaam" size="20" ><br>
Wachtwoord: <input type="password" name="wachtwoord" size="20" ><br>
<input type="checkbox" name="lcleerling" value="Ja"> Ik ben een leerling van het Lauwers College <br>
<input type="checkbox" name="hobby" value="computer"> Mijn hobby is computeren <br>
<input type="radio" name= "geslacht" value checked="man."> man <br>
<input type="radio" name= "geslacht" value= "vrouw."> vrouw <br>
Wat is je leeftijd <br>
<option value="16min">16-</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="18plus">18+</option>
</select> <br>
Opmerkingen:<br>
<textarea name="commentaar" rows=5 cols=30 > Dit staat er al </textarea> <br>
<input type="submit" value="Verstuur dit formulier" > <br>
</form>
- Als in het tekstvenster voor de voornaam Piet wordt ingevuld dan krijgt na verwerking $_POST['voornaam'] de
waarde "Piet"
- Als het aankruisvak (checkbox) voor hobby wordt aangevinkt krijgt $_POST['hobby'] de waarde "computer" , en als het niet
is aangevinkt krijgt $_POST['hobby'] geen waarde.
- Als de radiobutton voor vrouw is aangevinkt dan krijgt $_POST['geslacht'] de waarde "vrouw" en anders de
waarde "man"
- Als in het pulldownmenu voor de leeftijd bijvoorbeeld 17 is uitgekozen dan krijgt $_POST['leeftijd'] de waarde "17"
- Als er test is ingetypt in het opmerkingen-venster dan krijgt $_POST['commentaar'] de waarde "test"
- Als er geklikt is op de verstuur_knop dan krijgt $_POST['submit'] de boolean-waarde true
19.6.2. Meer array-commando's
Stel dat je een array op de volgende manier hebt gemaakt:
$b = array ("0"=>"Jan" ,"1"=> "Piet" ,"2"=> "Klaas");
-
Met count($b) wordt het aantal elementen van de rij $b bedoeld, dus count($b) krijgt in dit geval
de waarde 3.
- Na de opdracht sort($b); zijn de waarden van de rij gesorteerd, er geldt daarna dus:
$b[0]="Jan", $b[1]="Klaas" en $b[2]="Piet"
- Na de opdracht rsort($b); zijn de waarden van de rij in omgekeerde volgorde gesorteerd,
er geldt daarna dus:
$b[0]="Piet", $b[1]="Klaas" en $b[2]="Jan"
Stel dat je een array op de volgende manier hebt gemaakt:
$cijfers = array ("Jaap"=>"76" ,"Petra"=> "81" ,"Karin"=> "65");
Dan geldt: $cijfers["Jaap"] = "76", $cijfers["Petra"] = "81"', en $cijfers["Karin"] = "65"
-
Na de opdracht asort($b); zijn de waarden van de rij gesorteerd en blijven de waarden bij de
juiste sleutelwaarden horen.
De volgorde waarin ze dan in het geheugen staan is als volgt:
(en als je ze afdrukt m.b.v. each zullen ze in de volgorde zoals hieronder worden afgedrukt)
$cijfers["Karin"] = "65", $cijfers["Jaap"] = "76", $cijfers["Petra"] = "81"
- Na de opdracht arsort($b); zijn de waarden van de rij in omgekeerde volgorde gesorteerd en
blijven de waarden bij de
juiste sleutelwaarden horen. De volgorde waarin ze dan in het geheugen staan is als volgt:
$cijfers["Petra"] = "81", $cijfers["Jaap"] = "76", $cijfers["Karin"] = "65"
- Na de opdracht ksort($b); zijn de sleutelwaarden van de rij gesorteerd en blijven de waarden bij de
juiste sleutelwaarden horen. De volgorde waarin ze dan in het geheugen staan is als volgt:
$cijfers["Jaap"] = "76", $cijfers["Karin"] = "65", $cijfers["Petra"] = "81"
- Na de opdracht krsort($b); zijn de sleutelwaarden van de rij in omgekeerde volgorde
gesorteerd en blijven de waarden bij de
juiste sleutelwaarden horen. De volgorde waarin ze dan in het geheugen staan is als volgt:
$cijfers["Petra"] = "81", $cijfers["Karin"] = "65", $cijfers["Jaap"] = "76"
Na de opdracht reset($b); wordt de aanwijzer teruggezet op het eerste element van de rij.
Elke keer als er een lus is doorlopen (bijv. bij een sorteeropdracht, of een foreach-opdracht, of een each-opdracht) moet dat gebeuren omdat de aanwijzer
na een lus op het laatste element van de rij staat.
Met de opdracht $array3 = array_merge ($array1, $array2); worden de twee arrays $array1 en
$array2 samengevoegd tot een nieuwe array.
Met de opdracht $t = implode ("," , $cijfers); worden de waarden van de array $cijfer aan elkaar
vastgeplakt, gescheiden door een komma, en in de variabele $t vastgelegd (dat wordt dus een string).
Wat het scheidingsteken wordt kun je zelf bepalen, dat is het eerste argument tussen de haakjes achter implode.
Als $cijfers de array is van de cijfers hierboven, dan krijgt $t de inhoud 76,81,65
19.6.3. Alle elementen van een rij afdrukken
Stel dat je een array op de volgende manier hebt gemaakt:
$b = array ("0"=>"Jan" ,"1"=> "Piet" ,"2"=> "Klaas");
Dan kun je ze op de volgende manier allemaal afdrukken:
for ($n = 0; $n < count($b); $n++)
{ print ("$b[$n] <br>"); }
Als je een array op de volgende manier hebt gemaakt:
$cijfers = array ("Jaap"=>"76" ,"Petra"=> "81" ,"Karin"=> "65");
dan kun je bovenstaande manier niet gebruiken voor het afdrukken, omdat de index nu niet uit getallen bestaat.
Er zijn verschillende manieren waarop je ze dan toch m.b.v. een herhalingslus kunt afdrukken:
-
Als je een array met strings als sleutelwaarden gebruikt, dan kun je handig gebruik maken van each
Als de array in $cijfers is opgeslagen, dan geeft each($cijfers) de eerste keer dat die opdracht wordt uitgevoerd het eerste
element van de array, de tweede keer het tweede element, enz.
En daarbij kun je de sleutel opvragen, en de waarde.
Als $t = each($cijfers) dan geeft $t[key] de sleutelwaarde, en $t[value] de waarde, dus $t is dan
een array dat uit twee elementen bestaat, nl. $t[key] $t[value]
Je kunt de waarden van de rij dus laten afdrukken m.b.v. de volgende PHP-code:
for ($n = 0; $n < count($b); $n++)
{
$t = each($cijfers);
print ("De waarde die bij de sleutel $t[key] hoort is $t[value] <br> ");
}
-
M.b.v. het commando list kun je ook de sleutel en de waarde van het element van een array opvragen.
Als je het volgende commando geeft: list ($sleutel, $waarde) = each($cijfers) dan geeft $sleutel de sleutelwaarde, en
$waarde de waarde. Je mag de namen van de variabelen, die hier $sleutel en $waarde zijn genoemd, zelf bedenken. Maar de eerste
is steeds de naam van de variabele voor de sleutel, en de tweede die voor de waarde.
Je kunt de waarden van de rij dus ook laten afdrukken m.b.v. de volgende PHP-code:
for ($n = 0; $n < count($b); $n++)
{
list ($sleutel, $waarde) = each($cijfers);
print ("De waarde die bij de sleutel $sleutel hoort is $waarde <br> ");
}
-
Je kunt ook gebruik maken van foreach
Dan worden alle waarden van de array doorlopen.
Er zijn twee versies van foreach, een lange versie en een korte versie.
In de lange versie foreach ($cijfers as $s => $w), worden de sleutel en de waarde van het element van de rij $cijfers, dat aan
de beurt is, beide in een variabele opgeslagen, in dit
geval in de variabelen $s en $w. De namen van die variabelen mag je zelf bedenken, maar de eerste (na as )
is steeds de naam van de variabele voor de sleutel, en de tweede (na => ) die voor de waarde.
Als je de volgende PHP-code hebt:
foreach ($cijfers as $sleutel => $waarde) { print ("\$cijfers[$sleutel] = $waarde<br>\n");}
dan worden de waarden m.b.v. de bijbehorende sleutel afgedrukt.
En in de korte versie foreach ($cijfers as $w), wordt alleen de waarde van het element van de rij in een variabele opgeslagen, in dit
geval in de variabele $w.
Met de volgende code:
foreach ($cijfers as $waarde) { print ("$waarde<br>\n");}
worden dus alleen de waarden afgedrukt (i.p.v. $waarde mag je ook een andere naam voor de variabele bedenken).
Alle ingevulde waarden van een formulier afdrukken m.b.v. een herhalingslus
Als het formulier van paragraaf 1 hierboven is verwerkt dan kun je alle ingevulde waarden op de volgende manier afdrukken.
if (isset($submit))
{
foreach($_POST as $sleutel => $waarde)
{ print ("$sleutel=$waarde <br>\n");}
}
In plaats van foreach($_POST as $sleutel => $waarde) kun je ook gebruik maken van
list ($sleutel, $waarde) = each($_POST)
De functie each( ) haalt de sleutelwaarde en de waarde, die aan de beurt is, uit de array, en de functie list( ) plaatst die
sleutelwaarde en die waarde vervolgens in de PHP-variabelen $sleutel en $waarde.
M.b.v. de opdracht while (list ($sleutel, $waarde) = each($_POST)) wordt de lus doorlopen totdat alle elementen van de array
$_POST aan de beurt zijn geweest:
while (list ($naamveld, $waarde) = each($_POST))
{ print("$naamveld $waarde <br> \n"); }
Alle rijen van een tabel, die de uitkomst is van een sql-query, afdrukken m.b.v. een herhalingslus
Als je gegevens uit een database wilt tonen (zie hoofdstuk 9 van PHP) dan kun je de resultaat-tabel, die het resultaat is van een
SQL-query, op de volgende manier afdrukken.
$result = mysql_db_query($dbnaam,$sql,$verbinding);
print ("<table border=1 ><tr>\n");
while ($row=mysql_fetch_row($result))
{
print ("<tr>");
foreach($row as $veldnaam => $kolomwaarde)
{ print ("<td>$kolomwaarde</td>"); }
print ("</tr>\n");
}
print ("</table>");
19.6.4. De funkties require( ) en include( )
Met de funktie require( ) kun je code uit een aparte file invoegen in
een php-document. Dat is handig voor code die je steeds gebruikt
en die steeds hetzelfde is.
Als je in elk php-document hetzelfde menu wilt hebben, dan kan dat m.b.v. require( ) worden ingevoegd. Of de kop van je
document kun je op de volgende manier invoegen.
De kop van een php-document is bijvoorbeeld steeds (tenminste als je steeds dezelfde titel gebruikt, en het stylesheet met de naam
style.css):
<html>
<head>
<title> Cursus PHP </title>
<link REL="stylesheet" type="text/css" HREF="style.css">
</head>
<body>
Hier begint de inhoud
Als je deze code opslaat in een bestand met de naam kop.php dan kun je in alle andere documenten
require("kop.php") gebruiken, dan wordt op de plaats waar je het commando gebruikt bovenstaande code ingevoegd.
Je kunt dan dus je php-documenten als volgt beginnen:
<?php require("kop.php"); ?>
Hier begint de inhoud
Je kunt ook include(filenaam) gebruiken, maar dat wordt meestal in een if-opdracht gebruikt.
Bij het gebruik van require(filenaam) zal altijd de code van de file worden ingevoegd,
maar bij het gebruik van include(filenaam) zal de code van de file alleen worden ingevoegd als aan de voorwaarde voldaan is
(we gaan er dus vanuit dat include(filenaam) door een if-constructie wordt voorafgegaan).
Dat kan dus als volgt (denk er om dat na een include-file php altijd afgesloten moet worden, en opnieuw gestart) :
if (voorwaarde)
{ include($file); }
else
{
....................
}
?>
19.6.5. Sessies
M.b.v. de array $_POST kan de inhoud van variabelen worden doorgegeven vanuit een
formulier naar een PHP-script.
Maar zodra je daarna een andere webpagina opvraagt, is de inhoud van de variabelen weg (het HTTP-protocol voor webservers
is "connectionless").
Wanneer je wilt dat de webserver de waarden van de doorgegeven variabelen 'onthoudt' dan moet je gebruik maken van
sessies (of 'sessions').
De waarden van variabelen worden binnen een sessie 'onthouden' in de array $_SESSION.
Stel je voor dat een gebruikersnaam en een wachtwoord zijn ingevoerd, en dat die in het script dat het formulier verwerkt
worden vastgelegd in de variabelen $_POST['naam'] en $_POST['wachtwoord']
Dan moeten de waarden daarvan worden overgezet naar de array $_SESSION, en dat kan m.b.v. de volgende opdrachten:
$_SESSION['naam'] = $_POST['naam'];
$_SESSION['wachtwoord'] = $_POST['wachtwoord'];
Verder is het zo dat een php-script, waarin variabelen uit een sessie worden gebruikt, moet beginnen met de volgende regels:
<?php
session_start();
Als een gebruiker heeft ingelogd met zijn gebruikersnaam en wachtwoord, en de naam en het wachtwoord zijn vastgelegd m.b.v. de
array $_SESSION, dan hoeft diegene niet steeds weer in te loggen als hij een andere pagina van de site bezoekt waarvoor ook de
gebruikersnaam en het wachtwoord vereist is.
Als het script van zo'n pagina dan begint met de volgende code, dan wordt er dus niet opnieuw naar de inloggevens gevraagd als die
al zijn ingevoerd:
<?php
session_start();
require("kop.php");
if ($_SESSION['naam'] and $_SESSION['wachtwoord'])
{
$naam = $_SESSION['naam'];
$wachtwoord = $_SESSION['wachtwoord'];
.........................
.........................
}
else
{
print ("Je bent nog niet ingelogd. Klik op <a href='inlogpagina.htm'>Inloggen</a> om in te loggen.");
?>
</body> </html>
Alle informatie over een sessie wordt standaard bewaard in de map C:\tmp (Dat kun je eventueel veranderen in het ini-bestand van PHP)
Om te kunnen werken met sessies moet je die map dus eerst aanmaken.
De sessiegegevens worden standaard 24 minuten bewaard, daarna worden ze vernietigd.
Je kunt er ook m.b.v. php-code voor zorgen dat die gegevens worden vernietigd, de opdrachten daarvoor zijn:
session_unset();
session_destroy();
19.6.6. Datum en tijd
De functie date( ) levert gegevens over de datum en de tijd, afhankelijk van wat er tussen de haakjes staat.
Als het bijvoorbeeld 4 februari 2007 is, dan zorgt de opdracht $datum = date("j-n-Y"); ervoor dat er geldt:
$datum = "4-2-2006"
De j achter date zorgt ervoor dat de dag (in cijfers) wordt afgedrukt, dus 4 (had je een d i.p.v. een j gebruikt dan kwam er 04)
De n achter date zorgt ervoor dat de maand (in cijfers) wordt afgedrukt, dus 2 (had je een m i.p.v. een n gebruikt dan kwam er 02)
De Y achter date zorgt ervoor dat het jaar wordt afgedrukt, dus 2007 (had je een y i.p.v. een Y gebruikt dan kwam er 07)
De streepjes tussen de letters achter date hebben tot gevolg dat er een streepje tussen de dag en de maand komt, en
ook tussen de
maand en het jaar.
De opdracht $datum = date("jS of F Y"); heeft tot gevolg dat er geldt:
$datum = "4th of Febuary 2006"
De j achter date zorgt ervoor dat de dag (in cijfers) wordt afgedrukt en de S achter de j heeft tot gevolg dat de
engelse notatie
wordt gebruikt, dus , dus 4th
De F achter date zorgt ervoor dat de maand (in letters, altijd in het engels) wordt afgedrukt, dus Febuary
Verder komt het woordje of tussen de dag en de maand, omdat dat ook tussen de j en de F (tuusen de haakjes achter date) staat
De opdracht $tijd = date("H:i:s"); heeft 's avonds 20 voor 8 tot gevolg dat er geldt:
$tijd = 19 : 40 : 00
19.6.7. Email m.b.v. PHP
Met behulp van PHP kun je, zonder een email-programma te gebruiken, een emailtje versturen. Dit gaat m.b.v. de functie mail().
De syntax van mail ( ) is als volgt:
$verzonden = mail("begunstigde", "onderwerp", "bericht", "headers");
Het laatste argument, de headers, kan van alles bevatten, maar je mag het ook weglaten.
Een voorbeeld wat er in de string $headers kan staan:
$headers = "From: misterX@domein.nl\r\n"."Cc: persoon@domein.nl\r\n"."BCc: persoon2@domein.nl\r\n";
Als de verzending van het emailtje goed gaat dan krijgt $verzonden de waarde true, en anders false.
Als je dit uitprobeert op je eigen computer (als je bijv. WAMP hebt geïnstalleerd) dan moet je zelf ook een mailserver installeren.
Of je maakt gebruik van de mailserver van je provider (de smtp-server), maar dan moet je wel php.ini aanpassen.
Dat doe je door op het wampserver icoontje te klikken, voor Config files te kiezen en dan op php.ini te klikken.
In het bestand php.ini zoek je naar :
[mail function] ; For Win32 only. SMTP = localhost
Plaats een puntkomma ( ; ) voor de regel SMTP = localhost. (Daardoor wordt deze regel als commentaar beschouwd)
En voeg een nieuwe regel, eronder, toe met daarop zoiets als: SMTP = smtp.hetnet.nl (de smtp-server van je provider)
Sla het op, en start wampserver opnieuw.
Je kunt dan een emailtje versturen m.b.v. het volgende script:
(natuurlijk kun je ook een formulier maken waarmee het emailtje ingevoerd kan worden, en een script maken (zoals hieronder) dat het
formulier verwerkt en er voor zorgt dat het emailtje wordt verstuurd)
$mailadres = "rjvdbeek@hotmail.com";
$subject = "testbericht";
$bericht = "Dit is een testbericht om te kijken of emailen m.b.v. PHP wel werkt";
$afzender = "From: Mister X@hetnet.nl\r\n";
if (mail("$mailadres", "$subject", "$bericht", "$afzender"))
{ print ("Het emailtje is verstuurd"); }
else
{ print ("Het bericht kon niet worden verzonden"); }
19.6.8. Cookies
Cookies zijn gewone tekstbestandjes waarin vanuit een website m.b.v. PHP gegevens geschreven kunnen worden.
Als je later diezelfde website nog eens bezoekt kan dit bestandje m.b.v. PHP worden ingelezen, en aan de hand daarvan kan er
op een bepaalde manier gereageerd worden.
Cookies worden geplaatst door middel van de functie setcookie().
Tussen de haakjes komen de zogenaamde argumenten. Je kunt maximaal zes argumenten tussen de haakjes zetten, maar de laatste drie
worden meestal weggelaten.
De syntax is:
setcookie("naam","waarde","verlooptijd","pad","domein","secure");
-
Naam
Elke cookie moet een naam hebben waaraan hij te herkennen is, het eerste argument is dus de naam.
-
Waarde
De waarde die je wilt opslaan in je cookie, daar gaat het eigenlijk om.
Als je dit weglaat, als je maar één argument gebruikt (dus de naam) dan wordt de cookie met die naam gewist.
-
Verlooptijd
De tijd waarop de cookie verloopt. Dat is altijd de huidige tijd plus een aantal seconden, en dat wordt altijd op de volgende manier
aangegeven: time() + aantalseconden.
Als je als derde argument bijvoorbeeld time( ) + 3600*24*365 zet, dan blijft de cookie een jaar geldig en daarna is hij
verlopen.
Geef je cookies altijd een verlooptijd mee, anders ziet PHP het als een session-cookie en dan wordt de cookie gewist als de
browser wordt afgesloten.
-
Pad
Het pad van de plaats van de cookie, wordt meestal leeggelaten.
-
Domein
Meestal leeg, in dat geval moet de domeinopgave overeenkomen met het domein waaronder de webserver valt.
-
Secure
Dit kan alleen 0 of 1 zijn. Standaard is het 0, bij een beveiligde verbinding (HTTPS) moet het de waarde 1 krijgen.
Denk er goed om dat als je de opdracht setcookie( ) gebruikt, dat de eerste opdracht in het php-document moet zijn.
Als er output op het scherm verschijnt voor de cookie( )-opdracht moet worden uitgevoerd dan krijg je de volgende foutmelding:
Cannot send headers, headers already sent...
Een cookie verwijder je door alleen de naam als argument te gebruiken, dus m.b.v. de
opdracht setcookie("cookienaam");
Cookies lezen
Cookies lezen gebeurt door middel van de variabele $HTTP_COOKIE_VARS.
Dat is een array met alle cookies erin.
Stel dat bij een bezoek aan een site een cookie geplaatst is met de naam Leeftijd, en met de waarde 25.
Dan kunnen die gegevens op de volgende manier worden opgehaald:
$l = $HTTP_COOKIE_VARS["Leeftijd"] ;
De variabele $l krijgt dan de inhoud 25, dus de waarde die is opgeslagen in de cookie.
Kijken of een cookie bestaat doen we met de functie isset( ) (zie het volgende voorbeeld).
Voorbeeld:
Stel dat de bezoekers van je site moeten inloggen, en dat ze daarbij zelf een gebruikersnaam en wachtwoord mogen bedenken.
Dan kun je er voor zorgen dat de computer die gebruikersnaam en wachtwoord opslaat in een cookie, en dan hoeven die bij een
volgend bezoek niet te worden ingevoerd.
De gebruikersnaam en het wachtwoord worden m.bv. een formulier opgevraagd, en de eerste regels van het verwerkende script zijn dan
bijvoorbeeld als volgt:
<?php
$gebruiker = $_POST['naam'];
setcookie ("naam","$gebruiker",time( ) + 3600*24*7);
$ww = $_POST['wachtwoord'];
setcookie("wachtwoord","$ww",time( ) + 3600*24*7);
?>
Hierbij worden twee cookies opgeslagen: de cookies naam en wachtwoord, met de variabelen $gebruiker en $ww erin.
M.b.v. het volgende script worden de gebruikersnaam en het wachtwoord ingelezen:
if (isset($HTTP_COOKIE_VARS["naam"]) && isset($HTTP_COOKIE_VARS["wachtwoord"]))
{
$gebruiker = $HTTP_COOKIE_VARS["naam"];
$ww = $HTTP_COOKIE_VARS["wachtwoord"];
print ("Je gebruikersnaam is $gebruiker");
print ("en je wachtwoord is $ww");
}
else
{
echo "De gegevens kunnen niet in de cookies gevonden worden!";
}
?>
Hij kijkt eerst of de cookie 'naam' en de cookie 'wachtwoord' wel bestaan.
Als ze bestaan worden de gebruikersnaam en het wachtwoord afgedrukt.
19.6.9. Functies
Als je vaak hetzelfde stukje programma-code gebruikt is het handig er een functie van te maken.
Je kunt dat stukje code dan een naam geven, en je kunt het ook alleen met die naam "aanroepen".
De syntax voor het maken van een functie is als volgt:
function functienaam( )
{
opdrachten
}
We maken een functie voor het maken van een wachtwoord.
<?php
function maakwachtwoord()
{
$startwoord = "test";
$gecodeerdetekst = md5($startwoord);
$begin = rand (0, 32-9);
$wachtwoord = substr($gecodeerdetekst, $begin, 8);
print ("De gecodeerde tekst is: $gecodeerdetekst <br>");
print ("Er wordt begonnen met teken nummer: $begin<br>");
print ("Het wachtwoord is: $wachtwoord<br>");
}
maakwachtwoord();
?>
Toelichting:
Eerst wordt de functie maakwachtwoord gemaakt.
De opdracht $gecodeerdetekst = md5($startwoord); heeft tot gevolg dat de inhoud van $startwoord
(dat is hier "test") gecodeerd wordt, dat levert altijd een string op van 32 tekens.
De opdracht $begin = rand (0, 32-9); heeft tot gevolg dat $begin de waarde van een willekeurig getal
tussen 0 en 23 krijgt.
De opdracht $wachtwoord = substr($gecodeerdetekst, $begin, 8); heeft tot gevolg dat $wachtwoord de
inhoud krijgt van een substring met lengte 8 uit de gecodeerde string, en wel het gedeelte dat begint bij teken nummer $begin.
Dus als $begin de waarde 18 heeft bestaat $wachtwoord uit het 18de t/m het 25ste teken.
Daarna worden de waarden van de variabelen nog afgedrukt.
In de laatste regel voor ?> wordt de functie aangeroepen, en dan zie je dat het wachtwoord (en ook de gecodeerde tekst en get
startnummer) wordt afgedrukt.
Functies met parameters en een terugkeerwaarde.
We kunnen de wachtwoord-functie ook anders schrijven.
We kunnen de functie parameters meegeven. Die moet je dan tussen de haakjes, achter de functienaam zetten.
En je kunt er voor zorgen dat de functie een waarde oplevert, die je na het aanroepen van de functie kunt gebruiken.
Bij de vorige functie was het startwoord steeds test, en het wachtwoord bestond steeds uit 8 tekens.
Als je de functie op de volgende manier programmeert kun je het startwoord en de lengte van het wachtwoord zelf bepalen.
<?php
function maakwachtwoord($startwoord, $lengte)
{
$gecodeerdetekst = md5($startwoord);
$begin = rand (0, 32- $lengte - 1);
$wachtwoord = substr($gecodeerdetekst, $begin, $lengte);
return $wachtwoord;
}
$ww = maakwachtwoord("nieuwetest", 10);
print ("$ww<br>");
print ("***".$wachtwoord."xxx");
?>
Toelichting:
De functie wordt nu op een andere manier aangeroepen, het gaat nu met: $ww = maakwachtwoord("nieuwetest", 10);
$ww krijgt hierdoor de inhoud van de variabele die in de functiedefinitie achter return staat, dus het gemaakte
wachtwoord.
Verder staan er twee dingen tussen de haakjes achter maakwachtwoord, namelijk "nieuwetest" en 10
Dat heeft tot gevolg dat, als de functie wordt uitgevoerd, de variabele $startwoord als inhoud "nieuwetest" krijgt, en de
variabele $begin krijgt als waarde 10
Het startwoord, en het beginnummer kun je dus nu buiten de functie bepalen.
Verder kun je het wachtwoord nu ook buiten de functie om gebruiken, omdat het m.b.v. return doorgegeven wordt.
De andere variabelen, die in de functie gebruikt worden, worden niet doorgegeven.
Dat merk je aan de laatste regels:
De opdracht print ("$ww<br>"); heeft wel tot gevolg dat het nieuwe wachtwoord wordt
afgedrukt.
Maar bij de opdracht print ("***".$wachtwoord."xxx"); wordt alleen ***xxx afgedrukt, en geen
wachtwoord, de variabele wachtwoord is buiten de functie zijn waarde weer kwijt!
Als je dat niet wilt, dan kun je dat voorkomen door voor de definitie van de functie de opdracht
global $wachtwoord; te zetten. In dat geval heeft de variabele $wachtwoord in de functie en
erbuiten dezelfde inhoud.
|