Hallo allemaal,

Het is al vaker tegen mij gezegd dat ik error handeling onder de knie moet krijgen. Bij deze een speciale topic om te checken of ik het snap en of het voldoende is om de errors te handelen.

Code tot nu toe (ja, kopieetje)

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);

function error($iLevel, $sMessage, $sFile, $iLine)
{
    $aLevels = array(
                2 => 'WARNING',
                8 => 'NOTICE',
                256 => 'FATAL ERROR',
                512 => 'WARNING',
                1024 => 'NOTICE' );
    
    if(array_key_exists($iLevel, $aLevels))
    {
        $sLevel = $aLevels[$iLevel];
    }
    else
    {
        $sLevel = 'ONBEKENDE FOUT';
    }
    
    echo 'Er is een fout opgetreden!<br />';
    echo 'Foutsoort: '.$sLevel.'<br />';
    echo 'Foutmelding: '.$sMessage.'<br />';
    echo 'Bestand: '.$sFile.'<br />';
    echo 'Regel: '.$iLine.'<br />';
    
    if($iLevel == 256)
    {
        echo 'Script wordt gestopt...';
        exit();
    }            
}
set_error_handler('error');
?> 



Zoals uit het script blijkt is een parse error niet netjes af te lezen, maar ik neem aan dat je niet een script met een parse error online zet.

Mij lijkt deze lange code vrij overbodig. Gezien het feit dat de volgende code hetzelfde doet, maar dan iets minder mooi: (sorry als ik iemand kwets)


ini_set('display_errors', 'On');
error_reporting(E_ALL);


Nu komt het moeilijke gedeelte hoe zorg je voor een goede error handeling wanneer je probeert te connecten met je db of wanneer je iets probeert uit te lezen uit je db.


<?php

include("ehandeling.php");

$admin = 'Sven';

$connect = mysql_connect ('localhost','root','');
if(!$connect){
  die('Could not connect: ' . mysql_error());
}

if(mysql_select_db("my_db", $connect)){
  $sql = "INSERT INTO persons (Firstname,Lastname,Age) VALUE ('sven','b','27')";
    if(!mysql_query($sql)){
      echo 'Error: Could not insert:' . mysql_error();
    }
    else{
      echo 'Data has been logged';
    }
}
?>


Klopt dit? Is hier een functie voor te maken? Je moet dus bij elke INSERT, SELECT, UPDATE etc. een error handeling inbouwen?

MvG. Sven
Je zou dit in een class kunnen verwerken, en dan een exception kunnen opwerpen.

Verder zou ik in live-projecten je errors loggen naar een bestand welke buiten de webroot staat. In gevallen van development kan je de meldingen gewoon tonen.

Oke, ik zal het in mijn achterhoofd houden. Ik ben nog niet zo ver dat ik naar bestanden kan schrijven. Ik weet dat het iets is met fopen en zoiets, maar dat heb ik nog nooit gedaan. Ik ben nu vooral met login scripts bezig en berichten plaatsen, updaten. Soort blog project.

Hoe bedoel je buiten de webroot? Buiten htcdocs?

In een class verwerken? Kan ik niet gewoon dit script require("ehandeling.php"); doen? Daarnaast snap ik die exception niet zo goed. Goed, je kunt kijken of iemand aan de leeftijd voldoet of dat de getallen overeenkomen, maar dat kan ik toch ook met if statement.

[size=xsmall]Toevoeging op 22/07/2011 11:25:39:[/size]

Als ik het script ehandeling.php run krijg ik geen error. Als ik het via een require in een andere scrip gebruik dan krijg ik wel een error.

Fatal error: Cannot redeclare error() (previously declared in C:\xampp\htdocs\logtest\ehandeling.php:5) in C:\xampp\htdocs\logtest\ehandeling.php on line 34

En daar snap ik dus helemaal niks van..

[size=xsmall]Toevoeging op 22/07/2011 11:32:27:[/size]

Laatste foutmelding heb ik met een require_once opgelost.

Reageren