Menu

Vérification de l'authenticité du compte [Résolu/Fermé]

Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention - 21 avril 2017 à 09:16 - Dernière réponse : jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention
- 15 mai 2017 à 17:12
Bonjour, j'essaye de faire plusieurs requêtes pour vérifier sur ma table si l'utilisateur, à le bon mot de passe et ndc, son mail est valide, et s'il est bannis, malheureusement mon code ne fonctionne pas, aidez moi svp.


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($userexist == 1)
			{
				$requser3 = $bdd->prepare("SELECT * FROM membres WHERE ban = ?");// ban = 1 = non bannis \\
				$requser3->execute(array($banconnect));
				$userexist3 = $requser3->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 !";
	}
}





table :

http://static.ccm2.net/www.commentcamarche.net/pictures/d5xMJc935MCTD9eH2LX7gVIHBQl4iFOG6HVXgxwYxwaDJVvRJW9HxDlN32HMCsCj-eeeeee-s-.png
Afficher la suite 

14 réponses

jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - Modifié par jordane45 le 21/04/2017 à 09:43
0
Utile
2
Bonjour,

Une seule requête suffit ...
SELECT * FROM membres WHERE pseudo = ? AND pass = ?


De là ... ta requête te retourne les infos (si le pseudo et le password sont bon.. ) de l'utilisateur.
Donc tu as directement les infos correspondantes à l'utilisateur :
- id
- pseudo
- mail
- confirme
- ban


NB: Comme indiqué dans la doc .. il faut éviter d'utiliser RowCOunt.
Il est préférable de faire un fetchAll de ta requête puis d'y faire un COUNT.

$sql = "SELECT * FROM membres WHERE pseudo = ? AND pass = ?";
$datas = array($pseudoconnect, $passconnect);
try{
   $prep= $bdd->prepare($sql);
   $prep->execute($datas);
   $a_result = $prep->fetchAll();
   $nbResult =  !empty($a_result) ? count($a_result) : 0;
}catch(Exception $e){
  echo " Erreur : " . $e->getMessage();
}


$userexist = $nbResult;
if($userexist == 1) {

  $userinfo = $a_result[0];
  $id =  $userinfo['id'];
  $confirme=  $userinfo['confirme'];
  $ban=  $userinfo['ban'];
  $mail=  $userinfo['mail'];

 if($ban == 1 ){
  if($mail == 1 ){
    $_SESSION['id'] = $id;
    $_SESSION['pseudo'] = $pseudoconnect
    $_SESSION['mail'] = $mail;
    header("Location: profil.php?id=".$id);
    exit();
  }else{
    $erreur = "L'email n'a pas été validé !";
  }
 }else{
     $erreur = "Votre compte à été bannis !";
 }
}else{
   $erreur = "Mauvais identifiant inscrit !";
}




Pense également à activer la gestion des erreurs PDO
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

.






Cordialement, 
Jordane                                                                 
Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention - 15 mai 2017 à 10:03
Salut et merci pour ton aide malheureusement j'ai un problème, j'ai l'impression que cela vient du mot de passe qu'il n'est plus hashé comme pour ma ligne :

$passconnect = hash("sha512",($_POST['passconnect']));

Une erreur est apparu aussi à ta ligne 26 tu as oublié le signe " ; " x)
Et surtout quand j'arrive directement sur la page sans me logé j'ai par défault l'erreur mauvais identifiant.
jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention > Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention - 15 mai 2017 à 10:35

Une erreur est apparu aussi à ta ligne 26 tu as oublié le signe " ; " x)

ça arrive ... quand on code de tête ...


Et surtout quand j'arrive directement sur la page sans me logé j'ai par défault l'erreur mauvais identifiant.

Il suffit de placer mon code dans ton premier IF
if(isset($_POST['form_connexion'])) {
  
  //ici le code

}




j'ai un problème, j'ai l'impression que cela vient du mot de passe qu'il n'est plus hashé comme pour ma ligne :

$passconnect = hash("sha512",($_POST['passconnect']));

Ben je ne sais pas ... quel est le code actuel de ta page ?

Et puis... désormais pour vérifier les mots de pass en php il est conseillé d'utiliser la fonction password_verify

Voici un exemple :
http://www.commentcamarche.net/forum/affich-34340900-login-password-php#7
Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention - 15 mai 2017 à 11:40
0
Utile
1
Je ne comprends pas trop password_verify je ne suis pas un expert dans le php, c'est à dire le code actuel de ma page, tu veux dire tout le code?
jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 15 mai 2017 à 11:44

Je ne comprends pas trop password_verify je ne suis pas un expert dans le php

C'est bien pour ça que je t'ai donné le lien vers la documentation ET un lien vers un exemple.


'est à dire le code actuel de ma page, tu veux dire tout le code?

Ben oui.... le code que tu as désormais suite aux modifications proposées dans les réponses précédentes.....
Commenter la réponse de Amnexia
Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention - Modifié par Amnexia le 15/05/2017 à 13:17
0
Utile
7
<?php
session_start();

include('../php/config.php');

if(isset($_POST['form_connexion']))
{

 $sql = "SELECT * FROM membres WHERE pseudo = ? AND pass = ?";
 $datas = array($pseudoconnect, $passconnect);
 try{
    $prep= $bdd->prepare($sql);
    $prep->execute($datas);
    $a_result = $prep->fetchAll();
    $nbResult =  !empty($a_result) ? count($a_result) : 0;
 }catch(Exception $e){
   echo " Erreur : " . $e->getMessage();
 }

 $userexist = $nbResult;
 if($userexist == 1) {

   $userinfo = $a_result[0];
   $id =  $userinfo['id'];
   $confirme=  $userinfo['confirme'];
   $ban=  $userinfo['ban'];
   $mail=  $userinfo['mail'];

  if($ban == 1 ){
   if($mail == 1 ){
     $_SESSION['id'] = $id;
     $_SESSION['pseudo'] = $pseudoconnect;
     $_SESSION['mail'] = $mail;
     header("Location: profil.php?id=".$id);
     exit();
   }else{
     $erreur = "L'email n'a pas été validé !";
   }
  }else{
      $erreur = "Votre compte à été bannis !";
  }
 }else{
    $erreur = "Mauvais identifiant inscrit !";
 }
}
?>


<!DOCTYPE html>
<html>
 <head>
  <title>Connexion</title>
  <meta charset="UTF-8" />
     <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
     <meta name="description" content="Connexion PHP / CSS / HTML" />
     <meta name="author" content="Amnexia" />
     <meta name="google" content="notranslate" />
     <link rel="shortcut icon" href="../asset/favicon.png" />
     <link rel="stylesheet" type="text/css" href="../asset/css/style.css" />
     <link rel="stylesheet" type="text/css" href="../asset/css/animate-custom.css" />
 </head>
 <body background="../asset/img/bg.jpg"><br /><br /><br /><br /><br /><br />
        <div id="container_demo" >
     <a class="hiddenanchor" id="tologin"></a>
        <div id="wrapper">
            <div id="login" class="animate form">
                <form method="POST" action="">
                    <h1> Connexion </h1> 
                    <p>
                        <label for="pseudoconnect" class="uname" data-icon="u" > Pseudo : </label>
                        <input id="pseudoconnect" autocomplete="off" name="pseudoconnect" required="Pseudo Requis /!\" type="text" placeholder="Pseudo"/>
                    </p>
                    <p>
                        <label for="password" class="youpasswd" data-icon="p"> Mot de passe : </label>
                        <input id="password" autocomplete="off" name="passconnect" required="Mot de passe Requis /!\" type="password" placeholder="Mot de passe" /> 
                    </p>
                    <p class="login button">
                        <input type="submit" name="form_connexion" value="Se connecter" /> 
     </p>
                    <p class="change_link">
      Pas encore inscrit ?
      <a href="inscription.php" rel="nofollow noopener noreferrer" target="_blank" class="to_register">Inscrit toi !</a><a href="recup.php" rel="nofollow noopener noreferrer" target="_blank" class="to_register">Mot de passe oublié ?</a>
     </p>
                </form>
            </div>
        </div>
  </div>
  <center>
  <?php
  if(isset($erreur))
  {
   echo '<font color="red" size="5">'.$erreur.'</font>';
  }
  ?>
  </center>
 </body>
</html>
jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention > Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention - 15 mai 2017 à 16:15

ça bug maintenant au niveau du mail valide ou pas peu importe 0 ou 1 c'est compté comme invalide ( " L'email n'a pas été validé ! " ).

Tu mets le 0 ou 1 à quel endroit ? Dans ta BDD ?

Peux tu faire un
print_r( $a_result);

et nous dire ce que ça t'affiche.

Au passage .. il existe une "norme" pour l'écriture du code. Elle n'est pas obligatoire.. mais dans l'ensemble cela permet de rendre le code plus lisible (et homogène..) pour tout le monde.
Donc pour tes if/else... si tu pouvais en tenir compte.. merci.

http://www.php-fig.org/psr/psr-2/#if-elseif-else
Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention > jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 15 mai 2017 à 16:21
Voila ce que ça me donne :

Array ( [0] => Array ( [id] => 13 [0] => 13 [pseudo] => Amnexiaa [1] => Amnexiaa [pass] => *********** [mail] => ******@************ [3] => ******@************ [avatar] => 0.jpg [4] => 0.jpg [confirmkey] => 81087108134862199 [5] => 81087108134862199 [confirme] => 1 [6] => 1 [age] => 0 [7] => 0 [modo] => 1 [8] => 1 [ban] => 1 [9] => 1 [recup] => [10] => ) )
jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention > Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention - 15 mai 2017 à 16:34
Donc ta variable mail .. est : [mail] => ******@************
Donc.. elle ne vaut pas 1 ....

Toi ça serait plutôt la vairable CONFIRME que tu veux utiliser non ?
[confirme] => 1
if($mail == 1 ) {
A remplacer donc par :
if($confirme== '1' ) {
Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention > jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention - 15 mai 2017 à 16:39
Parfais merci à toi
jordane45 20602 Messages postés mercredi 22 octobre 2003Date d'inscriptionModérateurStatut 23 avril 2018 Dernière intervention > Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention - 15 mai 2017 à 17:12
N'oublie pas de mettre le sujet en RESOLU (lien sous le titre de ta question)
Commenter la réponse de Amnexia
Amnexia 83 Messages postés samedi 19 novembre 2016Date d'inscription 6 février 2018 Dernière intervention - 15 mai 2017 à 13:18
0
Utile
Voila le code complet de la page de connexion
Commenter la réponse de Amnexia