dedlfix: Login-Skript - Ich kann den Fehler nicht finden!

Beitrag lesen

echo $begrüßung;

Das soll ein Login-Skript sein. Ganz einfach - Ich will das erstmal nnur hinbekommen, dass ich mich irgendwie einloggen kann. Aber bei diesem Skript zeigt er mir einfach kein Formular an. Was mache ich falsch?

Du betreibst vermutlich kein Debugging. Verwende Kontrollausgaben, um Wunsch und Wirklichkeit miteinander zu vergleichen. Desweiteren fehlt teilweise die Fehlerbehandlung.

Wenn gar keine Ausgabe kommt, kann man versuchen, ein die('test'); am Anfang einzubauen und zu schauen, ob diese Stelle erreicht wird. Dann versetzt man das immer weiter nach hinten. Wenn das "test" nicht mehr zu sehen ist, ist die fehlerhafte Stelle davor zu suchen.

Hier noch ein paar allgemeine Anmerkungen, auch auf Nachfrage von Andreas.

error_reporting(E_ALL);
ini_set('display_errors', 1);

Das nützt nichts mehr, wenn bereits Parser-Fehler auftraten, die aber aufgrund vorrangigerer Konfiguration nicht angezeigt werden.

$db = @new mysqli('***', '***', '***', '***');

Ein @ ist keine Fehlerbehandlung. Prüfe gemäß der Beispiele im Handbuch auf Fehlerbedingungen. Es interessiert sicher den Administrator, wenn das DBMS nicht verfügbar ist oder andere Fehler auftreten. Den Anwender interessiert das übrigens nicht, weswegen man die Fehlermeldung nicht direkt ausgeben sollte.

$ret = array();
$ret['filename'] = 'login2.html';
$ret['data'] = array();

Nebenbei: Das kann man zusammenfassen zu einer Zeile:

$ret = array('filename' => 'login2.html', 'data' => array());

if ('POST' == $_SERVER['REQUEST_METHOD']) {

Diese Prüfung ist im Prinzip überflüssig. Es reicht, den Inhalt der $_POST-Werte zu testen. Ohne POST-Request sind die nicht vorhanden.

if (!isset($_POST['Username'], $_POST['Password'], $_POST['submit'])) {
        return INVALID_FORM;
    }

Ein Submit-Button muss nicht unbedingt angeklickt worden sein, wenn man ein Formular mit Enter absendet. In dem Fall verhält sich der FF meiner Meinung nach falsch und tut so, als ob ein Submit-Button aktiviert wurde. Der IE macht es richtig und sendet für einen nicht geklickten Submit-Button auch dessen name-value-Pärchen nicht mit.

if (('' == $Username = trim($_POST['Username'])) OR
            ('' == $Password = trim($_POST['Password']))) {
        return EMPTY_FORM;
    }

Anstelle der drei obigen Prüfungen hätte ich lediglich auf empty($_POST['Username']) und empty($_POST['Password']) getestet. Leerzeichen zur Prüfung entfernen ist auch nicht erforderlich. Es geht hier um Anmeldedaten, dir korrekt sein müssen, nicht um versehentlich eingegebene Leerzeichen bei "normalen" Daten.

$stmt->close();

Wo kommt denn $stmt her, auf das du hier zuzugreifen versuchst?

$stmt = $db->prepare($sql);

Ach, hier wird es erst angelegt. Dann ist das obige Zugreifen ein Fehler.

if (!$stmt) {
        return $db->error;
    }

Sieh an, ab hier gibt es sogar Fehlerbehandlung. Zum Rest habe ich keine Anmerkungen.

echo "$verabschiedung $name";