Heim > Backend-Entwicklung > PHP-Tutorial > Warum stellt mein Anmeldeformular keine Verbindung zu meiner MySQL-Datenbank her?

Warum stellt mein Anmeldeformular keine Verbindung zu meiner MySQL-Datenbank her?

Mary-Kate Olsen
Freigeben: 2024-10-25 11:13:02
Original
861 Leute haben es durchsucht

Why is My Login Form Not Connecting to My MySQL Database?

Anmeldeformular konnte nicht mit der MySQL-Datenbank verbunden werden

Diese Anfrage bezieht sich auf die Implementierung der Benutzeranmeldefunktion, die eine Überprüfung anhand einer MySQL-Datenbank durchführt. Der Benutzer erwartet, einen Benutzernamen und ein Passwort einzugeben, die anhand der in der Datenbank gespeicherten Anmeldeinformationen validiert werden sollten. Obwohl das Formular fehlerfrei übermittelt wird, wird die gewünschte Funktionalität leider nicht erreicht.

Behebung des Problems

Die Hauptursache dieses Problems liegt im mangelnden Schutz vor SQL-Injection-Angriffen und der Unsicherheit Speicherung von Passwörtern im Klartext in der Datenbank. Um diese Bedenken auszuräumen, wird Folgendes empfohlen:

  • Vorbereitete Anweisungen verwenden:Benutzereingaben parametrisieren, um SQL-Injection-Angriffe zu verhindern. Anstatt Benutzereingaben direkt in SQL-Abfragen einzubetten, werden Platzhalter verwendet und die Parameter an diese Platzhalter gebunden.
  • Implementieren Sie das richtige Passwort-Hashing:Speichern Sie Passwörter sicher mit Einweg-Hashing-Funktionen wie bcrypt oder PBKDF2. Dadurch wird verhindert, dass unbefugte Benutzer im Falle einer Datenschutzverletzung auf Klartext-Passwörter zugreifen.

Code-Lösung (Verwendung vorbereiteter Anweisungen und Passwort-Hashing)

Register.php:

<code class="php">// Replace previous code with the following:

session_start();

if (isset($_SESSION['userid'])) {
    // Redirect to safe page
}

if (isset($_POST['register'])) {
    $email = $_POST['email'];
    $password = $_POST['password']; // Cleartext password from user

    // New code for password hashing
    $hashed_password = password_hash($password, PASSWORD_DEFAULT);

    // Database connection and query
    $host = "localhost";
    $dbname = "database_name";
    $user = "username";
    $pass = "password";

    try {
        $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
        $stmt = $conn->prepare("INSERT INTO user_accounts (email, password) VALUES (?, ?)");
        $stmt->execute([$email, $hashed_password]);
        
        // Redirect to login page
        
        $conn = null;
    } catch (PDOException $e) {
        throw $e;
    }
}</code>
Nach dem Login kopieren

Login.php:

<code class="php">// Replace previous code with the following:

session_start();

if (isset($_SESSION['userid'])) {
    // Redirect to safe page
}

if (isset($_POST['login'])) {
    $email = $_POST['email'];
    $password = $_POST['password']; // Cleartext password from user

    // Database connection and query
    $host = "localhost";
    $dbname = "database_name";
    $user = "username";
    $pass = "password";

    try {
        $conn = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

        // Get hashed password from database
        $stmt = $conn->prepare("SELECT password FROM user_accounts WHERE email = ?");
        $stmt->execute([$email]);
        $hashed_db_password = $stmt->fetchColumn();

        if (password_verify($password, $hashed_db_password)) {
            // User authenticated successfully
            $_SESSION['userid'] = true;
            
            // Redirect to safe page
        } else {
            // Authentication failed
        }
        
        $conn = null;
    } catch (PDOException $e) {
        throw $e;
    }
}</code>
Nach dem Login kopieren

Mit diesen Codeänderungen sollte die Benutzeranmeldung nun ordnungsgemäß funktionieren, indem sie sicher mit der MySQL-Datenbank interagiert und beides verhindert SQL-Injection-Angriffe und die Kompromittierung von Benutzerkennwörtern.

Das obige ist der detaillierte Inhalt vonWarum stellt mein Anmeldeformular keine Verbindung zu meiner MySQL-Datenbank her?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage