Confirmation par mail- PHP

Fermé
mik12ED Messages postés 36 Date d'inscription mercredi 15 juillet 2015 Statut Membre Dernière intervention 8 mars 2016 - 10 sept. 2015 à 19:06
mik12ED Messages postés 36 Date d'inscription mercredi 15 juillet 2015 Statut Membre Dernière intervention 8 mars 2016 - 11 sept. 2015 à 23:14
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>
A voir également:

1 réponse

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
11 sept. 2015 à 09:40
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
0
mik12ED Messages postés 36 Date d'inscription mercredi 15 juillet 2015 Statut Membre Dernière intervention 8 mars 2016
11 sept. 2015 à 11:46
Je vois Pitet Merci beaucoup mais du coup comment tu crées le script ?
Je vais essayer de mon cote pour trouver tout seul évidemment mais comment toi tu ferais ?

Merci beaucoup
0
mik12ED Messages postés 36 Date d'inscription mercredi 15 juillet 2015 Statut Membre Dernière intervention 8 mars 2016
11 sept. 2015 à 11:57
Je t'avoue j'ai un peu de mal a trouver tout seul
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
11 sept. 2015 à 12:05
Tu n'as quasiment qu'à reprendre le code de l'exemple 2 de la doc :
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 !";
	}
}
0
mik12ED Messages postés 36 Date d'inscription mercredi 15 juillet 2015 Statut Membre Dernière intervention 8 mars 2016
11 sept. 2015 à 12:08
Ca ne marche pas pitet J'ai le meme message d'erreur, l'utilisateur n'existe pas
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 11/09/2015 à 12:29
Les données en bdd correspondent bien aux données envoyées via $_GET ?

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 !";
	}
}
0