Confirmation par mail- PHP
                    
        
     
             
                    mik12ED
    
        
    
                    Messages postés
            
                
     
             
            40
        
            
                                    Statut
            Membre
                    
                -
                                     
mik12ED Messages postés 40 Statut Membre -
        mik12ED Messages postés 40 Statut Membre -
        Bonjour tout le monde, 
J'ai créé un espace membre. Donc, j'ai fait parvenir un mail de confirmation de compte et le pb c'est eu le PHP m'affiche direct "L'utilisateur n'existe pas !"
Très étrange je trouve.
SI quelqu'un à une astuce ou a trouvé l'erreur ou le pb je suis preneur merci.
<?php
$bdd = new PDO('mysql:host=localhost;dbname=candidats', 'root', 'root');
if(isset($_GET['mail'], $_GET['key']) AND !empty($_GET['mail']) AND !empty($_GET['key']))
{
$mail = htmlspecialchars(urldecode($_GET['mail']));
$key = htmlspecialchars($_GET['key']);
$requser = $bdd->prepare("SELECT * FROM candidats WHERE mail = ? AND confirmkey = ?");
$requser->execute(array($mail, $key));
$userexist = $requser->rowCount();
if($userexist == 1)
{
$user = $requser->fetch();
if($user['confirme'] == 0)
{
$updateuser = $bdd->prepare("UPDATE candidats SET confirme = 1 WHERE mail = ? AND confirmkey = ?");
$updateuser->execute(array($mail, $key));
echo "Votre compte a bien été confirmé ! ";
}
else
{
echo "Votre compte a déjà été confirmé !";
}
}
else
{
echo "L'utilisateur n'existe pas !";
}
}
	
?>
<!DOCTYPE html>
<html>
<head>
<title>Confirmation de compte </title>
<meta charset="utf8"/>
</head>
<body>
<h1>Confirmation de compte </h1>
</body>
</html>
                
            
                
    
    
    
        J'ai créé un espace membre. Donc, j'ai fait parvenir un mail de confirmation de compte et le pb c'est eu le PHP m'affiche direct "L'utilisateur n'existe pas !"
Très étrange je trouve.
SI quelqu'un à une astuce ou a trouvé l'erreur ou le pb je suis preneur merci.
<?php
$bdd = new PDO('mysql:host=localhost;dbname=candidats', 'root', 'root');
if(isset($_GET['mail'], $_GET['key']) AND !empty($_GET['mail']) AND !empty($_GET['key']))
{
$mail = htmlspecialchars(urldecode($_GET['mail']));
$key = htmlspecialchars($_GET['key']);
$requser = $bdd->prepare("SELECT * FROM candidats WHERE mail = ? AND confirmkey = ?");
$requser->execute(array($mail, $key));
$userexist = $requser->rowCount();
if($userexist == 1)
{
$user = $requser->fetch();
if($user['confirme'] == 0)
{
$updateuser = $bdd->prepare("UPDATE candidats SET confirme = 1 WHERE mail = ? AND confirmkey = ?");
$updateuser->execute(array($mail, $key));
echo "Votre compte a bien été confirmé ! ";
}
else
{
echo "Votre compte a déjà été confirmé !";
}
}
else
{
echo "L'utilisateur n'existe pas !";
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Confirmation de compte </title>
<meta charset="utf8"/>
</head>
<body>
<h1>Confirmation de compte </h1>
</body>
</html>
        A voir également:         
- Confirmation par mail- PHP
- Confirmation de lecture whatsapp - Guide
- Windows live mail - Télécharger - Mail
- Confirmation de lecture gmail - Guide
- Publipostage mail - Accueil - Word
- Sms code de confirmation facebook sans demande ✓ - Forum Réseaux sociaux
1 réponse
                        
                    Salut,
Un petit tour sur la doc de PDO::rowCount() : https://www.php.net/manual/fr/pdostatement.rowcount.php
PDOStatement::rowCount() retourne le nombre de lignes affectées par la dernière requête DELETE, INSERT ou UPDATE exécutée par l'objet PDOStatement correspondant.
Le 2ème exemple de cette doc te donne la solution : https://www.php.net/manual/fr/pdostatement.rowcount.php#example-1034
Bonne journée
    
                Un petit tour sur la doc de PDO::rowCount() : https://www.php.net/manual/fr/pdostatement.rowcount.php
PDOStatement::rowCount() retourne le nombre de lignes affectées par la dernière requête DELETE, INSERT ou UPDATE exécutée par l'objet PDOStatement correspondant.
Le 2ème exemple de cette doc te donne la solution : https://www.php.net/manual/fr/pdostatement.rowcount.php#example-1034
Bonne journée
 
    
    
    
    
Je vais essayer de mon cote pour trouver tout seul évidemment mais comment toi tu ferais ?
Merci beaucoup
Il suffit de remplacer ta requête sql par un SELECT COUNT(*) et d'utiliser fetchColumn à la place de rowCount :
<?php $bdd = new PDO('mysql:host=localhost;dbname=candidats', 'root', 'root'); if(isset($_GET['mail'], $_GET['key']) AND !empty($_GET['mail']) AND !empty($_GET['key'])) { $mail = htmlspecialchars(urldecode($_GET['mail'])); $key = htmlspecialchars($_GET['key']); $requser = $bdd->prepare("SELECT COUNT(*) FROM candidats WHERE mail = ? AND confirmkey = ?"); $requser->execute(array($mail, $key)); if($requser->fetchColumn() > 0) { $user = $requser->fetch(); if($user['confirme'] == 0) { $updateuser = $bdd->prepare("UPDATE candidats SET confirme = 1 WHERE mail = ? AND confirmkey = ?"); $updateuser->execute(array($mail, $key)); echo "Votre compte a bien été confirmé ! "; } else { echo "Votre compte a déjà été confirmé !"; } } else { echo "L'utilisateur n'existe pas !"; } }Essaye d'enlever htmlspecialchars et urldecode, ce n'est pas une bonne pratique d'insérer des entités html en bdd et urldecode ne devrait pas être nécessaire.
Tu peux également essayer d'utiliser une requête simple à la place de la requête préparée, ce qui te permet d'afficher la requête pour la tester directement dans ton client sql (PhpMyAdmin par exemple).
<?php // afficher les erreurs PHP (à supprimer lors de la mise en ligne) error_reporting(E_ALL); ini_set('display_errors', true); $bdd = new PDO('mysql:host=localhost;dbname=candidats', 'root', 'root'); // afficher les erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // empty() teste déjà l'existence (isSet) de la variable, donc pas besoin d'utiliser isset si on utilise empty if(!empty($_GET['mail']) && !empty($_GET['key'])) { $mail = $_GET['mail']; $key = $_GET['key']; $sql = 'SELECT COUNT(*) FROM candidats WHERE mail = ' . $bdd->quote($mail) . ' AND confirmkey = ' . $bdd->quote($key); // affichage de la requête pour les tests echo '<pre>'; echo $sql; echo '</pre>'; $requser = $bdd->query($sql); if($requser->fetchColumn() > 0) { $requser = $bdd->prepare("SELECT * FROM candidats WHERE mail = ? AND confirmkey = ?"); $requser->execute(array($mail, $key)); $user = $requser->fetch(); if($user['confirme'] == 0) { $updateuser = $bdd->prepare("UPDATE candidats SET confirme = 1 WHERE mail = ? AND confirmkey = ?"); $updateuser->execute(array($mail, $key)); echo "Votre compte a bien été confirmé ! "; } else { echo "Votre compte a déjà été confirmé !"; } } else { echo "L'utilisateur n'existe pas !"; } }