[RESOLU] S'identifier avec pseudo ou email

Eléphant du PHP | 372 Messages

27 mars 2016, 20:35

Salut à tous.
J'ai un formulaire d'identification pour mes visiteurs, ça marche nikel mais j'aimerais faire en sorte qu'ils puissent s'identifier avec leur pseudo ou leur email comme ils veulent actuellement ça marche juste avec le pseudo.

En bdd je récupére le champ email que je stock ds une colonne du meme nom email

Mon code:
<?php 
	//soumission du formulaire
	if(!empty($_POST)) {
		
		$erreurs = array();   //tableau contenant des messages d'erreurs
		
		if(empty($_POST['pseudo'])) $erreurs['pseudo'] = 'Renseigner un pseudo'; //vérification du pseudo
		if(empty($_POST['password'])) $erreurs['password'] = "le mot de passe est requis"; //vérification du mot de passe
		// le tableau d'erreurs est vide alors on insère les données
		if(count($erreurs) == 0) {
			
		  $pseudo = $_POST['pseudo'];
		  $password_hache = sha1($_POST['password']);
		  $message = authentificationPro( $pseudo, $password_hache ); //appel de la fonction d'authentification
		
		}
	}	
?>


<form class="ins_con" method="post" action="compte_utilisateur_connexion.php">
      				  <label>Identifiant</label>
                      <div class="input-group input-group animated bounceInLeft">
                      <span class="input-group-addon"><i class="fa fa-user white"></i></span>
                      <input class="form-control" name="pseudo" type="text" placeholder="Votre identifiant" value="<?php if(isset($_POST['pseudo'])) echo $_POST['pseudo'];?>" /></div> 
    				  <?php if(isset($erreurs['pseudo'])) echo '<div class="alert alert-danger" role="alert"><i class="fa fa-frown-o"></i> ' .$erreurs['pseudo'].'</div>';?> 
       
					 <br> 
       
       				 <label>Mot de passe</label>
                     <div class="input-group input-group animated bounceInRight ">
                      <span class="input-group-addon"><i class="fa fa-lock white"></i></span>
                     <input class="form-control" name="password" type="password" placeholder="Mot de passe" value="<?php if(isset($_POST['pseudo'])) echo $_POST['pseudo'];?>" /></div> 
                     <?php if(isset($erreurs['password'])) echo '<div class="alert alert-danger" role="alert"><i class="fa fa-frown-o"></i> ' .$erreurs['password'].'</div>';?> 
                     
                     
                     <br>
                     <input type="checkbox" name="remember"> Se souvenir de moi </span>
                     
                     <!-- redirection créer un compte -->
                     <a href="compte_utilisateur_inscription.php"><span class="pull-right green"><i class="fa fa-hand-o-right"></i> Créer un compte</span></a>
                     
               		 <br>
               
               		<?php echo !empty($message) ? $message : NULL; ?>
       
					<br>
      
       <input class="find animated bounceInUp" type="submit" value="ENVOYER">
     </form>

Eléphant du PHP | 243 Messages

28 mars 2016, 00:39

Bonjour,
Pour permettre une identification avec un pseudo ou un mail, il faudra modifier la méthode authentificationPro().
Du côté de la requête SQL qui permettra de recherche si l'utilisateur existe bel et bien avec les données renseignées, il faudra utiliser OR dans ta clause WHERE.
Ça donnera un truc du genre :

Code : Tout sélectionner

SELECT * FROM users WHERE (pseudo=$nom OR mail=$nom) AND motdepasse=$mdp
"Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent"
~~Lorenzo Strigini

Eléphant du PHP | 372 Messages

28 mars 2016, 21:59

Voilà à quoi correspond authentificationPro
/*
vérifie l'existence de l'utilisateur à partir
de son login et son mot de passe
*/
function authentificationPro($pseudo, $password){
	
  global $bdd;

	$return = NULL;
	
   // Vérification des identifiants
  $req = $bdd->prepare('SELECT * FROM simply_user WHERE pseudo = :pseudo AND password = :password');
  $req->execute(array(
                        'pseudo' => $pseudo,
                        'password' => $password
			));

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 mars 2016, 03:17

Donc tu n'as plus qu'à adapter la réponse d'Acla au code de ta fonction authentificationPro()
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 372 Messages

29 mars 2016, 07:21

J'ai essayé ca mais ca ne marche qu'avec le pseudo:
/*
vérifie l'existence de l'utilisateur à partir
de son login et son mot de passe
*/
function authentificationPro($pseudo, $password,$email){
	
  global $bdd;

	$return = NULL;
	
   // Vérification des identifiants
  $req = $bdd->prepare('SELECT * FROM simply_user WHERE pseudo = :pseudo OR email =:email AND password = :password');
  
  $req->execute(array(
                        'pseudo' => $pseudo,
						'email' => $email,
                        'password' => $password
			));
						
			
						
  if($req->rowCount() > 0) {
	  
  	$resultat = $req->fetch();
	$_SESSION['membre'] = $resultat;
	$_SESSION['pseudo'] = $resultat['pseudo'];
	$_SESSION['email'] = $resultat['email'];
	$_SESSION['password'] = $resultat['password'];
	$_SESSION['id_region'] = $resultat['id_region']; 
	$_SESSION['type'] = 'client';
	$_SESSION['statut'] = $resultat['statut'];
		
	if(!empty($_POST['remember'])) setcookie('identification', serialize(array($pseudo, $password)), mktime(0, 0, 0, date('m'), date('d'), date('Y')+1), '/');
<?php 

	//soumission du formulaire
	if(!empty($_POST)) {
		
		$erreurs = array();   //tableau contenant des messages d'erreurs
	
		if(empty($_POST['pseudo'])) $erreurs['pseudo'] = 'Renseigner un pseudo'; //vérification du pseudo
		if(empty($_POST['password'])) $erreurs['password'] = "le mot de passe est requis"; //vérification du mot de passe
		// le tableau d'erreurs est vide alors on insère les données
		if(count($erreurs) == 0) {
			
		  $pseudo = $_POST['pseudo'];
		  $email = $_POST['email'];
		  $password_hache = sha1($_POST['password']);
		  $message = authentificationPro( $pseudo, $email, $password_hache ); //appel de la fonction d'authentification
		
		}
				

	
	}	


?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

29 mars 2016, 18:33

Tu as oublié les parenthèses, regarde bien ce que t'as suggéré Ascla ;)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphant du PHP | 372 Messages

29 mars 2016, 20:45

J'ai donc mis comme il m'a dit mais je ne peut plus m'identifier si par pseudo et ni par email maitenant:
// Vérification des identifiants
  $req = $bdd->prepare('SELECT * FROM simply_user WHERE (pseudo = :pseudo OR email =:email) AND password = :password');
  
  $req->execute(array(
                        'pseudo' => $pseudo,
            			'email' => $email,
                        'password' => $password
      ));
Ne dois je pas changer ceci aussi ? Si oui comment ?
<label>Identifiant</label>
                      <div class="input-group input-group animated bounceInLeft">
                      <span class="input-group-addon"><i class="fa fa-user white"></i></span>
                      <input class="form-control" name="pseudo" type="text" placeholder="Votre identifiant" value="<?php if(isset($_POST['pseudo'])) echo $_POST['pseudo'];?>" /></div> 
    				  <?php if(isset($erreurs['pseudo'])) echo '<div class="alert alert-danger" role="alert"><i class="fa fa-frown-o"></i> ' .$erreurs['pseudo'].'</div>';?>

Merci à vous

Mammouth du PHP | 1967 Messages

30 mars 2016, 11:44

// Vérification des identifiants
  $req = $bdd->prepare('SELECT * FROM simply_user WHERE (pseudo = :pseudo OR email =:email) AND password = :password');
  
  $req->execute(array(
                        'pseudo' => $pseudo,
            			'email' => $pseudo,
                        'password' => $password
      ));
Je pense que comme ceci ce sera déjà mieux. C'est bien le même champs de formulaire qui contiendra soit l'email soit le pseudo ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube