Ik was eens benieuwd naar jullie ideeën over foutafhandeling.
Er zijn zat mensen die er niet aan doen, maar ik heb toch graag eigen meldingen.

Bijv.
<?php
if( ! $Res = @ mysql_query( $Sql ) )
die( 'Query mislukt!' );
?>

Wat is jouw ervaring met foutafhandeling?
Hoever ga je?

Bijv.
<?php
if( ! $Res = @ mysql_query( $Sql ) )
if( ! mail( '[email protected]', 'Query mislukt!', 'tijd/datum/pagina/etc' ) )
die( 'Alles mislukt :-P' );
?>
Is dat voor jou te ver?
Of nog lang niet?

Barst maar los!
Ik controleer de queries of ze lukken, mails ook... :) Maar niet met een die(); => verkloot de layout verder, maar gewoon met een echo, en de vraag of ze het later eens opnieuw willen proberen :)

Edit: Zoals in je 2de voorbeeld, zo extreem nu ook niet...Ik laat geen mails verzenden als er een query failt. Met mails controleren bedoel ik, dat als ze het contact formulier gebruiken, dat ik degelijk controleer of de mail verzonden is :)
Ik heb gewoon als en query mislukt zien de mensen er niets van,
Ik log het in de database en bekijk de fout en verbeter het.

Ik heb niet echt logs die belangrijk zijn voor de mensen zelf

Han
Als er een fout onstaat wordt er geen die gebruikt. Verneukt de layout. Pagina gaat gewoon door uiteraard wat niet meer werkt niet meer. En alles wordt gelogd in een log file

User krijgt een error te zien.
Output mijn output altijd in één keer, dus die() is geen probleem.
<?php
function fatal_error($the_error) {
global $INFO;



$the_error .= "\n\nmySQL error: ".mysql_error()."\n";
$the_error .= "mySQL error code: ".mysql_errno()."\n";
$the_error .= "Datum: ".date("l dS of F Y h:i:s A");

$out = "<html><head><title>The Triads Website Database ERROR</title>
<style>P,BODY{ font-family:arial,sans-serif; font-size:11px; }</style></head><body>
&nbsp;<br><br><blockquote><b>Er is een fout opgetreden in de database van The Triads Website.</b><br>
Probeer de pagina eens te vernieuwen door <a href=\"javascript:window.location=window.location;\">hier</a> te klikken, mocht dit het probleem niet verhelpen, neem dan contact op met de sitebeheerder door op <a href='mailto:{$INFO['email_in']}?subject=SQL+Error'>deze</a> link te klikken
<br><br><b>Geretouneerde fout (graag vermelden in je e-mail)</b><br>
<form name='mysql'><textarea rows=\"15\" cols=\"60\">".htmlspecialchars($the_error)."</textarea></form><br>Sorry voor het ongemak</blockquote></body></html>";


echo($out);
die("");
}
Ik stop alle fouten altijd in een array, en die echo ik dan helemaal aan het einde van de pagina, tenzij de fouten kritiek zijn, dan of leeg ik eerst de output-buffer, of komen ze bovenaan te staan.

Ik gebruik nu ook trouwens een error-class, dat is in niet-in-gebruik omstandigheden heel erg handig. Dan laat hij dus meteen een backtrace en een paar regels betreffende code zien.
In mijn nieuwe projecten heb ik in de instellingen van de website een optie 'foutlogging in beeld'.

Als deze op ja staat dan krijgt de bezoeker de fouten te zien (erg makkelijk voor de ontwikkelingsperiode), zo nee, dan wordt het bestand in error.txt (die niet in de root van de website staat) opgeslagen . Deze wordt d.m.v. een cronjob 's nachts gecontroleerd en eventueel naar mijn e-mail opgestuurd.

Als er een fout optreedt dan wordt de functie voor het wegschrijven van die fout aangeroepen. Daarin vindt de controle van de website-instelling plaats. Als de fout weggeschreven moet worden en dat lukt niet (bv. verkeerde CHMOD van error.txt) dan krijgt de bezoeker alsnog de fout te zien met de mededeling om dit op te sturen naar de beheerder. Anders krijgt de bezoeker gewoon een berichtje dat er een fout was, dat die opgeslagen is en dat ze vooral niet F5 moeten gebruiken.. :)

Die foutmeldingen staan bij mij standaard op de queries, want die roep ik ook aan via een functie. En behalve queries controleer ik eigenlijk niet veel op fouten... of het gaat om het openen van bestanden etc.

Elwin
Bij functies die ik schrijf gebruik ik wel vaak trigger_error waneer er bijvoorbeeld strings ipv integers zijn meegegeven. Maar dat vooral voor later, waneer ik de functies die ik overigens in een soort van bibliotheken bewaar ga hergebruiken.
Elwin 2000 posts \o/

Reageren