nach die() wird html weggeschnitten

hubbl

Erfahrenes Mitglied
Hallo,
ich habe eine index.php in diesem stil:
HTML:
<body>
    <div id="main">
        <div id="oben"></div>
        <div id="hintergrund">
            <div id="nav">
            <?php include 'navigator.inc.php';?>
            </div>
            <div id="cont">
            <?php include 'content.inc.php';?>
            </div>
        </div>
        <div id="unten"></div>
    </div>
</body>
</html>

Wenn nun in der content.inc.php ein Fehler auftritt, denn ich mit die() abfange und dann die Fehlermeldung ausgebe wie z.B "konnte keine Verbindung zur Datenbank herstellen", wird alles was unterhalb dem include kommt einfach abgeschnitten.
Im resultat sieht das dann etwa so aus:

HTML:
<body>
    <div id="main">
        <div id="oben"></div>
        <div id="hintergrund">
            <div id="nav">
            <?php include 'navigator.inc.php';?>
            </div>
            <div id="cont">
            <?php include 'content.inc.php';?>
            Konnte keine Verbindung herstellen.

Wenn ihr es genauer haben wollt, auf http://o77o.ohost.de/lala/ könnt ihr euch das mal anschauen. Nicht auf das Design achten, an dem Problem sitz ich auch noch.
Wenn ihr euch den Quelltext des Adminbereiches anschaut seht ihr genau das Problem.

vllt. kann sich das ja mal jmd anschaun.
Danke

gruß Dennis
 
Das ist kein Fehler sondern vollkommen normal so. DIE() ist nicht dafür da um eine Fehlermeldung in einem Design auszugeben, dafür musst du einen anderen weg finden. Wenn deine Website ohne MySQL Komplett nicht funktioniert dann baue direkt zu beginn eine Verbindung auf, und falls diese Fehlschlägt leite den User direkt auf eine Fehlerseite um per Header() o.Ä.

Aber so wie du dir das vorstellst funktioniert es nicht so einfach.

Eine Art und weise vielleicht ein wenig besser damit umzugehen ist es den Outputbuffer zu verwenden und eben das einzufügende einfach per ob_end_clean() zu entfernen und stattdessen etwas anderes anzuzeigen.
 
Das ist kein Fehler sondern vollkommen normal so. DIE() ist nicht dafür da um eine Fehlermeldung in einem Design auszugeben, dafür musst du einen anderen weg finden.
Richtig, denn die() ist genau dafuer da was der Name vermuten laesst, jegliche Verarbeitung stirbt sofort ab. Und das bezieht sich nicht nur auf die aktuell zu verarbeitende Datei (was dann einen eventuellen Ruecksprung in eine includende Datei bedeuten wuerde), sondern eben die komplette Verarbeitung.
Eine eventuell an die() uebergebene Meldung wird noch ausgegeben, und das war es dann auch.

Was genau hast Du denn vor?
 
die() beendet sofort die Skriptausführung.

Wenn du eine Fehlermeldung ausgeben willst, benutze z.B. eine if Abfrage
PHP:
$connect = mysql_connect([...]);
if ($connect) {
     [hier der Normale Code]
}
else {
     [hier Ausgabe der Fehlermldung]
}


Gruß
 
Protokolliere lieber den Fehler und gib eine allgemeine Fehlermeldung aus, beispielsweise:
PHP:
trigger_error('Keine Verbindung zu "'.$host.'" möglich', E_USER_WARNING);
header($_SERVER['SERVER_PROTOCOL'].' 503 Service unavailable');
echo 'Dienst steht zur Zeit nicht zur Verfügung. Versuchen Sie es in wenigen Minuten noch einmal.';
Dazu muss allerdings die Ausgabe vorher gepuffert werden, damit der HTTP-Header nachträglich noch verändert werden kann.
 
Zurück