Login mail et pseudonyme

Résolu
Bonjour,

Voila je voudrai pouvoir me connecter soit en mettant mon email ou bien mon pseudo, actuellement je le fais qu'avec mon pseudo mais je n'arrive pas à incruster la connexion avec le mail en supplément.

$pseudoconnect = !empty($_POST['pseudoconnect']) ? $_POST['pseudoconnect'] : NULL;
$passconnect = !empty($_POST['passconnect']) ? hash("sha512",($_POST['passconnect'])) : NULL;

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'];
		$language = $userinfo['language'];



<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"></input>
</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"></input>
</p>
<p class="login button">
<input type="submit" name="form_connexion" value="Se connecter"></input> 
</p>
<p class="change_link">Pas encore inscrit ?
<a href="create_account.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>

1 réponse

  1. Bonjour,

    Remplace juste ta requête par celle-ci :
    $sql = "SELECT * FROM membres WHERE ? IN (pseudo, mail) AND pass = ?";


    Xavier
    0
    1. Salut, et merci de ton aide, cela m'affiche cette erreur :

      Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
      0
    2. Bonjour,

      A priori, ça veut dire que dans ton ->execute tu ne passes pas un tableau de taille 2 ?
      Remontre ton code ?

      Xavier
      0
    3. @Reivax962
      
      $pseudoconnect = htmlspecialchars(!empty($_POST['pseudoconnect']) ? $_POST['pseudoconnect'] : NULL);
      $passconnect = htmlspecialchars(!empty($_POST['passconnect']) ? hash("sha512",($_POST['passconnect'])) : NULL);
      $mailconnect = htmlspecialchars(!empty($_POST['pseudoconnect']) ? $_POST['pseudoconnect'] : NULL);
      
      
      $sql = "SELECT * FROM membres WHERE ? IN (pseudo, mail) AND pass = ?";
      $datas = array($pseudoconnect,$mailconnect,$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;
      
      
      0
    4. @Utilisateur anonymeBonjour;

      Tu n'as pas besoin de redéfinir $mailconnect qui est identique à $pseudoconnect.
      Essaie ça :
      $pseudoconnect = htmlspecialchars(!empty($_POST['pseudoconnect']) ? $_POST['pseudoconnect'] : NULL);
      $passconnect = htmlspecialchars(!empty($_POST['passconnect']) ? hash("sha512", ($_POST['passconnect'])) : NULL);
      
      $sql = "SELECT * FROM membres WHERE ? IN (pseudo, mail) AND pass = ?";
      $datas = array($pseudoconnect, $passconnect);


      Xavier
      0
    5. @Reivax962C'est tout bon merci bien :-)
      0