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.
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:
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>
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>
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!