baseportal
Suche: 
 Forum   Start 

Fehlerbehandlung

ab Version 3 
Verstecken Inhalt
Standardmässig gibt baseportal Fehler direkt an der Stelle der HTML-Seite aus, an der der Fehler passiert ist. Die Fehlermeldungen können genauso wie alle anderen Ausgabetexte mit set_language auf eine andere Sprache umgestellt oder beliebig umdefiniert werden (s. Anhang).

Befehle geben undef bei Fehler zurück

Tritt bei der Ausführung eines baseportal-Befehls ein Fehler auf, so bricht dieser üblicherweise ab und gibt den Wert undef zurück. Ein Test ob ein Befehl erfolgreich war sieht demnach so aus:

if(put ["Name", "Stefan"], "kunden")
{
    # Befehl wurde erfolgreich ausgeführt
} else
{
    # Während des Befehls ist ein Fehler aufgetreten
}

Schreibt einen neuen Eintrag in die Datenbank kunden - tritt dabei ein Fehler auf, wird darauf entsprechend reagiert.

Üblich ist auch folgende Schreibweise:

put ["Name", "Stefan"], "kunden" or out "FEHLER!";

Gibt FEHLER! aus, wenn ein Fehler aufgetreten ist.

Um die baseportal-eigene Fehlerausgabe zu unterbinden, muss man die Variable $_error_mode auf no setzen.

Variablen


Selbst Fehler erzeugen

Durch den Aufruf der Routine error kann von Hand ein beliebiger Fehler erzeugt werden:

error "Es ist ein unglaublich schlimmer Fehler aufgetreten!";

error gibt selbst undef zurück. Um den fehlerhaften Abbruch einer Unterroutine anzuzeigen bietet sich folgende Schreibweise an:

sub my_sub
{
    my($val)=@_;

    return error "Der erste Parameter darf nicht leer sein!" if $val eq "";

    ...code...

    1;
}

Gibt die Fehlermeldung Der erste Parameter darf nicht leer sein! aus und kehrt mit einem undef zurück, wenn der übergebene Parameter leer war. Ist alles fehlerfrei gelaufen, gibt die Routine 1 - logisch wahr zurück. my_sub verhält sich damit wie alle baseportal-Befehle.


Eigene Fehlerroutine einsetzen

Durch die Definition einer eigenen Fehler-Routine kann selbst auf Fehler reagiert werden. Ein Verweis auf die Routine muss an $_error_handler übergeben werden. Diese wird dann aufgerufen, wenn ein Fehler auftritt. Als erster Parameter wird der Fehlername übergeben, gefolgt von weiteren Angaben. Beim Fehler perl_error ist dies zum Beispiel der Text des Perl-Fehlers.

Ist der Rückgabewert logisch falsch (also 0 oder leer oder undef), so wird danach die baseportal-eigene Fehlerroutine ausgeführt, bei logisch wahr (jeder andere Wert, z.B. 1) nicht.

$_error_handler=sub
{
    put $_error_text, "error_log.htx";
    0;
};

Protokolliert alle aufgetretenen Fehler in der Datei error_log mit. Aufgrund des Rückgabewerts 0 wird danach die baseportal-Fehlerroutine aufgerufen und der Fehlertext also wie normal ausgegeben. Der Nutzer merkt keinen Unterschied.

Beachten Sie den abschliessenden ; da dies eine Variablenzuweisung und kein Block wie bei der Definition einer Routine ist.

Fehler die innerhalb der eigenen Fehler-Routine auftreten, können nicht mehr abgefangen werden.


Eigene Fehlerseite bei nicht gefundener Ausgabeseite

Durch eigene Fehlerroutinen kann man alle in einer Seite auftretenden Fehler abfangen und beliebig ändern. Dies kann natürlich nicht gelingen, wenn die gewünschte Seite garnicht erst gefunden wird. Für diesen Fall gibt es die Möglichkeit eine spezielle Seite namens _error_no_page im Hauptverzeichnis anzulegen, die dann stattdessen ausgegeben wird.

Alte Version vom 22.9.2007, 20:41 - Stichworte: Fehler, Rückgabewerte, Eigene Fehlerroutine, error, $_error, %_error, @_error, $_error_mode, $_error_handler, Fehlende Ausgabeseite, _error_no_page

c und wiederherstellen - + 
© baseportal GmbH. Alle Rechte vorbehalten.


powered in 0.02s by baseportal.de
Erstellen Sie Ihre eigene Web-Datenbank - kostenlos!