Impossible de connecter le formulaire de connexion à la base de données MySQL
Cette demande concerne la mise en œuvre d'une fonctionnalité de connexion utilisateur qui vérifie par rapport à une base de données MySQL. L'utilisateur s'attend à saisir un nom d'utilisateur et un mot de passe, qui doivent être validés par rapport aux informations d'identification stockées dans la base de données. Malheureusement, même si le formulaire est soumis sans erreur, la fonctionnalité souhaitée n'est pas obtenue.
La cause première de ce problème réside dans le manque de protection contre les attaques par injection SQL et l'insécurité stockage des mots de passe en texte brut dans la base de données. Pour répondre à ces problèmes, il est recommandé de :
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>
Avec ces modifications de code, la connexion de l'utilisateur devrait désormais fonctionner correctement en interagissant de manière sécurisée avec la base de données MySQL, empêchant à la fois Attaques par injection SQL et compromission des mots de passe des utilisateurs.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!