[英]Troubles with verifying a SQL request using a PDO prepare
我制作了一個名為loginForm.php
的html
登錄表單,我們在其中輸入姓氏、名字和密碼。 我正在使用$_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.