Maison > développement back-end > tutoriel php > Pourquoi mon formulaire de connexion ne se connecte-t-il pas à ma base de données MySQL ?

Pourquoi mon formulaire de connexion ne se connecte-t-il pas à ma base de données MySQL ?

Mary-Kate Olsen
Libérer: 2024-10-25 11:13:02
original
851 Les gens l'ont consulté

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

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.

Résolution du problème

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 :

  • Utiliser des instructions préparées : Paramétrer les entrées utilisateur pour empêcher les attaques par injection SQL. Au lieu d'intégrer directement les entrées de l'utilisateur dans les requêtes SQL, des espaces réservés sont utilisés et les paramètres sont liés à ces espaces réservés.
  • Mettre en œuvre un hachage de mot de passe approprié : Stockez les mots de passe en toute sécurité à l'aide de fonctions de hachage unidirectionnelles telles que bcrypt ou PBKDF2. Cela empêche les utilisateurs non autorisés d'accéder aux mots de passe en texte brut en cas de violation de données.

Solution de code (à l'aide d'instructions préparées et de hachage de mot de passe)

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal