Connexion + vérif mail valide ?

Résolu/Fermé
Utilisateur anonyme - 19 nov. 2016 à 20:46
 Utilisateur anonyme - 11 déc. 2016 à 13:36
Bonjour j'essaye de faire une vérification de l'email avec confirme, vu sur le code mais je sais pas du tout comment vérifier l'email,

sur ma table 'confirmekey' c'est la clé généré et envoyé par email, qui passe de 0 à 1 si le lien est validé.
Et 'confirme' c'est l'id du mail validé ou pas ( mail valide = 1; mail invalide = 0 ).
Je voudrai empêchez la connexion si on a pas validé le mail reçut.



if(isset($_POST['form_connexion']))
{
$pseudoconnect = htmlspecialchars($_POST['pseudoconnect']);
$passconnect = sha1($_POST['passconnect']);
if(!empty($pseudoconnect) AND !empty($pseudoconnect))
{
$requser = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND pass = ?");
$requser->execute(array($pseudoconnect, $passconnect));
$userexist = $requser->rowCount();
if($userexist == 1)
{
$userinfo = $requser->fetch();
$_SESSION['id'] = $userinfo['id'];
$_SESSION['pseudo'] = $userinfo['pseudo'];
$_SESSION['mail'] = $userinfo['mail'];
$_SESSION['avatar'] = $userinfo['avatar'];
$_SESSION['age'] = $userinfo['age'];
header("Location: profil.php?id=".$_SESSION['id']);
}
else
{
$erreur = "Mauvais identifiant inscrit !";
}

}
else
{
$erreur = "Tous les champs doivent être complétés !";
}
}

A voir également:

3 réponses

jordane45 Messages postés 38289 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 novembre 2024 4 703
Modifié par jordane45 le 19/11/2016 à 22:29
Bonjour,

Il te suffit d'ajouter une condition dans ton where pour vérifier que le champ mail est à 1 ou non.

Sans connaitre la structure de tes tables, il sera difficile de t'en dire plus.


NB : Concernant ton code, il y a quelques petites choses à améliorer :

pense à activer les erreurs PDO (en cas de soucis dans tes requêtes.)
Il faudra également, pour que ça fonctionne... placer tes requêtes dans des blocs TRY/Catch
Tout est expliqué là : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

Prends aussi l'habitude de récupérer "proprement" tes variables AVANT de les utiliser
Voir ici comment faire :
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index


Pour finir, evite d'utiliser RowCount.
Car comme indiqué dans le manuel 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.

Si la dernière requête SQL exécutée par l'objet PDOStatement associé est une requête de type SELECT, quelques bases de données retourneront le nombre de lignes retournées par cette requête. Néanmoins, ce comportement n'est pas garanti pour toutes les bases de données et ne devrait pas être exécuté pour des applications portables.

A la place, il est préférable de faire un fetchAll sur le résultat de ta requête puis un COUNT dessus
Un truc du genre :
$sql = "SELECT * FROM membres WHERE pseudo = ? AND pass = ?";
$datas =  array($pseudoconnect, $passconnect);
try{
  $requser = $bdd->prepare($sql);
  $requser->execute($datas);
   //on stocke le resultat dans un array
  $result = $requser->fetchAll();
}catch(Exception $e){
  // en cas d'erreur
  echo " Erreur ! ".$e->getMessage();
}
// si  $result n'est pas vide, on compte le nombre de résultat, sinon on lui affecte la valeur NULL
$userexist = !empty( $result) ? count( $result) : NULL;


// ...   le reste de ton code



NB² : les fonctions htmlspecialchars sont utilisées lors de l'affichage.... pas pour stocker en BDD ni pour les requêtes.


Cordialement,
Jordane                                              
0
Hey, salut merci pour ta réponse,
c'est une bonne idée de rajouter une condition dans le WHERE mais le problème c'est que la même erreur s'affiche si on entre les mauvais login et si on oublie de validé le mail.
ça serait possible de tester avec une requête le mail après avoir tester le mot de passe et le pseudo ?
Pour le reste du code je préfère ne pas toucher je suis un peu perdu avec ton fetchAll et ton count x)
PS : j'ai déjà activer les erreurs avancée php pour pouvoir configurer mon site correctement.
0
Utilisateur anonyme
11 déc. 2016 à 00:00
Je réponds au sujet car j'ai trouver la réponse moi même à ma demande, merci quand même pour l'aide.


if(isset($_POST['form_connexion']))
{
	$pseudoconnect = htmlspecialchars($_POST['pseudoconnect']);
	$passconnect = hash("sha512",($_POST['passconnect']));
	$banconnect = $_GET['banconnect'];
	$confirmeconnect = $_GET['confirmeconnect'];
	if(!empty($pseudoconnect) AND !empty($pseudoconnect))
	{
		$requser = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND pass = ?");// confirme = 1 = email confirmer || ban = 0 = non bannis \\
		$requser->execute(array($pseudoconnect, $passconnect));
		$userexist = $requser->rowCount();
		if($userexist == 1)
		{
			$requser = $bdd->prepare("SELECT * FROM membres WHERE confirme = 1");// confirme = 1 = email confirmer || ban = 0 = non bannis \\
			$requser->execute(array($confirmeconnect));
			$userexist = $requser->rowCount();
			if($userexist == 1)
			{
				$requser = $bdd->prepare("SELECT * FROM membres WHERE ban = 0");// confirme = 1 = email confirmer || ban = 0 = non bannis \\
				$requser->execute(array($banconnect));
				$userexist = $requser->rowCount();
				if($userexist == 1)
				{
					$userinfo = $requser->fetch();
					$_SESSION['id'] = $userinfo['id'];
					$_SESSION['pseudo'] = $userinfo['pseudo'];
					$_SESSION['mail'] = $userinfo['mail'];
					header("Location: profil.php?id=".$_SESSION['id']);
				}
				else
				{
					$erreur = "Votre compte à été bannis !";
				}
			}
			else
			{
				$erreur = "L'email n'a pas été validé !";
			}
		}
		else
		{
			$erreur = "Mauvais identifiant inscrit !";
		}

	}
	else
	{
		$erreur = "Tous les champs doivent être complétés !";
	}
}

0
Utilisateur anonyme
11 déc. 2016 à 13:36
Edit : quelque erreur dans mon code.


if(isset($_POST['form_connexion']))
{
	$pseudoconnect = htmlspecialchars($_POST['pseudoconnect']);
	$passconnect = hash("sha512",($_POST['passconnect']));
	$banconnect = htmlspecialchars($_GET['banconnect']);
	$confirmeconnect = htmlspecialchars($_GET['confirmeconnect']);
	if(!empty($pseudoconnect) AND !empty($pseudoconnect))
	{
		$requser = $bdd->prepare("SELECT * FROM membres WHERE pseudo = ? AND pass = ?");
		$requser->execute(array($pseudoconnect, $passconnect));
		$userexist = $requser->rowCount();
		if($userexist == 1)
		{
			$requser2 = $bdd->prepare("SELECT * FROM membres WHERE confirme = ?");// confirme = 1 = email confirmer \\
			$requser2->execute(array($confirmeconnect));
			$userexist2 = $requser2->rowCount();
			if($userexist2 == 1)
			{
				$requser3 = $bdd->prepare("SELECT * FROM membres WHERE ban = ?");// ban = 0 = non bannis \\
				$requser3->execute(array($banconnect));
				$userexist3 = $requser3->rowCount();
				if($userexist3 == 0)
				{
					$userinfo = $requser->fetch();
					$_SESSION['id'] = $userinfo['id'];
					$_SESSION['pseudo'] = $userinfo['pseudo'];
					$_SESSION['mail'] = $userinfo['mail'];
					header("Location: profil.php?id=".$_SESSION['id']);
				}
				else
				{
					$erreur = "Votre compte à été bannis !";
				}
			}
			else
			{
				$erreur = "L'email n'a pas été validé !";
			}
		}
		else
		{
			$erreur = "Mauvais identifiant inscrit !";
		}

	}
	else
	{
		$erreur = "Tous les champs doivent être complétés !";
	}
}

0