Nachfolgender HTML Code wird bei Mysqli Error nicht ausgegeben / angezeigt

  • Hallo, vermutlich ist die Lösung für mein Problem recht simpel .. trotz Google und das lesen unzähliger Seiten, habe ich keine Lösung für mein Problem finden können. Ich bin ein ziemlicher Grünschnabel was PHP angeht. Daher hoffe ich, ihr könnt mir ein bisschen unter die Arme greifen.

    Sobald keine Datenbank Verbindung hergestellt werden kann und ein Error ausgegeben wird, wird sämtlicher Code der nach dem PHP Teil kommt nicht auf der Website ausgegeben / angezeigt. In diesem Fall wird der Footer also nicht ausgegeben. Kann die Datenbankverbindung erfolgreich hergestellt werden, so wird auch sämtlicher Code ausgegeben. Ich bin leider völlig ratlos .. Zumal mir wichtig ist das ein Error genau an dieser Stelle ausgegeben wird.

    Vielen dank im Voraus für alle helfenden Hände!

    Edit: Hab nochmal 2 Bilder hinzugefügt um mein Problem zu verdeutlichen .. Btw, ich suche natürlich selbst auch noch nach einer Lösung. Habe es mit Popups probiert, allerdings sagt mir das gar nicht zu. Ein weiterer Punkt ist, neben der DB Error Message soll dort später auch der Error für fehlgeschlagene Logins hin. Ich bin total am verzweifeln. :-?

    12 Mal editiert, zuletzt von Confused (8. März 2017 um 00:13)

    • Offizieller Beitrag

    Hallo,

    Das ist ein absolut korrektes Verhalten, bei einem Fehler bricht der Interpreter ab.

    Du solltest gleich von Anfang an versuchen, das EVA-Prinzip einzuhalten.
    Weiterhin musst Du die Fehler entsprechend behandeln. In Deinem Fall bietet sich mysqli::connect_error an:

    PHP
    $connect = mysqli_connect ($_CONFIG['svr_host'], $_CONFIG['svr_user'], $_CONFIG['svr_pwd']);
    
    
    if ( $connect->connect_error ) {
    
    
        // ...hier auf Fehler reagieren, bspw. Ausgabe der Fehlermeldung oder Weiterleitung auf Fehlerseite, usw.
    
    
    }


    Gruß Arne

  • Edit: Danke erstmal für die Antwort! Ich dachte ich hab die Lösung .. jedoch lag ich falsch.
    Ich habe mir den Beitrag zum EVA Prinzip durchgelesen und denke ich habe ihn soweit auch verstanden. Anhand deines Beispielcodes und mysqli::connect_error habe ich folgendes probiert:

    PHP
    // Eingabe$connect = mysqli_connect ($_CONFIG['svr_host'], $_CONFIG['svr_user'], $_CONFIG['svr_pwd']);// Verarbeitungif ($connect->connect_error) {// Ausgabeecho '<font color="red">Error: Server connection failed!</font>'; }

    Jedoch tut sich da garnichts .. ich habe dann weiter diverse Dinge ausprobiert, allerdings hat nichts funktioniert. Habe ich das EVA Prinzip schlichtweg falsch verstanden?!
    Weiterhin habe ich gelesen das mysqli::connect_error nur unter PHP 5.2.9 / 5.3 "korrekt" funktioniert. Ich nutze PHP 7 macht das einen Unterschied?

    Probiere ich es mit if (!$connect->connect_error) wird mir dauerhaft die Error Message ausgeworfen.

    Edit: So hat es nun endlich funktioniert, ich bin mir nicht so recht sicher ob es richtig ist, aber es funktioniert:

    PHP
    $connect = mysqli_connect ($_CONFIG['svr_host'], $_CONFIG['svr_user'], $_CONFIG['svr_pwd']); 
    if (!$connect) {
    echo 'Serververbindung fehlgeschlagen!';
    } else {
    $selectdb = mysqli_select_db ($connect, $_CONFIG['svr_db']);
    if (!$selectdb) {
    echo 'Datenbankverbindung fehlgeschlagen!';
    }

    17 Mal editiert, zuletzt von Confused (8. März 2017 um 02:50)

    • Offizieller Beitrag
    Zitat

    Habe ich das EVA Prinzip schlichtweg falsch verstanden?!

    Sieht so aus... :)

    Eingabe
    Mit Eingabe sind die Daten gemeint, die an das Script zur Verarbeitung übermittelt werden. In Deinem Fall ist das Formular die Eingabe.

    Verarbeitung
    Dein PHP-Script, in dem Du die eingegeben Daten verarbeitest.

    Ausgabe
    Im häufigsten Fall das Senden der Daten ( idealerweise ein HTML-Dokument ) an den Browser.

    PHP ist nur für die Verarbeitung und z.T. für die Ausgabe zuständig ( "z.T." deshalb, weil PHP nur die Ausgabe einleitet, die Darstellung findet im Browser statt )

    Zitat

    Weiterhin habe ich gelesen das mysqli::connect_error nur unter PHP 5.2.9 / 5.3 "korrekt" funktioniert. Ich nutze PHP 7 macht das einen Unterschied?

    Nein, mysqli::connect_error arbeitet korrekt ab PHP 5.2.9/5.3.
    Aber das zeigt, dass Du die Links auch liest, finde ich schon mal gut.

    Zitat

    Edit: So hat es nun endlich funktioniert, ich bin mir nicht so recht sicher ob es richtig ist, aber es funktioniert:


    Ich arbeite nicht mit mysqli, daher kann ich an dieser Stelle nur Vermutungen in den Raum werfen, aber wenn der Konstruktor von MySQLi ein false zurück gibt, sollte das funktionieren.
    Besser wäre allerdings doch die Fehler-Behandlung, denn dann hast Du auch Zugriff auf die Fehlermeldung der Connection, die beim Debuggen hilfreich sein kann:


    Wenn Du Dein HTML-Dokument trotz Fehler im Anschluss senden willst, solltest Du die Fehler zwischenspeichern und in das HTML als Ausgabe mit einbauen.

    Gruß Arne


  • Eingabe
    Mit Eingabe sind die Daten gemeint, die an das Script zur Verarbeitung übermittelt werden. In Deinem Fall ist das Formular die Eingabe.

    Verarbeitung
    Dein PHP-Script, in dem Du die eingegeben Daten verarbeitest.

    Ausgabe
    Im häufigsten Fall das Senden der Daten ( idealerweise ein HTML-Dokument ) an den Browser.

    PHP ist nur für die Verarbeitung und z.T. für die Ausgabe zuständig ( "z.T." deshalb, weil PHP nur die Ausgabe einleitet, die Darstellung findet im Browser statt )

    Danke, nun habe auch ich es verstanden. :D


    Ich arbeite nicht mit mysqli, daher kann ich an dieser Stelle nur Vermutungen in den Raum werfen, aber wenn der Konstruktor von MySQLi ein false zurück gibt, sollte das funktionieren.
    Besser wäre allerdings doch die Fehler-Behandlung, denn dann hast Du auch Zugriff auf die Fehlermeldung der Connection, die beim Debuggen hilfreich sein kann:

    Ich werde mich mit der Fehler-Behandlung nun mal weiter auseinandersetzen und mir dazu auch nochmal einige Beiträge und Beispiele ansehen. Ich denke mir ist soweit erstmal geholfen .. vor allem das Tutorial zum EVA Prinzip fand ich sehr hilfreich, solche Basics übersieht man gerne mal .. obwohl sich so viele Fragen von selbst lösen könnten, netter Nebeneffekt .. man füllt sein fehlendes Verständnis. :)

    Edit - Derzeitiges Endergebnis:

    PHP
    $connect = mysqli_connect ($_CONFIG['svr_host'], $_CONFIG['svr_user'], $_CONFIG['svr_pwd'], $_CONFIG['svr_db']); 
    if (mysqli_connect_error()) {
        echo '<p><font color="red">Connection Error: ' . mysqli_connect_error() . '</font></p>';
    }

    Einmal editiert, zuletzt von Confused (8. März 2017 um 15:58)