Mailinglisten-Archive |
Hi Leute, ich hab mir eine Error-Funktion gebastelt, die vielleicht einigen (Anfängern) helfen dürfte... Das ganze am besten in die errors.inc.php3 oder so reinhaun und per include("errors.inc.php3") einbinden... ---snipp--- $errors = array( 100 => array( "Couldn't connect to MySQL-Server!", true ), 101 => array( "Database didn't exist!", true ), 102 => array( "Error in SELECT statement!", true ), 103 => array( "Error in INSERT statement!", true ), 104 => array( "Error in UPDATE statement!", true ), 105 => array( "Error in REPLACE statement!", true ), 200 => array( "No parameters on search!", false ), 300 => array( "URL was manipulated by the User (let it be)!", false) ); function Error( $error_number, $mysql_query = "", $line = 0, $file = "" ) { global $errors; if( $errors[$error_number][1] || DEBUG ) { $msg = "Error-Number: $error_number\n"; $msg .= "Error: ".$errors[$error_number][0]."\n"; $msg .= "Skript: $PHP_SELF\n"; $msg .= "Filename: $file\n"; $msg .= "Line: $line\n"; if( $error_number < 200 && error_number >= 100 ) { $msg .= "MySQL-Error-Number: ".mysql_errno()."\n"; $msg .= "MySQL-Error: ".mysql_error()."\n"; if( $mysql_query ) $msg .= "MySQL-Query: $mysql_query"; } if( !DEBUG ) mail( "admin_(at)_domain.de", "Projektname: Error $error_number", $msg ); } $die_msg = "<html><head><title>Error: $error_number</title></head> <body><font color='#800000' size=5>Error: $error_number</font><br> <font size=4>".$errors[$error_number][0]."</font> </body></html>"; if( DEBUG ) $die_msg = $msg; die( $die_msg ); } ---snipp--- Nun zur erklärung: Das Array $errors enthält alle Fehlermeldungen und weist ihnen eine ID zu, der hintere Parameter ist dazu da, ob bei dem entsprechenden Fehler eine Mail an den Admin geschickt werden soll (true) oder nicht (false). Die Funktion Error kann entweder nur mit der Error-Number aufgerufen werden oder auch mit den optionalen Argumenten $mysql_query, $line und $file. Da man oft mehrere Dateien einbindet, verliert man leicht den Überblick wo genau der Fehler aufgetreten ist, dafür sind die beiden letzen optionalen Argumente $line und $file da. Man muss das aber nicht an den Stellen in denen Error aufgerufen wird erst nachzählen oder ähnliches - nein - es geht viel einfacher über die Konstaten __FILE__ und __LINE__ die das aktuell ausgeführte Skript und die Zeile in der man sich gerade Befindet ausgeben. Mit dem optionalen Argument $mysql_query kann man das Query, das - bei einem mysql_query() ausgeführt wurde, mitübergeben, so dass man den Fehler leichter lokalisieren kann. $file wurde übrigens absichtlich als letzes Argument genommen, da man oft selbst weiß in welchem file der Fehler aufgetreten ist, allerdings nicht genau in welcher Zeile, so braucht man kein ", , " oder ähnliches im Funktionsaufruf unterzubringen. Nun ein paar Beispiele für die Aufrufe von Error(): mysql_connect( "localhost", "user", "pass" ) or Error( 100 ); $query = "SELECT * FROM table WHERE "; for( $i=0,$n=count($foo); $i<$n; $i++ ) $query .= "bar='$foo[$i]' OR "; $query .= "1=0"; mysql_query( $query ) or Error( 102, $query, __LINE__, __FILE__ ); if( !ereg( "[0-9]+", $id ) ) Error( 300, , __LINE__ ); Ich hoffe dieses Code-Schnippsel von oben kann einigen von euch helfen, mir hilfts auf jedenfall einiges bei der Fehlersuche, vor allem wenn man ungeklärte mysql-Abfrageprobleme hat... Falls noch Fragen offen sind - fragt ;). Ach ja, als kleiner Tipp (blöde neue Rechschreibung, will mein "Tip" und "Delphin" wieder zurück *grummel*): Versucht die Ausgabe solange wie möglich hinauszuzögern, also nicht unbedingt gleich ein readfile("header.html") o.ä. davorzusetzen, dadurch sehr ihr die Fehlermeldung klar-screen und sie ist notfalls (Tabellen) nicht im Quelltext verwurschtelt. Bye Dante
php::bar PHP Wiki - Listenarchive