Abbruch Problem.

cardex

Mitglied
Es geht um folgendes, um mein Script zu steuern bzw zu prüfen ob die, über die URL weitergegebenen, Variablen auch existieren, frage ich zu Beginn jeder Datei per If Anweisung ab ob die gewünschten Variablen auch vergeben sind. Is das nicht der Fall wird eine Fehlerfunktion aufgerufen. (eigentlich nichts neues)
Code:
if(!isset($xxx))
	{
	die (fehler('Dem Script fehlen wichtige &nbspParameter', 'hinweis'));
	}
Bis dahin lief auch alles wunderbar. Nun ist meine Website aber tabellarisch aufgebaut und die einzelnen Inhalte werden per include() eingefügt. Links die Navi in der mitte der Content und rechts eine Infoleiste mit allerlei Zeugs. Kommt es jetzt aber dazu, dass eine Variable nicht vergeben ist und somit "die(fehler('Dem Script fehlen wichtige Parameter', 'hinweis'))" ausgeführt wird, werden in der Indexseite der eigentlichen Website alle HP-Teile die nach dieser im Content stehenden Fehlermeldung noch folgen sollten, nicht eingefügt. Klingt dumm ich weiss :rolleyes:
Einfaches Beispiel:
In die Index Seite wird zuerst der Header eingefügt, danach die Navi(sitzt links in der Tabelle), der Content(in der Mitte) und zu guter letzt die Infoleiste(rechts). An dieser Reihenfolge gibts auch nix zu ändern weil die Tabellenstruktur von HTML ja garnichts anderes zu lassen würde. Wird nun im eingefügten Content Script abgebrochen (die), so wird auch die (im Index Teil - getrennt von dem Script was abgebrochen wurde) eingefügte Infoleiste nicht mehr includiert.

Muss ja wohl an der DIE Funktion liegen. Nun meine Frage, kann man da was gegen tun? Sieht schliesslich reichlich unschön aus wenn bei ner Fehlermeldung auf einmal Teile der Seite fehlen.
 
Hi!

Natürlich kann man da was machen, schließlich bist Du ja nicht gezwungen die Funktion die(), bzw. exit() zu verwenden.

Zur Info: Die Funktionen die(), bzw. exit() brechen die Skriptverarbeitung ab, d.h. ab dem Zeitpunkt des Aufrufes wird nur noch das übergebene Statement ausgegeben und keine weitere Zeit Skript mehr ausgeführt. Jetzt siehst Du auch schon das Problem: jedes weitere include, print oder echo Statement verliert seine Funktion und Deine restlichen Inhalte werden nicht geladen und angezeigt.

Aus der php-Doku auf http://www.php.net:
exit
(PHP 3, PHP 4 )

exit -- Output a message and terminate the current script
Description
void exit ( [string status])

void exit ( int status)


Note: This is not a real function, but a language construct.

The exit() function terminates execution of the script. It prints status just before exiting.

If status is an integer, that value will also be used as the exit status. Exit statuses should be in the range 1 to 254, the exit status 255 is reserved by PHP and shall not be used.

Note: The current CVS version does NOT print the status if it is an integer.

Note: The die() function is an alias for exit().

Example 1. exit() example

<?php

$filename = '/path/to/data-file';
$file = fopen ($filename, 'r')
or exit("unable to open file ($filename)");

?>

Eine simple Lösung wäre anstelle der exit(), bzw. die() -Funktion einen Rückgabewert, oder eine globale Variable beim Auftreten des Fehlers zu verwenden um später im "Programm" darauf reagieren zu können.

Ich hoffe, Dir geholfen zu haben ;-)

MfG.
Patrique <p.lafos@freenet.de>
 
Wie gesagt, das es am die() bzw exit() liegt war mir klar. Da das Script aber abbrechen soll wenn zB die forumID nicht gesetzt ist und mir keine andere Möglichkeit ausser eben exit() bekannt ist um das Script zu beenden und eine Fehlermeldung auszugeben musste ich es halt einsetzen. Gibts da nicht irgendwas das nur aufs laufende Script bzw die grad gelesene Datei bezogen ist?
Es bringt mir nämlich herzlich wenig, wenn ich anstatt exit() als IF anweisung einfach nur eine Meldung ausgebe und danach ne Menge PHP Fehlermelungen auf der Seite folgen weil eine notwenige Variable fehlt.
 
Es bringt mir nämlich herzlich wenig, wenn ich anstatt exit() als IF anweisung einfach nur eine Meldung ausgebe und danach ne Menge PHP Fehlermelungen auf der Seite folgen weil eine notwenige Variable fehlt.

Das ist mir schon klar gewesen, daher habe ich Dir ja auch gleich eine Lösung geschrieben, die dieses Problem umgeht:

Eine simple Lösung wäre anstelle der exit(), bzw. die() -Funktion einen Rückgabewert, oder eine globale Variable beim Auftreten des Fehlers zu verwenden um später im "Programm" darauf reagieren zu können.

Wenn Du die Variable überprüfst, merkst Du Dir einfach einen bool'schen Wert, auf den Du später leicht reagieren kannst und Deinen Seitenaufbau z.B. so steuern kannst, dass zwar die Navi und die Info vorhanden sind, aber der Benutzer im Content-Bereich nur eine fette Fehlermeldung sieht. Natürlich könntest Du auch jedesmal wieder die Variable überprüfen, aber das wäre - wie ich denke - deutlich unsauberer. Zudem kannst Du Fehlermeldung ebenfalls in einer Variable speichern und genau an der Stelle (z.B. Content-Bereich) ausgeben, wo sie hingehört und nicht an der Stelle im Skript, wo zufällig der Fehler auftritt.

PHP:
if (!isset($xxx))
{

  // die (fehler("Dem Script fehlen wichtige Parameter", "hinweis"));
  $err_msg = "Dem Skript fehlen wichtige Parameter";
  $err_flag = TRUE;	

}

Später kannst Du im bim Aufbau des Content-Bereiches einfach <err_flag> (oder wie Du die Var auch immer nennen möchtest) abfragen:

PHP:
...

if ($err_flag)
{

  // Fehlermeldung ausgeben
  echo $err_msg;

} else

  // Content anzeigen
  echo $content;  // nur ein Dummy-Beispiel!

}

...

Sollte das Dein Problem noch immer nicht lösen, dann liegt hier ein klares Sender- und Empfängerproblem vor :p .

MfG.
Patrique <p.lafos@freenet.de>
 
Jo danke :-)
Ich hab nun die ganze Content Ausgabe in den else Teil der If Anweisung gepackt und es scheint zu funktionieren.
 
Zurück