簡體   English   中英

使用 PDO 准備驗證 SQL 請求時遇到問題

[英]Troubles with verifying a SQL request using a PDO prepare

我制作了一個名為loginForm.phphtml登錄表單,我們在其中輸入姓氏、名字和密碼。 我正在使用$_GET方法來執行loginCheck.php 在此頁面中,我構建了一個PHP PDO並取回所有表單變量。

然后我用 PDO 編寫了一個准備好的請求,並嘗試比較表單變量和表格字段值。

登錄Form.php

<div class="formulaire">
<form action="./loginCheck.php" method="GET">
    <h3>Connectez-vous</h3>
    <div class="ligne">
        <div class="col25">
            <label for="nom"><i class="fas fa-user"></i> Nom</label>
        </div>
        <div class="col75">
            <input type="text" id="nom" name="nom" placeholder="ex: Martin">
        </div>
    </div>
    <div class="ligne">
        <div class="col25">
            <label for="prenom"><i class="fas fa-user"></i> Prénom</label>
        </div>
        <div class="col75">
            <input type="text" id="prenom" name="prenom" placeholder="ex: Pierre">
        </div>
    </div>
    <div class="ligne">
        <div class="col25">
            <label for="motDePasse"><i class="fas fa-unlock-alt"></i> Mot de Passe</label>
        </div>
        <div class="col75">
            <input type="password" id="mdp" name="mdp" placeholder="ex: motdepasse123">
        </div>
    </div>
    <div class="ligne">
        <div class="col25">
            <label for="remember" style="font-size: 80%"><i class="fas fa-user-check"></i> Se souvenir de moi</label>
        </div>
        <div class="col75">
            <label class="switch">
                <input type="checkbox"><span class="slider"></span>
            </label>
        </div>
        <div class="ligne">
            <button class="valider" type="submit" formaction="./loginCheck.php" formmethod="get"><i class="fas fa-sign-in-alt"></i> Se connecter</button>
        </div>
    </div>
</form>

<div style="font-size: 50%">Pas encore de compte ? <a href="inscription">Inscrivez-vous</a></div>

loginCheck.php

<?php
/* Connexion à la base de données et gestion des erreurs */
try{
    $dbc = new PDO("mysql:host=ckdhjqodomiform.mysql.db;dbname=ckdhjqodomiform;charset=UTF8", "ckdhjqodomiform", "D0miform01");
    $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    echo 'Échec lors de la connexion : '.$e->getMessage();
}

if(isset($_GET['nom']) and !empty($_GET['nom']) and isset($_GET['prenom']) and !empty($_GET['prenom']) and isset($_GET['motDePasse']) and !empty($_GET[''])) {

    $nom = $_GET['nom'];
    $prenom = $_GET['prenom'];
    $motDePasse = $_GET['motDePasse'];

    $requete = $dbc->prepare("SELECT nom, prenom motDePasse FROM COMPTE WHERE nom= :nom AND prenom= :prenom AND motDePasse= :motDePasse");
    $requete->bindParam(':nom', $nom);
    $requete->bindParam(':prenom', $prenom);
    $requete->bindParam(':motDePasse', $motDePasse);
    $requete->execute();
    $verif = $requete->fetchColumn();
}

    if($verif == 0) {
        $loginMessage = "Vos informations sont incorrectes.";
    } else {
        $sqlRes = $requete->fetch();
        $_SESSION['nom'] = $sqlRes['nom'];
        $_SESSION['prenom'] = $sqlRes['prenom'];
        $_SESSION['motDePasse'] = $sqlRes['motDePasse'];
        $loginMessage = "Connexion réussie";
    }
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

    <link rel="icon" type="image/png" href="./img/logo_icon.png" size="256x256">
    <link rel="stylesheet" href="../styles/stylePrincipal.css"/><!-- Importation du style principal -->
    <link rel="stylesheet" href="../styles/responsiveBarStyle.css"/><!-- Importation du style du menu de navigation latèrale -->
    <script src="https://kit.fontawesome.com/53c23ad143.js" crossorigin="anonymous"></script><!-- Importation du kit FontAwesome pour des icônes stylisés -->
    
    
    <title>Domiform - Envoi du mail</title>
</head>

<body>
    <?php include "../modules/responsiveBar.php" ?>
    <header><img class="title" src="../img/title.png"></header>
    
    <main style="padding-bottom: 9%">
        <section id="mailConfirm">
           <p>
            <?php 
                echo $loginMessage;
                $delai= 4;
                $url = "./contacts.php#contactMail";
                header("Refresh: $delai ;url=$url");
                ?>
            </p>
           <p>Vous allez être redirigé sur la page d'accueil.</p>
        </section>
    </main>
    
    <?php include "../modules/footer.php" ?>
</body>

實際上,當我提交表格時,它說我的信息不正確,但它們目前是錯誤的,所以也許我是盲人並且我錯過了錯誤,或者我缺乏知識並且不知道如何解決我的問題。

所以我需要一些幫助,如果有人願意幫助一個靈魂。

@aynber 我試着按照你告訴我的去做,但我可能沒有找到正確的方法。 我確定您的解決方案是最安全的,這就是我正在尋找的,但我不知道如何應用它。

這是我更新php代碼:

<?php

    /* Connexion à la base de données et gestion des erreurs */
    try{
        $dbc = new PDO("mysql:host=ckdhjqodomiform.mysql.db;dbname=ckdhjqodomiform;charset=UTF8", "ckdhjqodomiform", "D0miform01");
        $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
        $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo 'Échec lors de la connexion : '.$e->getMessage();
    }

    $sql = "SELECT nom, prenom FROM COMPTE";
    $username = $dbc->query($sql);

    $motDePasse = $_GET['motDePasse'];
    $cryptMDP = password_hash($motDePasse, PASSWORD_BCRYPT);

    $sql2 = "SELECT motDePasse FROM COMPTE";
    $user_password = $dbc->query($sql2);

    if(password_verify($user_password, $cryptMDP) === true) {
        $loginMessage = "Connexion réussie.";
    }else{
        $loginMessage = "Vos informations sont incorrectes.";
    }
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM