Aantekeningen PHP
String: words or characters
Integer: Whole numbers
Float: Decimals
Boolean: True or False
Declaring an array
$cardDeck = array();
Defining a constant (global)
define("NUMBER_WEEK_DAYS", 7);
== Gelijk aan (waarde)
=== Identiek aan (waarde en type)
!= Niet gelijk aan (waarde)
<> Niet gelijk aan (waarde)
!== Niet identiek aan (waarde en type)
< Kleiner dan
> Groter dan
<= Kleiner dan of gelijk aan
>= Groter dan of gelijk aan
&& (AND) operator
|| (OR) operator
Voorbeeld
$sVoornaam = 'Joren';
$sAchternaam = 'de Wit';
$x = 1;
$y = 2;
$z = 3;
$sNaam = $sVoornaam.' '.$sAchternaam;
echo $sNaam';
echo $x.$y.$z;
Output:
Joren de Wit123
Voorbeeld
$x = 6;
$y = 8;
if($x > 5 && $y < 10)
{
echo '$x is groter dan 5 en $y is kleiner dan 10';
}
Output:
$x is groter dan 5 en $y is kleiner dan 10
Switch statement
$x = 10;
switch(true)
{
case $x > 10 :
echo '$x is groter dan 10';
break;
case $x == 10 :
echo '$x is gelijk aan 10';
break;
case $x < 10 :
echo '$x is kleiner dan 10';
break;
default :
echo '$x voldoet niet aan een van de genoemde voorwaarden';
}
$x is gelijk aan 10
Array
$aFruit = array('appel', 'peer', 'banaan', 'kiwi');
echo 'pre>'.print_r($aFruit, true).'/pre>';
uitkomst hieronder:
Array
(
[0] => appel
[1] => peer
[2] => banaan
[3] => kiwi
)
Die print_r() is een functie om de inhoud van een array weer te geven. Later in deze tutorial zullen we dat nog terugzien, voor nu gebruiken we het gewoon.
nog1, marr dan net anders :)
Fruitsoorten:appel
peer
banaan
kiwi
2 voorbeelden van arrays, voorbeeld 1
$aFruitAantallen = array (
'appel' => 10,
'peer' => 0,
'banaan' => 4,
'kiwi' => 12 );
echo '
Fruit en aantallen:';
foreach($aFruitAantallen as $sFruit => $iAantal)
{
echo $sFruit.': '.$iAantal.'
';
}
Output
Fruit en aantallen:
appel: 10
peer: 0
banaan: 4
kiwi: 12
voorbeeld 2
$aFruit = array();
$aFruit[] = 'appel';
$aFruit[] = 'peer';
echo '
'.print_r($aFruit, true).'
';
Output
Array
(
[0] => appel
[1] => peer
)
We beginnen met het aanmaken van een lege array $aFruit. Vervolgens voegen we daar op bovenstaande manier twee nieuwe waarden aan toe. Omdat we geen sleutel meegeven zal PHP zelf sleutels toekennen.
Een andere manier is door het gebruik van de functie
array_push(). Over functies komen we later nog te spreken, dus neem dit voorbeeld gewoon voor lief:
$aFruit = array();
$aFruit[] = 'appel';
$aFruit[] = 'peer';
array_push($aFruit, 'banaan', 'kiwi');
echo 'pre>'.print_r($aFruit, true).'/pre';
Output
Array
(
[0] => appel
[1] => peer
[2] => banaan
[3] => kiwi
)
$aFruitAantallen = array();
$aFruitAantallen['appel'] = 10;
$aFruitAantallen['peer'] = 0;
$aFruitAantallen['banaan'] = 4;
$aFruitAantallen['kiwi'] = 12;
echo 'pre\'.print_r($aFruitAantallen, true).'/pre\';
Array
(
[appel] => 10
[peer] => 0
[banaan] => 4
[kiwi] => 12
)
Multidimensionale arrays
$aVakantieBestemmingen = array (
'Wintersport' => array (
'Westendorf',
'Gerlos',
'Kitzbühl',
'Mayerhofen'
),
'Zonvakantie' => array (
'Curacao',
'Spanje',
'Italië',
'Brazilië'
)
);
echo 'pre'.print_r($aVakantieBestemmingen, true).'pre'; (bij pre natuurlijk haakjes)
Array
(
[Wintersport] => Array
(
[0] => Westendorf
[1] => Gerlos
[2] => Kitzbühl
[3] => Mayerhofen
)
[Zonvakantie] => Array
(
[0] => Curacao
[1] => Spanje
[2] => Italië
[3] => Brazilië
)
)
echo 'De wintersport in '.$aVakantieBestemmingen['Wintersport'][3].' was geweldig, maar ik ga volgend jaar toch liever naar '.$aVakantieBestemmingen['Zonvakantie'][1].'.';
Output
De wintersport in Mayerhofen was geweldig, maar ik ga volgend jaar toch liever naar Spanje.
En nu met for loop
$aVakantieBestemmingen = array (
'Wintersport' => array (
'Westendorf',
'Gerlos',
'Kitzbühl',
'Mayerhofen'
),
'Zonvakantie' => array (
'Curacao',
'Spanje',
'Italië',
'Brazilië'
)
);
foreach($aVakantieBestemmingen as $sSoort => $aLocaties)
{
echo '
'.$sSoort.'';
foreach($aLocaties as $sLocatie)
{
echo $sLocatie.'
';
}
}
?>
Tenslotte is er nog het toevoegen van nieuwe waarden aan een multidimensionale array. Ook dat kan op verschillende manieren:
Code
// Lege array aanmaken
$aVakantieBestemmingen = array ();
// Array toevoegen
$aVakantieBestemmingen['Wintersport'] = array (
'Westendorf',
'Gerlos',
'Kitzbühl',
'Mayerhofen'
);
--Losse entries invoegen
$aVakantieBestemmingen['Zonvakantie'][] = 'Curacao';
$aVakantieBestemmingen['Zonvakantie'][] = 'Spanje';
--Losse entries invoegen met array_push
array_push($aVakantieBestemmingen['Zonvakantie'], 'Italië', 'Brazilië');
echo 'pre'.print_r($aVakantieBestemmingen , true).'/pre';
Output
Array
(
[Wintersport] => Array
(
[0] => Westendorf
[1] => Gerlos
[2] => Kitzbühl
[3] => Mayerhofen
)
[Zonvakantie] => Array
(
[0] => Curacao
[1] => Spanje
[2] => Italië
[3] => Brazilië
)
)
Functies
De syntax van elke functie ziet er als volgt uit:
Code
function functieNaam ( parameters )
{
--/ Body
}
// Functie definiëren
function geefWeer()
{
echo 'Hello World!';
}
// Functie aanroepen
geefWeer();
// Functie definiëren
function geefTerug()
{
return 'Hello World!';
}
// Functie aanroepen
echo geefTerug();
?>
// Functie definiëren
function geefWeer($sString)
{
echo $sString.'
';
}
// Functie aanroepen
$sTekst = 'Hello World!';
geefWeer($sTekst);
geefWeer('Een tweede tekst');
?>
Output
Hello World!
Een tweede tekst
$aTestArray bevat 4 items.
Een controle functie...
Functies zijn bij uitstek geschikt om te gebruiken voor de controle van variabelen.
Stel dat we van een gebruikersnaam willen weten of deze wel langer dan 3 tekens is en niet begint met een A dan zouden we het volgende kunnen doen:
Code
if(strlen($sGebruikersnaam) > 3 && substr($sGebruikersnaam, 0, 1) != 'A')
{
echo 'Gebruikersnaam is goed';
}
else
{
echo 'Gebruikersnaam ongeldig!';
Deze gebruikersnaam is geldig!
btw
Totaal excl. BTW: 50.35
Totaal incl. BTW: 60.92
// Functie definiëren
function calcTotaal($aBedragen, $bBtw = false)
{
// Totaal van prijzen berekenen
$fTotaal = array_sum($aBedragen);
// Controleren of BTW berekend moet worden
if($bBtw)
{
// Het totaal * 1.21 (21% is het nu:)(19% BTW)
$fTotaal *= 1.21;
}
// Geef het berekende totaal terug
return number_format($fTotaal, 2);
}
// Functie aanroepen
$aBedragen = array(5.45, 9.95, 34.95);
echo 'Totaal excl. BTW: '.calcTotaal($aBedragen).'
';
echo 'Totaal incl. BTW: '.calcTotaal($aBedragen, true).'
';
Zoals we in bovenstaande functie kunnen zien, definiëren we een optionele parameter door de parameter een standaardwaarde toe te kennen. Als deze parameter niet opgegeven is, krijgt hij de standaardwaarde toegewezen. Is hij wel opgegeven, dan behoudt hij zijn eigen waarde.
Verder zien we in de calcTotaal() functie het gebruik van de PHP functie array_sum(). Deze functie telt alle waarden in de array bij elkaar op en geeft het totaal terug.
Daarnaast zien we nog het gebruik van de operator
*=. Deze operator doet precies hetzelfde als:
$fTotaal = $fTotaal * 1.19;
Tenslotte gebruiken we nog de functie
number_format() om de weergave van de bedragen een beetje op te maken. Aan een bedrag met 4 cijfers achter de komma hebben we natuurlijk niet zo veel.
Form
Het method attribuut heeft twee mogelijke waarden: get en post. In het geval van GET worden de ingevulde waarden meegezonden in de URL.
Bij de POST methode worden de variabelen onzichtbaar naar de andere pagina verzonden.
form action="verwerk.php" method="post"
p
label for="voornaam">Voornaam:
input type="text" name="voornaam" id="voornaam"
p
label for="achternaam">Achternaam:/label
input type="text" name="achternaam" id="achternaam"
p
input type="submit" value="Verzenden"
form
include '../../inc/stats.php';
// Controle of een formulier gepost is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Arrays declareren voor opslag van fouten en data
$aErrors = array();
$aData = array();
// Velden die in het formulier aanwezig moeten zijn
$aFormulierVelden = array('voornaam', 'achternaam');
// Alle formuliervelden doorlopen
foreach($aFormulierVelden as $sVeld)
{
// Controleren of er een waarde voor het formulierveld bestaat
if(isset($_POST[$sVeld]))
{
// Spaties aan begin en eind weghalen
$sValue = trim($_POST[$sVeld]);
// Controle of variabele gevuld is
if($sValue == '')
{
// Foutmelding toevoegen
$aErrors[] = 'Je bent vergeten om '.$sVeld.' in te vullen';
}
// Ingevulde waarden aan data array toevoegen
$aData[$sVeld] = $sValue;
}
else
{
$aErrors[] = 'Het veld '.$sVeld.' is niet gepost!';
}
}
// Controleren of er geen fouten opgetreden zijn
if(empty($aErrors))
{
// Formulier succes!
echo 'p Je hebt het formulier succesvol ingevuld! De volgende gegevens zijn bekend:/p>';
echo 'p Voornaam: '.$aData['voornaam'].'
';
echo 'Achternaam: '.$aData['achternaam'].'/p>';
}
else
{
// Fouten opgetreden: weergeven en terug naar formulier
header('Refresh: 3; url=formulier.php');
foreach($aErrors as $sError)
{
echo 'p style="color:red">'.$sError.'/p';
}
}
}
else
{
// Verwerk.php mag nog niet bezocht worden, terug naar het formulier
header('Location: formulier.php');
}
}
Superglobals
PHP kent enkele vooraf gedefinieerde variabelen, de zogenaamde superglobals.
Deze variabelen zijn arrays die afhankelijk van de situatie allerlei waarden kunnen bevatten.
Deze superglobals zijn overal en in elk script beschikbaar.
Dit wil echter niet zeggen dat ze ook altijd gevuld zijn, dat hangt van de situatie af.
De superglobals waarin ik in deze tutorial aandacht zal besteden zijn:
• $_GET
• $_POST
• $_FILES
• $_SERVER
• $_COOKIE
• $_REQUEST
Naast deze lijst zijn er nog twee variabelen: $_ENV en $GLOBALS.
Deze gebruik je echter (bijna) nooit
$_GET
Iedereen heeft wel eens een url van een website gezien die er bijvoorbeeld zo uit zag: http://www.eensite.nl/index.php?show=bericht&id=10.
Wellicht dat je je ook ooit al eens afgevraagd hebt wat die ? en & in de url nou precies doen en dat je al een vermoeden had
dat dit variabelen zijn.
Dan zat je helemaal op het juiste spoor.
Deze zogenaamde GET variabelen zijn variabelen die aan de url meegegeven kunnen worden en die we later in ons script kunnen gebruiken.
In bovenstaand voorbeeld heb je dus beschikking over de GET variabelen 'show' en 'id'.
In ons script zijn deze variabelen te vinden in de superglobal $_GET.
Deze variabele is een array waarin alle variabelen uit de url opgeslagen zijn.
Met het volgende scriptje in onze index.php zal ik laten zien hoe dit werkt:
Code: index.php
if(isset($_GET['naam'], $_GET['leeftijd']))
{
echo 'Hoi '.$_GET['naam'].', jij bent '.$_GET['leeftijd'].' jaar.';
}
else
{
echo 'Een van de benodigde GET variabelen bestaat niet';
}
Als we het script nu aan zouden roepen met de volgende url:
index.php?naam=Kees&leeftijd=42, zou dat de volgende output geven:
Output
Hoi Kees, jij bent 40 jaar.
Allereerst controleren we met isset() of de twee GET variabelen wel bestaan.
Dit moeten we altijd doen met variabelen die uit de url komen,
het wordt namelijk lastig werken met variabelen die niet bestaan.
Vervolgens gebruiken we de variabelen om wat informatie op het scherm te zetten.
Om te laten zien dat de controle of de variabelen bestaan werkt,
roepen we de pagina nu als volgt aan: index.php?naam=Kees.
Dit is de output die we nu krijgen:
Output
Een van de benodigde GET variabelen bestaat niet
$_POST
De werking van deze variabele hebben we in het vorige hoofdstuk al kunnen aanschouwen.
Kort gezegd bevat deze variabele de waarden die met behulp van een formulier gepost zijn.
Een formulier met als method 'post' is tevens ook de enige manier om deze variabele te vullen.
$_FILES
Zoals je wellicht wel weet is het met een combinatie van HTML en PHP ook mogelijk om bestanden naar de webserver te uploaden.
Denk bijvoorbeeld aan het toevoegen van een bijlage aan je webmail of het toevoegen van een filmpje op youtube.
Om bestanden te kunnen uploaden heb je in je formulier een veld van het type 'file' nodig.
Bovendien moet je ervoor zorgen dan je ook het
'enctype' attribuut aan de
Hier zien we een voorbeeld van een formuliertje om een bestand te uploaden.
Als action heb ik dit keer een # ingevuld, dan worden de waarden uit het formulier naar dezelfde pagina gestuurd.
Verder zien we dat de method weer op 'post' staat en dat we nu een enctype meegegeven hebben.
Omdat het formulier de waarden naar dezelfde pagina verstuurd, zien we ook dat de verwerking van het formulier in dit scriptje staat.
In dit geval bestaat het uit niet meer dan het weergeven de de inhoud van $_FILES op het scherm.
Een voorbeeld van output na uploaden van een bestand zou de volgende kunnen zijn:
Output
Array
(
[userfile] => Array
(
[name] => sprinkhaan.jpg
[type] => image/jpeg
[tmp_name] => C:\wamp\tmp\phpD23E.tmp
[error] => 0
[size] => 45194
)
)
We zien dat $_FILES een multidimensionale associatieve array is.
De eerste sleutel bevat de naam van het input veld waarin we de bestandsnaam kozen.
De waarde die bij deze sleutel hoort is weer een array met gegevens over het bestand dat geupload is.
Een kort overzichtje:
• name - De bestandsnaam van het geuploade bestand
• type - Het MIME type van het bestand. Dit geeft aan wat voor soort bestand het is
• tmp_name - Elk geupload bestand komt in de tmp map onder een tijdelijke naam te staan
• error - Normaal gesproken 0, een andere waarde als het uploaden niet lukt
• size - De bestandsgrootte in bytes
Nu heb ik het telkens over het bestand dat geupload is,
maar in werkelijkheid is dat nog niet het geval. Het is door de HTML code van jouw computer naar een tijdelijke locatie verhuist.
Nu zul je met PHP het uploaden van het bestand af moeten ronden.
$_SERVER
Ook van deze superglobal hebben we in het vorige hoofdstuk gebruik gemaakt. In deze variabele is informatie over de server
en de manier waarop met de server gecommuniceerd is, opgeslagen. Laten we eens kijken wat we er allemaal in vinden:
Code:
?php
echo '
'.print_r($_SERVER, true).'
';
?
Output
Array
(
[HTTP_HOST] => localhost
[HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11
[HTTP_ACCEPT] => text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
[HTTP_ACCEPT_LANGUAGE] => en-gb,en;q=0.5
[HTTP_ACCEPT_ENCODING] => gzip,deflate
[HTTP_ACCEPT_CHARSET] => ISO-8859-1,utf-8;q=0.7,*;q=0.7
[HTTP_KEEP_ALIVE] => 300
[HTTP_CONNECTION] => keep-alive
[HTTP_COOKIE] => mtrack=119762117M1932826833; PHPSESSID=g5fiq9d9udq9vanpvuosb0dsn4
[PATH] => C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\QuickTime\QTSystem\;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
[SystemRoot] => C:\WINDOWS
[COMSPEC] => C:\WINDOWS\system32\cmd.exe
[PATHEXT] => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
[WINDIR] => C:\WINDOWS
[SERVER_SIGNATURE] =>
[SERVER_SOFTWARE] => Apache/2.2.6 (Win32) PHP/5.2.5
[SERVER_NAME] => localhost
[SERVER_ADDR] => 127.0.0.1
[SERVER_PORT] => 80
[REMOTE_ADDR] => 127.0.0.1
[DOCUMENT_ROOT] => C:/wamp/www/
[SERVER_ADMIN] => webmaster@localhost
[SCRIPT_FILENAME] => C:/wamp/www/index.php
[REMOTE_PORT] => 4819
[GATEWAY_INTERFACE] => CGI/1.1
[SERVER_PROTOCOL] => HTTP/1.1
[REQUEST_METHOD] => GET
[QUERY_STRING] =>
[REQUEST_URI] => /index.php
[SCRIPT_NAME] => /index.php
[PHP_SELF] => /index.php
[REQUEST_TIME] => 1199267859
)
Ik zal niet elke waarde uit deze array bespreken, enkel de variabelen die je regelmatig gebruikt zal ik kort toelichten.
• HTTP_HOST - Geeft de hostnaam weer. Dus bijvoorbeeld 'localhost' of 'phphulp.jorendewit.nl'
• REMOTE_ADDR - Het ip adres van de bezoeker van het script
• DOCUMENT_ROOT - Geeft het pad waarin het script zich bevind, relatief vanaf de root van de server
• REQUEST_METHOD - Geeft de manier waarop de pagina is aangeroepen. Meestal GET of POST.
• REQUEST_URI - De url waarmee het script aangeroepen is, inclusief GET variabelen
• SCRIPT_NAME - De bestandsnaam van het uitgevoerde script
De variabelen uit deze array gebruik je in de meeste gevallen om bijvoorbeeld te controleren of een formulier gepost is,
te controleren hoe het script aangeroepen is, of om gegevens over de bezoeker te achterhalen.
Meestal kun je variabelen uit deze array wel combineren tot een gewenst resultaat.
$_SESSION
We hebben nu de werking van onder andere de $_GET en $_POST superglobal gezien,
en hoe we daarmee variabelen van buitenaf in een script kunnen krijgen. Maar wellicht dat je je wel eens afgevraagd hebt
of er niet een manier is om variabelen beschikbaar te maken op een pagina zonder dat je deze via een formulier verstuurd
of in de url zet.
Dat is nou precies waar je binnen PHP een sessievariabele voor kunt gebruiken. Deze kun je aanmaken op pagina1 en vervolgens op pagina2 weer uitlezen.
De voorwaarde is dat je elke pagina waarop je sessievariabelen wilt gebruiken, begint met session_start().
Sessievariabelen worden tijdelijk opgeslagen op de server en zijn te gebruiken met de superglobal $_SESSION.
Code: pagina1.php
?php
// Elke pagina waar we sessies gebruiken, beginnen met met session_start()
session_start();
// Declareren van sessievariabelen
$sNaam = 'Kees';
$_SESSION['naam'] = $sNaam;
$_SESSION['leeftijd'] = 42;
?>
Code: pagina2.php
?php
// Elke pagina waar we sessies gebruiken, beginnen met met session_start()
session_start();
// Uitlezen van de sessievariabele
echo 'Hoi '.$_SESSION['naam'].' jij bent '.$_SESSION['leeftijd'].' jaar';
?>
Output
Hoi Kees jij bent 42 jaar
Een sessievariabele zal beschikbaar zijn, zolang de sessie nog actief is. Hoe lang dat is, is afhankelijk van de instellingen van de server.
Het zou bijvoorbeeld 1 dag kunnen zijn, maar het is ook mogelijk dat de sessie bij het afsluiten van de browser al gesloten wordt.
In het volgende hoofdstuk zal ik dieper ingaan op het gebruik van sessievariabelen en zullen we een eerste loginscriptje schrijven.
$_COOKIE
Naast het gebruik van sessievariabelen om gegevens op meerdere paginas te kunnen gebruiken,
kent PHP ook het gebruik van cookies voor dit doeleinde. Het verschil met sessievariabelen is dat cookies op de PC van de bezoeker opgeslagen worden.
Ze kunnen dus handmatig verwijderd en gewijzigd worden en derhalve is het niet veilig om er gevoelige informatie in te zetten.
Cookies aanmaken
Het aanmaken van een cookie doen we met de functie setcookie().
Code: pagina1.php
?php
// De naam die we in een cookie op willen slaan.
$sNaam = 'Kees';
// Het aanmaken van de cookie met setcookie()
setcookie('cookieNaam', $sNaam, time()+3600);
?>
De eerste parameter van de setcookie() functie is de naam van de cookie.
Daaraan kunnen we hem straks herkennen. Daarna volgt de inhoud van de cookie, in dit geval de naam,
en tenslotte geven we het tijdstip waarop de cookie moet verlopen, op.
Een cookie is net als een sessie namelijk maar een bepaalde tijd geldig, in dit geval dus een uur.
Uitlezen van de cookie
Voor het uitlezen van de cookie kunnen de de superglobal $_COOKIE gebruiken.
Code: pagina2.php
?php
echo 'Welkom terug '.$_COOKIE['cookieNaam'];
?>
Output
Welkom terug Kees
Cookies gebruik je in de meeste gevallen om specifieke instellingen van een gebruiker langere tijd te bewaren.
Bijvoorbeeld het automatisch inloggen als een gebruiker op een website terugkeert, wordt door middel van cookies gedaan.
$_REQUEST
De laatste superglobal die ik wil bespreken is $_REQUEST. Deze superglobal bevat een combinatie van de $_GET. $_POST en $_COOKIE arrays.
In plaats van een voorbeeld te geven, wil ik het gebruik van deze juist variabele afraden.
Deze variabele heeft totaal geen meerwaarde boven de losse superglobals en kan alleen maar voor verwarring zorgen.
Met deze superglobal weet je namelijk niet meer niet meer of een waarde nu uit de GET, POST of COOKIE array afkomstig is.
Naast onduidelijkheid kan dit ook een potentieel veiligheidslek met zich meebrengen. Gewoon niet gebruiken dus.
Sessies nader bekeken: een eerste loginscript
In het vorige hoofdstuk hebben we een uitleg van het gebruik van superglobals in PHP gezien.
In het vorige hoofdstuk hebben we een uitleg van het gebruik van superglobals in PHP gezien.
Ook hebben we daar kennis gemaakt met de $_SESSION superglobal waarmee we variabele op meerdere paginas beschikbaar konden maken.
We zullen nu kijken naar hoe we deze manier kunnen toepassen in een zeer eenvoudig loginscript. Het script dat we schrijven is een loginscript voor 1 gebruiker met wachtwoord en zal gebruik maken van sessies.
De HTML code
Laten we maar weer beginnen met de HTML code van het loginformulier. We hebben nu twee inputvelden nodig waarin we een gebruikersnaam en wachtwoord in kunnen vullen.
De typen die we voor deze velden gebruiken zijn respectievelijk 'text' en 'password'.
Code (php)
Inloggen
Deze code spreekt redelijk voor zich. De action van het formulier laten we verwijzen naar login.php, het script waarmee we het login formulier verwerken.
"
?php
session_start();
//Gebruikersnaam en wachtwoord instellen
$sGebruikerControle = 'admin';
$sWachtwoordControle = 'voorbeeld';
// Controle of het formulier verzonden is
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// Controle of benodigde velden wel ingevuld zijn
if(isset($_POST['user'], $_POST['pass']))
{
// Overbodige spaties verwijderen
$sGebruiker = trim($_POST['user']);
$sWachtwoord = trim($_POST['pass']);
// Gebruikersnaam en wachtwoord controleren
if($sGebruiker == $sGebruikerControle && $sWachtwoord == $sWachtwoordControle)
{
// Juiste gebruikersnaam en wachtwoord: inloggen!
$_SESSION['logged_in'] = true;
$_SESSION['gebruiker'] = $sGebruiker;
// Doorsturen en melding geven
header('Refresh: 3; url=beveiligd.php');
echo 'Je bent succesvol ingelogd. Je wordt doorgestuurd.';
}
else
{
// Terugsturen en foutmelding geven
header('Refresh: 3; url=login_form.php');
echo 'Deze combinatie van gebruikersnaam en wachtwoord is niet juist!';
}
}
else
{
header('Refresh: 3; url=login_form.php');
echo 'Een vereist veld bestaat niet!';
}
}
else
{
// Terug naar het formulier
header('Location: login_form.php');
exit();
}
?
Allereerst beginnen we deze pagina ook weer met
session_start(),
we werken immers weer met sessievariabelen.
Vervolgens controleren we of de variabele
$_SESSION['logged_in'] bestaat en of de waarde van deze variabele niet gelijk is aan FALSE.
Als een van deze voorwaarden wel het geval is,
sturen we de gebruiker met een
header() direct door naar het login formulier
en gebruiken we
exit() om de verdere uitvoer van het script te stoppen.
Mocht de bezoeker wel ingelogd zijn, dan wordt niet voldaan aan het if-statement en wordt de rest van het script uitgevoerd.
In ons geval houdt dat het geven van een welkomstbericht in. In dat bericht gebruiken we
$_SESSION['gebruiker']
om de ingelogde gebruiker persoonlijk aan te spreken.
Op elke pagina waarop je enkel ingelogde gebruikers toegang wilt geven, plaats je dus regel 1-10 uit dit voorbeeld boven aan het script.
Op die manier heb je altijd de zekerheid dat de pagina alleen aan ingelogde gebruikers getoond wordt.
Inspringen
Een eenvoudige methode om je code overzichtelijk te houden is door op vaste plaatsen en consequent in te springen.
Debuggen
Debuggen: het oplossen van PHP fouten
Het debuggen van je script bestaat dan ook uit 3 stappen:
Constateren van een fout
De fout lokaliseren in je script
Oplossen van de fout
Voordat we hier echter mee beginnen, eerst iets anders. We willen immers wel dat PHP ook daadwerkelijk foutmeldingen gaat geven als er iets fout gaat.
Daarom zetten we deze twee regels boven aan onze php scripts:
Code
?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
?>
De eerste regel zorgt ervoor dat fouten überhaupt weergegeven worden, terwijl de tweede regel ervoor zorgt dat alle mogelijke foutmeldingen op het scherm getoond worden.
Het kan zijn dat de display_errors instelling in de php.ini uitgeschakeld staat. Hoewel we hem in ons script met ini_set() aan zetten,
wordt dit pas gedaan als het script uitgevoerd wordt. Eventuele syntax fouten in het script worden dus nog niet weergegeven.
Om dat voor elkaar te krijgen, plaatsen we een .htaccess bestandje met de volgende regels in de root (public_html, www of
htdocs map van onze website:
# Display Errors inschakelen
php_flag display_errors on
Nu worden alle foutmeldingen netjes op het scherm getoond.
De eerste stap, het constateren van de fout, is de minst lastige. PHP zal namelijk een foutmelding op het scherm zetten
en al dan niet het script stoppen. De syntax van de standaard PHP foutmelding ziet er er als volgt uit:
[fout level]: [bericht] in [bestand] on line [regelnummer]
De tweede stap zal in de meeste gevallen de lastigste zijn.
In de foutmelding wordt altijd een bestand en regelnummer gegeven waar de fout optreedt.
Dat geeft ons een indicatie van waar iets fout gaat en gecombineerd met het bericht leidt ons dat meestal wel naar de fout
Ik zal nog enkele links geven naar sites of tutorial die meer informatie geven over deze verschillende onderwerpen:
PHP
http://www.php.net/
PHP.net Handleiding
Foutafhandeling in PHP
PHP Contactformulier met Swift Mailer
Filters in PHP 5
HTML
W3Schools HTML Tutorial
W3Schools XHTML Tutorial
CSS
W3Schools CSS Tutorial
Quirksmode artikelen over CSS
Websitemaken.be HTML en CSS Tutorials
Databases & SQL
SQL Beginners handleiding
W3Schools CSS Tutorial
PDO - Verbinden met verschillende databases
MySQL Handleiding
PostgreSQL Handleiding
Voor de opbouw van deze tutorial heb ik een voorbeeld genomen aan enkele andere tutorials voor beginnende programmeurs. Daarbij het ik onder andere gebruik gemaakt van:
PHP Programmeren door Arjan Kapteijn
Beginnen met PHP door Robert Deimain
Een uitgebreide PHP Cursus door Mirax
herhaling 62-140
$host = $_SERVER['HTTP_HOST'] - geeft de dir aan waar die op dat moment is
$images = $host.'/images';
header();
$status = true;
$redirect = www.nu.nl
header ('Location:' '$redirect'); - >
obs - output buffer start
ob_start(); (als je dit bovenaan zet voor de html code, kan je wel header doen bv,
na een html code, om te starten, oneraan, ob_end_clear() ob_end_flush())
$_SERVER[''REMOTE_ADDR];
$client_ip = $_SERVER['HTTP_CLIENT_IP'];
$x_forw = $_SERVER['HTTP_X_FORWARDED_FOR'];
$remote_ip = $_SERVER['REMOTE_ADDR'];
if(!empty($client_ip)){
$ip_address = $client_ip;
}else if (!empty($x_forw)){
$ip_address = $x_forw;
}else $ip_address = $remote_addr;
}
67-browercap
htmlentities om te verkomen dat een user in een input field, bv iframe scr"sniff.php">
$day = htmlentities($GET['date']);
etc
session zijn gesaved op de server en cookie kan je makkelijker verander,
session beter dus,cookies zal wel sneller zijn, not sure
?php
session_start();
$_SESSION['name']='Alex';
unset - bv logout
session destroy(); alle session die op at moment erzijn, worden gedestroyed
bv unset($_SESSION['username']);
altijd session_start(); bovenaan.
cookies voor lange tijd opslaan, jaar, maanden. en session is weg als je browser hebt geclosed.
setcookie ('username','Alex','60'); of ipv 60 time()+10 - 10 sec na de tijd op dat moment, moet wel eerst variable aanmaken
echo $_COOKIE['username'];
?>
deleting cookie kan met bv
setcookie ('username', 'Alex', time()-1000) - 1000 sec, dus geen cookie meer
fopen()
r eading
w rite
a ppend (toevoegen)
$handle = fopen('name.txt', 'w');
(w overwirite it, als je het nog een keer doet apart (dus als de file niet geclosed is
)., wel werkt het als je in 1 file, 2 regels doet met 2 namen)
fwrite($handle, 'Alex', "/n"); dit is volgende regel "/n"
fwrite($handle, 'Piet'); (by krijg je wel 2 namen, want het is in 1 file)
fclose($handle); close de file
je hebt ook nog file
$count = 1;
$lees = file('name.txt');
$count = count($lees)
// tel het aantal namen
foreach ($lees as $fname){
echo trim($fname);
if ($count<$lees){
echo ','
} count++;
}
je hebt ook fread
$filename = 'names.txt';
$handdle = fopen($filename, 'r');
echo fread($handle, filesize($filename));
2 de argument is de size, dus 1000 is dan 1000 bytes(of char ff chken - dus filesize)
$datain = fread($handle, filesize($filename));
$names_array = explode(',', $datain);
// (',','alex, billy, dale'); er komt dus een komma en de 3 namen bij names_array
foreach ($names_array as $name){
echo $name.'br>';
(of echo #names_array[0];)
}
implode is gewoon in een array war bij doen (importeren).
$names_array2 = array('Alex', 'Billy', 'Dale');
$string = implode(',', $names_array2);
voorbeeld
implode & explode
htmlentities - bij input, sec tegen form, om geen iframe strong etc te kunnrn invorren
hfd73 (New boston tutorial)
sesion_start()
logout ->unset(session['user'])
setcookie('username',time()+10)
of -10
spatie
$handdle = fopen('name.txt', 'w';)
fwrite('Alex', "\n");
fclose($haddle);
file()
explode
implode -
$zin = array('Alex', 'Piet');
$STRING = IMPLODE(' wat wil je toevoegen', $zin)
opendir
readdir - 83
file_exists()
unlink(85)
enctype="multipart/form-data
MOVE_UPLOAD_FILE
fread
md5 encrypt
simplexml_load='';
xml data bv bij gdata.youtube/feeds/
108 databaseapi
$conn_error = 'Could not connect';
mysql_connect($mysql_host, $mysql_user, $mysql_pass) or die($conn_error);
in de nieuwe versie van PHP word mysql niet meer ondersteund,
mysqli wel, maar heeft wat beveiligingsporblemen
mysql_select_db('databasenaam') or die('Could not connect');
echo 'Connected';
if(mysql_connect($mysql_host, $mysql_user, $mysql_pass || mysql_select_db('databasenaam'){
die($conn_error);
} else {
echo 'Connected';
}
dit kan je saven als connect.inc.php
en dan kan je bij andere pagina
require 'connect.inc.php';
$querry = "SELECT 'food', 'calories' FROM 'food' (X) ORDER BY 'id'";
(x)- je kan nog : WHERE 'healthy_unh'='h' AND 'cal'='100'
if ($query_run = mysql_query($Query)){
echo 'Qury succes'.;
}else{
echo 'Queryy failed';
}
ORDER BY 'id' DESC (achte stervoren - ASC)
verder heb je nog:
mysql_num_rows($Querry_run)==NULL){
}
html value kan ook:
form action='index.php' method="GET">
select name="uh">
option value="U">unhealthy/option>
option value="H">healthy/option>
/select>
/form>
sql inj, GET -> als je invult in een GET form
'healty'= '' OR ''=''
120-123
SELECT '','' FROM '' ORDER BY '' DESC LIMIT 2
UPDATE -SET
DELETE FROM - WHERE
JOIN ON (LEFT, INNER, RIGHT)
global
INSERT INTO 'users' VALUES ('','alex','password','Alex','Garret')
eerste is prim key, is automatisch(key,username,paswoord,voornaam,achternaam)
$count=mysql_result($querry, 0, 'count');
database tabbelen
people - ALEX,DALE
pets -
met meerdere tabbeleln kan je dit doen
SELECT 'people'.'name', 'pets'.'pet' FROM ''people' LEFT JOIN 'pets' ON 'people'.'id'='pets'.'people_id'
LIKE
LIKe jan je gebruikine om bv te zoeken, zoek is like ....
wildcard = % , zoek voor Gar% = dus alles at begint met GAR, kan ook %ar%, dan alles met ar erin
en kan ook NOT LIKE
vs SELECT ...FROM...WHERE...LIKE..
mysql_real_escape_string - tegen sqlinjections - hfd 132
mysql_fetch_assoc
SELECT DISTINCT'' FROM '' (als je meerdere achternamen hebt en maar 1 wil laten zien)
passwoord 2 char, want md5 is 32 char
mysql_connect (..,..,..) || mysql_select_db()
$result = mysql_result()
ob_start()
$_SERVER['HTTP_REFERER']; de pagina waar we vandaan komen
input max leng
html
maxlength"";
strlen()
Date
$today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
$today = date("m.d.y"); // 03.10.01
$today = date("j, n, Y"); // 10, 3, 2001
$today = date("Ymd"); // 20010310
$today = date('h-i-s, j-m-y, it is w Day'); // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // it is the 10th day.
$today = date("D M j G:i:s T Y"); // Sat Mar 10 17:16:18 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:18 m is month
$today = date("H:i:s"); // 17:16:18
$today = date("Y-m-d H:i:s"); // 2001-03-10 17:16:18 (the MySQL DATETIME format)
$today =date(DATE_RFC2822) // Mon, 02 Oct 2017 20:58:52 +0000
Basic HTML Structure
<h> heading </h> Heading (h1 for largest to h6 for smallest)
<p> paragraph </p> Paragraph of Text
<b> bold </b> Make text between tags bold
<i> italic </i> Make text between tags italic
<a href="url"> link name </a> Create a link to another page or website
<div> ... </div> Divide up page content into sections, and applying styles
<img src="filename.jpg"> Show an image
<ul> <li> list </li> </ul> Unordered, bullet-point list
<br> Line Break (force a new line)
<span style="color:red"> red </span> Use CSS style to change text colour
Text Formatting
<h> ... </h> Heading (?= 1 for largest to 6 for smallest, eg h1)
<b> ... </b> Bold Text
<i> ... </i> Italic Text
<u> ... </u> Underline Text
<strike> ... </strike> Strikeout
<sup> ... </sup> Superscript - Smaller text placed below normal text
<sub> ... </sub> Subscript - Smaller text placed below normal text
<small> ... </small> Small - Fineprint size text
<tt> ... </tt> Typewriter Text
<pre> ... </pre> Pre-formatted Text
<blockquote> ... </blockquote> Text Block Quote
<strong> ... </strong> Strong - Shown as Bold in most browsers
<em> ... </em> Emphasis - Shown as Italics in most browsers
<font> ... </font> Font tag obsolete, use CSS. (*)
Section Divisions
<div> ... </div> Division or Section of Page Content
<span> ... </span> Section of text within other content
<p> ... </p> Paragraph of Text
<br> Line Break
<hr> Basic Horizontal Line
<hr> Tag Attributes:
size="?" Line Thickness in pixels
width="?" Line Width in pixels
width="??%" Line Width as a percentage
color="#??????" Line Colour (*)
align="?" Horizontal Alignment: left, center, right (*)
<nobr> ... </nobr> Line Break
Images
<img src="url" alt="text"> Basic Image
<img> Tag Attributes:
src="url" URL or filename of image (required!)
alt="text" Alternate Text (required!)
align="?" Image alignment within surrounding text (*)
width="??" Image width (in pixels or %)
height="??" Image height (in pixels or %)
border="??" Border thickness (in pixels) (*)
vspace="??" Space above and below image (in pixels) (*)
hspace="??" Space on either side of image (in pixels) (*)
Linking Tags
<a href="url"> link text </a> Basic Link
<a> Tag Attributes:
href="url" Location (url) of page to link to.
name="??" Name of link (name of anchor, or name of bookmark)
target="?" Link target location: _self, _blank, _top, _parent.
href="url#bookmark" Link to a bookmark (defined with name attribute).
href="mailto:email" Link which initiates an email (dependant on user's email client).
Lists
<ol> ... </ol> Ordered List
<ul> ... </ul> Un-ordered List
<li> ... </li> List Item (within ordered or unordered)
<ol type="?"> Ordered list type: A, a, I, i, 1
<ol start="??"> Ordered list starting value
<ul type="?"> Unordered list bullet type: disc, circle, square
<li value="??"> List Item Value (changes current and subsequent items)
<li type="??"> List Item Type (changes only current item)
<dl> ... </dl> Definition List
<dt> ... </dt> Term or phrase being defined
<dd> ... </dd> Detailed Definition of term
Tables
<table> ... </table> Define a Table
Tag Attributes:
border="?" Thickness of outside border
bordercolor="#??????" Border Colour
cellspacing="?" Space between cells (pixels)
cellpadding="?" Space between cell wall and content
align="??" Horizontal Alignment: left, center, right (*)
bgcolor="#??????" Background Colour (*)
width="??" Table Width (pixels or %) (*)
height="??" Table Height (pixels or %) (*)
<tr> ... </tr> Table Row within table
<th> ... </th> Header Cell within table row
<td> ... </td> Table Cell within table row
<td> Tag Attributes:
colspan="?" Number of columns the cell spans across (cell merge)
rowspan="?" Number of row a cell spans across (cell merge)
width="??" Cell Width (pixels or %) (*)
height="??" Cell Height (pixels or %) (*)
bgcolor="#??????" Background Colour (*)
align="??" Horizontal Alignment: left, center, right (*)
valign="??" Vertical Alignment: top, middle, bottom (*)
nowrap Force no line breaks in a particular cell
Frames
<frameset> ... </frameset> Define the set of Frames
<frameset> Tag Attributes:
rows="??,??, ..." Define row sizes & number of rows (size in pixels or %)
cols="??,??, ..." Define column sizes & number of columns (size in pixels or %)
noresize="noresize" User cannot resize any frames in frameset
<frame> ... </frame> Define a frame within the frameset
<frame> Tag Attributes:
src="url" Location of HTML File for a frame
name="***" Unique name of frame window
marginwidth="?" Horizontal margin spacing inside frame (pixels)
marginheight="?" Vertical margin spacing inside frame (pixels)
noresize="noresize" Declare all frameset sizes as fixed
scrolling="***" Can the user scroll inside the frame: yes, no, auto
frameborder="?" Frame Border: (1=yes, 2=no)
bordercolor="#??????" Border Colour (*)
<noframes> ... </noframes> Unframed content (for browsers not supporting frames)
Forms
<form> ... </form> Form input group decleration
<form> Tag Attributes:
action="url" URL of Form Script
method="***" Method of Form: get, post
enctype="***" For File Upload: enctype="multipart/form-data"
<input> ... </input> Input field within form
<input> Tag Attributes:
type="***" Input Field Type: text, password, checkbox, submit etc.
name="***" Form Field Name (for form processing script)
value="***" Value of Input Field
size="***" Field Size
maxlength="?" Maximum Length of Input Field Data
checked Mark selected field in radio button group or checkbox
<select> ... </select> Select options from drop down list
<select> Tag Attributes:
name="***" Drop Down Combo-Box Name (for form processing script)
size="?" Number of selectable options
multiple Allow multiple selections
<option> ... </option> Option (item) within drop down list
<option> Tag Attributes:
value="***" Option Value
selected Set option as default selected option
<textarea> ... </textarea> Large area for text input
<textarea> Tag Attributes:
name="***" Text Area Name (for form processing script)
rows="?" Number of rows of text shown
cols="?" Number of columns (characters per rows)
wrap="***" Word Wrapping: off, hard, soft
Special Characters
< < - Less-Than Symbol
> > - Greater-Than Symbol
& & - Ampersand, or 'and' sign
" " - Quotation Mark
© © - Copyright Symbol
™ ™ - Trademark Symbol
- A space (non-breaking space)
&#??; ISO 8859-1 character - replace ?? with the iso code
Miscellaneous Tags
<!-- ... --> Comment within HTML source code
<!DOCTYPE html ... > Document Type Definition (wiki)
<meta> ... </meta> META information tag
<meta> Tag Attributes:
name="***" Meta name: description, keywords, author
http-equiv="***" HTTP Equivalent Info: title, etc.
content="***" Information content
<link> LINK content relationship tag
<link> Tag Attributes:
rel="***" Type of forward relationship
http="url" Location (URL) of object or file being linked
type="***" Type of object or file, eg: text/css
title="***" Link title (optional)
Body Background & Colours
<body> Tag Attributes:
background="url" Background Image (*)
bgcolor="#??????" Background Colour (*)
text="#??????" Document Text Colour (*)
link="#??????" Link Colour (*)
vlink="#??????" Visited Link Colour (*)
alink="#??????" Active Link Colour (*)
bgproperties="fixed" Background Properties - "Fixed" = non-scrolling watermark (*)
leftmargin="?" Side Margin Size in Pixels (Internet Explorer) (*)
topmargin="?" Top Margin Size in Pixels (Internet Explorer) (*)
Op deze site kan je je html converten,
zodat je de tags ook kan zien op de pagina