Page 1 sur 1

Identification par email ou pseudo

Posté : 16 oct. 2016, 14:56
par blinz
Salut à tous.
Voilà j'ai fait un système d'identification qui marche sans problème pseudo et password.
Et la je souhaite laissé la possibilité à l'utilisateur de s'identifier par pseudo ou "email".
Et je ne vois pas ce qui bloque.

J'ai en erreur :
Undefined index: email

Donc pr mon code:
<?php 
	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, $password_hache ); //appel de la fonction d'authentification
		}
	}	
?>
// le formulaire

<form method="post" action="compte-utilisateur-connexion.php">
                                <div class="form-group">
                                    <label for="email">Adresse email ou pseudo <span class="required">*</span></label>
                                      <br>
                                      <input title="Email Address" class="form-control" name="pseudo" type="text" placeholder="Votre identifiant" value="<?php if(isset($_POST['pseudo'])) echo $_POST['pseudo'];?>" /> 
                                      <?php if(isset($erreurs['pseudo'])) echo '<br><div class="alert alert-danger" role="alert"><i class="fa fa-frown-o"></i> ' .$erreurs['pseudo'].'</div>';?> 
                                </div>
                                <div class="form-group">
                                    <label for="pass">Mot de passe <span class="required">*</span></label>
                                      <br>
                                      <input title="Password" name="password" type="password" placeholder="Mot de passe" class="form-control" value="<?php if(isset($_POST['pseudo'])) echo $_POST['pseudo'];?>" />
                                      <?php if(isset($erreurs['password'])) echo '<br><div class="alert alert-danger" role="alert"><i class="fa fa-frown-o"></i> ' .$erreurs['password'].'</div>';?>
                                </div>
                                <p class="small">
                                     <input type="checkbox" name="remember"> Se souvenir de moi 
                                </p>
                                <input class="btn_full" type="submit" value="ENVOYER">
                                <a href="register.html " class="btn_full_outline">Inscription</a>
                                 <br>
           					    <?php echo !empty($message) ? $message : NULL; ?>
                            </form>
Coté exécution
// 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
      ));
						
  
  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), '/');
		
	header('Location: /sortie/region-'.simplification($aRegion[$_SESSION['id_region']]).'.html');
	
  } else {
     $return = '<div class="alert alert-danger" role="alert"><i class="fa fa-frown-o"></i> Mauvais identifiant ou mot de passe !</div>';

  }

Re: Identification par email ou pseudo

Posté : 16 oct. 2016, 15:22
par or 1
$req->execute(array(
'pseudo' => $pseudo,
'email' => $pseudo,
'password' => $password
));
si c'est toujours le peusdo qui est utilisé, c'est normal que cela ne fonctionne pas quand on rentre un email.

Re: Identification par email ou pseudo

Posté : 16 oct. 2016, 19:22
par blinz
Meme en remplacant 'email' => $pseudo, par :
'email' => $email

Le problème est le même ...

Re: Identification par email ou pseudo

Posté : 16 oct. 2016, 19:29
par or 1
que vaux $email à cet endroit ?

Re: Identification par email ou pseudo

Posté : 17 oct. 2016, 12:25
par moogli
salut,

soit tu ne nous donnes pas le code complet soit tu utilises les registers_globals, dans les deux c'est pas bien :)

La requête sql semble correcte, l'as tu testée ?

tu peux utiliser la méthode bindValue afin d'apporter un peu de lisibilitée à ton code.
il est possible d'utiliser plusieurs fois le même place holder.
Dans le principe ; une fonction /méthode une fonctionnalité il faut une fonction qui valide, ou pas, l'authentification et c'est tout, le reste c'est le 'contrôleur' qui se démarde.

du coup cela peux ceci
<?php

function authentificationPro($pseudo, $password)
{
    $req = $bdd->prepare('SELECT membre,pseudo,email,id_region,statut FROM simply_user WHERE (pseudo = :pseudo OR email =:pseudo) AND password = :password');
    // bind des données sur les placeholder
    $query->bindValue(':pseudo', $pseudo, PDO::PARAM_STR);
    $query->bindValue(':password', $password, PDO::PARAM_STR);
    $req->execute();

    $retour = false;
    if ($req->rowCount() > 0) {
        $resultat = $req->fetch(PDO::FETCH_ASSOC);
        $_SESSION['membre'] = $resultat['membre'];
        $_SESSION['pseudo'] = $resultat['pseudo'];
        $_SESSION['email'] = $resultat['email'];
        $_SESSION['id_region'] = $resultat['id_region'];
        $_SESSION['type'] = 'client';
        $_SESSION['statut'] = $resultat['statut'];
        $retour = true;
    }
    return $retour;
}

// utilisation

if (authentificationPro($_POST['pseudo'], $_POST['password'])) {
    if (!empty($_POST['remember'])) {
        setcookie('identification', serialize(array($pseudo, $password)), mktime(0, 0, 0, date('m'), date('d'), date('Y')+1), '/');
    }
    header('Location: /sortie/region-'.simplification($aRegion[$_SESSION['id_region']]).'.html');
} else {
    echo '<div class="alert alert-danger" role="alert"><i class="fa fa-frown-o"></i> Mauvais identifiant ou mot de passe !</div>';
}
en fait, dans l'absolue et en poo la fonction devrait retourner un objet utilisateur (ou false) afin de pourvoir ensuite le mettre en session (ou pas d'ailleurs mais ce n’est pas de la responsabilité de la fonction d’authentification de faire cela).

j'ai extrapolé sur ton code pour faire celui ci vu que l'on pas tout ce qui pourrait être utile.

A toi d'adapter.

ps une solution fonctionnelle ici php-debutant/formulaire-connexion-avec- ... 77113.html

@+