Foutafhandeling in PHP (Error Handling)

  1. Inleiding
  2. Weergave en interpretatie van PHP fouten
  3. Basis foutafhandeling met die()
  4. Een flexibelere manier: trigger_error()
  5. Foutafhandeling en controle van variabelen
  6. Een eigen foutafhandeling functie met set_error_handler()
  7. Exceptions in PHP 5
  8. Gedetailleerde foutinformatie verkrijgen met exceptions
  9. Uitgebreide foutafhandeling met gebruik van foutcodes
  10. Uitbreiden van de standaard Exception klasse
  11. Slotwoord en referenties
  12. Reacties op deze tutorial

Foutafhandeling en controle van variabelen

Tot nu toe hebben we het enkel gehad over een aantal verschillende manieren om fouten in een PHP script weer te geven. Voordat ik verder in ga op meer verschillende manieren voor de foutafhandeling in PHP, wil ik eerst aandacht besteden aan het waar en waarom. Dus waar komt foutafhandeling in een PHP script voor en waarom zou je het eigenlijk toepassen.

Zoals ik in de inleiding al vertelde vormt de foutafhandeling de basis van ieder goed PHP script. De eerste reden voor die bewering is het mogelijk maken van het debuggen van je scripts. Als een script niet werkt wil je weten waarom het niet werkt en een gedetailleerde foutmelding is daarbij van belang.

De tweede, maar zeker niet minder belangrijke, reden is de veiligheid van je scripts. In veel gevallen zul je gebruik maken van input van gebruikers in de form van GET of POST variabelen of bijvoorbeeld cookies. Geen van deze input is te vertrouwen en een goede controle is een vereiste. Bij deze controle is het van groot belang dat de foutafhandeling op orde is. Ten eerste wederom om je script te kunnen debuggen, maar ten tweede om de gebruiker een nette foutmelding te kunnen geven als er iets fout gaat.

Controle van gebruikersinput
De controle van input van gebruikers gaat in bijna alle gevallen met behulp van if/else statements en het gebruik van functies als isset() en empty() om te controleren of variabelen bestaan en een waarde hebben.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
ini_set
('display_errors''On');
error_reporting(E_ALL);

$aErrors = array();

if(
$_SERVER['REQUEST_METHOD'] == 'POST')
{
    if(isset(
$_POST['naam']) && !empty(trim($_POST['naam'])))
    {
        
$sNaam trim($_POST['naam']);
    }
    else
    {
        
$aErrors[] = 'Er is geen geldige naam ingevuld';
    }
}
?>

In dit voorbeeldje wordt een variabele uit een gepost formuliertje verwerkt. De verwerking begint met de controle of het formulier wel gepost is en vervolgens de controle van de variabele $_POST['naam']. Mocht blijken dat deze variabele niet bestaat of dat de variabele leeg is, dan wordt er een foutmelding aan de array $aErrors toegevoegd.

Hoewel we hier geen gebruik maken van functies als die() of trigger_error() valt ook dit onder de foutafhandeling binnen een script. Alleen maken we nu gebruik van een array $aErrors om de foutmeldingen tijdelijk in op te slaan zodat ze verderop in het script getoond kunnen worden.

Foutafhandeling bij sql queries
Een ander punt waar foutafhandeling absoluut niet kan ontbreken, is bij het uitvoeren van sql queries. Zoals ik eerder al zei zal PHP namelijk nooit zelf een foutmelding teruggeven als er iets in een query fout gaat. Je zult altijd moeten controleren of een query gelukt is!

Eerder heb ik al een voorbeeld met die() gegeven, maar zoals gezegd is het waarschijnlijk niet gewenst om direct je script om zeep te helpen als een query mislukt. Vandaar nog een voorbeeld met trigger_error(), een syntax die ikzelf ook veel gebruikt heb.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
ini_set
('display_errors''On');
error_reporting(E_ALL);

$sql "SELECT * FROM tabel";

if(!
$res mysql_query($sql))
{
    
trigger_error(mysql_error().'<br />In query: '.$sql)
}
else
{
    
// Rest van het script, fetchen van resultaten bijvoorbeeld.
}
?>

In bovenstaande code wordt met mysql_query() een sql query uitgevoerd. Als deze mislukt wordt trigger_error() aangeroepen met daarin een foutmelding. In dit geval bestaat de foutmelding uit een combinatie van mysql_error(), welke de foutmelding van MySQL weergeeft, en de query die uitgevoerd is op de database.

Later in deze tutorial, als ik toekom aan het gebruik van 'exceptions', zal ik laten zien hoe je foutafhandeling kunt toepassen als je de connectie met de database bijvoorbeeld via PDO afhandelt.

Uiteraard kun je deze voorbeelden allemaal verder uitbreiden. Denk bijvoorbeeld aan controleren op foutcodes die mysql teruggeeft en aan de hand daarvan verschillende foutmeldingen geven of acties uitvoeren.Of denk aan controles voor bijvoorbeeld een minimum lengte van een gebruikersnaam of de geldigdheid van een email adres. Ook dat zijn allemaal dingen waarbij foutafhandeling een rol spelen, maar ze zijn te specifiek om in de tutorial te behandelen.

Vorige Volgende