Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 14:35

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Fehlerbehandlung

Discussion on Fehlerbehandlung within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jul 2010
Posts: 283
Received Thanks: 16
Fehlerbehandlung

Morgen werte Herren & Damen,

ich hab mal ein paar Fragen bezüglich Fehlerbehandlung.

Gebiete: Funktionen, Restlicher Code (Klassen sind zur Zeit nicht wichtig)
Wie geht ihr vor?
Macht ihr um Funktionen ein Try-Catch Block oder gibt ihr bei Fehlermeldung ein Array zurück mit 2 Werten (Status false & Fehlermeldung)?


Wie geht ihr vor bei der Auswertung von Bsp.: GET & POST vor?
Alle Fehlermeldung in einem Array ausgeben und zum Schluss ausgeben?

Ich selber verwende dabei 3 Array.
Success, Warning und Error
Diese werden dann je nach Fehler befüllt und zum Schluss eines "Blockes" ausgegeben. Wenn die Error Variable gefüllt ist dann wird das Script auch gleich beendet. Wiederholt sich dann einige Male z.B. nach GET & POST Auswertung nach Datenschreiben nach Datenselektierung ...


Wenn mir wer dabei gute Tipps (auch welche die ich nicht erwähnt habe) geben kann wär ich erfreut.


Mit freundlichen Grüßen

Kroko

#edit
Schreibe gefühlt in jedem 5 Script meine Fehlerbehandlung anders..

#edit2
Was mir grad noch einfällt bei einer MySQL abfrage welche Variante ist leserlich besser?

PHP Code:
if ( $res !== false ) {
    if ( 
mysql_num_rows($res) > ) {
        
// Mach was
    
}
    else {
        
// Fehler
    
}
}
else {
    
// Fehler
}

// oder

if ( $res === false ) {
    
// Fehler
}
if ( 
mysql_num_rows == ) {
    
// Fehler
}

// Mach was 
Masterkroko1 is offline  
Old 08/04/2015, 17:08   #2
 
RecK's Avatar
 
elite*gold: 20
Join Date: Jan 2009
Posts: 304
Received Thanks: 55
Sieht nicht Hausaufgaben aus?

Im Fehlerfall:
Monkey-Debugging bis man was potenzielles findet (den Fehler eingrenzen kann).
Dann genaueres debugging an dieser Stelle und die Fehlerquelle finden.
Entsprechend bereinigen.
Log-Datein / Stack-Traces helfen natürlich immer ungemein!

Im Vorfeld:
Ordentliche Validierungen. Blackbox-Tester suchen!
So richtige DAU sind die Besten.
Du solltest es natürlich auch selber alles durchtesten. Mit der Zeit kennt man ja viele "dumme Aktionen". Erstes Beispiel hierfür: Bitte Alter angeben (18-99): neunzehn
-> NumberFormat Exception und Abbruch. An solchen Stellen ist und bleibt einfach klar, bei einer Typsicheren-Sprache/DB muss ein übernommener Datentyp immer geprüft werden.
White-Box Tests sollten sich eigentlich heut zu Tage im Falle von "Clean Code" "automatisch erledigen".
Bei komplexen Abläufen sollte auch eine ausreichende Planung festgelegt werden.
So kann mit Hilfe von Ablaufdiagrammen (Sequenzd.) Fehler im Vorfeld ausgemerzt werden.
Try Catch ist natürlich wichtig für typischer Weise IO Zugriffe.
Da spart man sich das "File exists" und die Validierung des Inhalts-Typen (Beispielsweise XML erforderlich)

Zur Vorgehensweise der Fehlerbehandlung:
Serverseitig sind wie bereits erwähnt Log-Files sehr wichtig.
Beim typischen Request-/Responselifecycle antwortet man natürlich immer in entsprechenden Format (JSON/XML etc.).
Es bietet sich an, ein Objekt zu erstellen vom Typ "RequestError".
Enthalten sein könnte:
Stack-Trace? (oder nur im "dev"-Modus der Anwendung)
Error-Array mit einzelnen Nachrichten ("Sprachunabhängig" also sowas wie username_required -> für Übersetzungen)
Success: true|false ist eigentlich unnötig. Allerdings in diesem Fall der Übersichthalber und Adaptierbarkeit sinnvoll
RequestTime: Current-Timestamp
uvm. (je nach Gebrauch)

Allerdings kommt in der Webentwicklung noch das HTT-Protokoll zum Einsatz.
Mit Hilfe von Status Codes lässt sich bereits viel realisieren.
Du kannst beispielsweise Status-Codes im 400-er Bereich als Antwort zum Client schicken.
Ungültige Anfrage / Fehlende Daten what-ever: 400 / Bad Request etc.
Da gibt es viele mehr von. Die manchmal auch ausreichen!
Bzw. in einem Fehlerfall ist es sinnvoll einen korrekten HTTP-Status zu übermitteln

Für welchen Fall sind Warnungen angedacht?

In wie weit ändert sich bei jedem 5. Script deine Vorgehensweise?
Man sollte überall korrekt validieren. Beispielsweise ist es für den User beispielsweise nicht gut, wenn die Anwendung "abkackt".. Sollte soetwas mal in Kauf genommen werden, so gibt es aber meist immer noch den Bösewicht, der dir beispielsweise SQL-Injections reinhauen kann.
Und wenn dann beispielsweise Daten geklaut werden oder ähnliches, freut sich der User sicherlich auch nicht mehr.

Ich finde am besten zu Lesen ist:
PHP Code:
<?php
// $dbUserList oder ähnliches eventuell besser als $res?
if ($res !== false && mysql_num_rows($res) > 0) { 
    
// ...
   
return;


// do something
So produziert man nicht unnötig viele Zeilen.
Im Endeffekt ist $res !== false ja nur die Vorbedingung von mysql_num_rows (&&)

Denke es gibt noch viel mehr zum Testen zu sagen aber das wären meine persönlichen Vorgehensweisen sag ich mal

VG


#edit:
Ein Error-Code ist auch immer nicht verkehrt.
Manchmal ist das System komplexer und dann ist es wichtig zu wissen, was genau "gefailed" hat.
Am obigen Coding-Beispiel: Ist $res nun nicht vorhanden also ist etwas mit der Datenbank bzw. dem Query oder kommen einfach keine Daten? Es wäre wahrscheinlich die gleiche Error-Message für den Endanwender. Allerdings anhand des Error-Codes können Entwickler oder Consumer das ganze vereinfachen (für den Endanwender ist es meist egal ob das nun die Datenbank ist oder keine Ergebnisse da sind ... Es sind halt keine Ergebnisse da für den Benutzer, so oder so)
RecK is offline  
Reply


Similar Threads Similar Threads
[VB.Net] Fehlerbehandlung
12/26/2010 - Coding Tutorials - 8 Replies
Hallo Elitepvpers :) Heute Zeige ich euch etwas über die Fehlerbehandlung, und wie ihr eure Fehler "ausbügelt" :) Fehlerbehandlung .:Index:. -1.Fehlerarten -2.Syntaxfehler und IntelliSense -3.Laufzeitzfehler und Exception Handlng



All times are GMT +1. The time now is 14:35.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.