Autoriser la connexion au site avec le pseudo ou adresse mai

Résolu/Fermé
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 - 9 nov. 2022 à 15:36
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 - 10 nov. 2022 à 11:59

bonjour a tous 

je souhaiterais savoir comment je pourrais modifier la connexion a mon site 

Afin que l'utilisateur puiisse entrer un pseudo ou alors son adresse email

Voici mon code avec lequel l'utilisateur peux se connecter avec son pseudo

<?php
session_start();
error_reporting(E_ALL);
ini_set("display_errors", true);
ini_set("display_startup_errors", true);

//on recupere le lien link pour la redirection vers les autres pages
$link = !empty($_GET["link"]) ? $_GET["link"] : null;

require_once "base.php";
if (!empty($_POST["pseudo"]) && !empty($_POST["password"])) {
    $pseudo = !empty($_POST["pseudo"]) ? $_POST["pseudo"] : null;
    $password = !empty($_POST["password"]) ? $_POST["password"] : null;

    //préparation de la requête et des variables
    $sql =
        "SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ?";
    $datas = [$pseudo];
    //Execution de la requete
    try {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    } catch (Exception $e) {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->rowCount();
    $userexit = $requete->fetch();
    //si le peusdo est bien dans la base alors on continue sinon on sort

    if ($data["confirme"] != 1 and $row == 0) {
        //pseusdo pas bon
        header("Location: connexion-site.php?login_err=divers2");
        die();
    }
    //else if
    //($data['confirme'] !=0 and $row == 1)//psuedo bon
    //{header('Location: connexion-site.php?login_err=divers3');
    //      die();}

    if ($data["confirme"] != 0) {
        if ($row == 1) {
            //on verifie le pawword si il est ok on continue , sinon sortie
            if (password_verify($password, $data["password"])) {
                //on definit et on cree les variables sessions
                $_SESSION["user"] = [
                    "id" => $data["id"],
                    "pseudo" => $data["pseudo"],
                    "email" => $data["email"],
                    "confirmkey" => $data["confirmkey"],
                ];
                $_SESSION["id"] = $data["id"];
                $_SESSION["pseudo"] = $data["pseudo"];
                $_SESSION["email"] = $data["email"];
                $_SESSION["confirmkey"] = $data["confirmkey"];

                //on test la variable link si elle est vide  on va vers index
                if (empty($_SESSION["link"])) {
                    header("Location: index.php?pseudo=" . $_SESSION["pseudo"]);
                    //sinon on va faire la derniere page visitee
                } else {
                    header("location: " . $_SESSION["link"]);
                }
                die();
            } else {
                header("Location: connexion-site.php?login_err=password");
                die();
            }
        } else {
            header("Location: connexion-site.php?login_err=already");
            die();
        }
    } else {
        header("Location: connexion-site.php?login_err=divers");
        die();
    }
}
?>
A voir également:

4 réponses

jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
10 nov. 2022 à 08:33

Bonjour,

dans mon formulaire de connexion 

il n'y a que deux champs le premier qui acceuil le pseudo pour l'instant 

Dans ce cas, tu n'as qu'une seule variable POST correspondant à ce champ du formulaire....

On en revient donc à la réponse 2 de yg_be ...


1
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024
Modifié le 10 nov. 2022 à 08:45
1
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
10 nov. 2022 à 08:51

Sachant que dans ton code de départ, tu as d'autres soucis...

Pour commencer.. la méthode rowCount ne doit pas s'utiliser sur une requête de type SELECT (comme c'est indiqué dans la documentation officielle de php ! )

Et ta condition n'est pas bonne

$data = $requete->fetch();
$row = $requete->rowCount(); // Ne pas utiliser cette méhtode... 
$userexit=$requete->fetch(); // tu as déjà fait le fetch sur la variable $data ...

/*
if ($data['confirme'] !=1 and $row == 0 )//pseusdo pas bon  {
*/

//a corriger par :
if ( empty($data) || $data['confirme'] != '1' ) {
  // si la requête n'a pas retourné de résultat OU qu'il n'est pas confirmé
1
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187 > jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024
10 nov. 2022 à 09:01

Merci Jordane pour la correction 

Une chance que tu sois la 

voici donc mon code corrigé

Mais lorsque je rentre un bon pseudo et un bon mot de passe il m'affiche l'erreur divers de la ligne 53

pourtant le pseudo est bien confirme et il existe bien 

<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errors', true);
ini_set('display_startup_errors', true);

      
 
//on recupere le lien link pour la redirection vers les autres pages
$link = !empty($_GET['link']) ? $_GET['link'] : NULL;

require_once 'base.php';
if (!empty($_POST['pseudo']) && !empty($_POST['password']))
{
    $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
  $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
  
  //test d'une variable de session
  $_SESSION['email'] =$_POST["email"];
$_SESSION['pseudo'] =$_POST["pseudo"];
    //préparation de la requête et des variables
    //$sql = 'SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ?';
    $sql = 'SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ? OR email = ';
    
   // $datas = [$pseudo];
    $datas = array($pseudo,$pseudo);
    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    //$row = $requete->rowCount();
//$userexit=$requete->fetch();

    //si le peusdo est bien dans la base alors on continue sinon on sort
/*
if ($data['confirme'] !=1 and $row == 0 )//pseusdo pas bon 
  {header('Location: connexion-site.php?login_err=divers');
       die();}
*/

if ( empty($data) || $data['confirme'] != '1' ) {
    header('Location: connexion-site.php?login_err=divers');
       die();
}
  // si la requête n'a pas retourné de résultat OU qu'il n'est pas confirmé

    
	 if ($data['confirme'] !=0)
    {
    if ($row == 1)
    {
        //on verifie le pawword si il est ok on continue , sinon sortie
        if (password_verify($password, $data['password']))
        {
            //on definit et on cree les variables sessions
            $_SESSION['user'] = array(
                'id' => $data['id'],
                'pseudo' => $data['pseudo'],
                'email' => $data['email'],
                'confirmkey' => $data['confirmkey']
            );
            $_SESSION['id'] = $data['id'];
            $_SESSION['pseudo'] = $data['pseudo'];
            $_SESSION['email'] = $data['email'];
            $_SESSION['confirmkey'] = $data['confirmkey'];
         
            
            //on test la variable link si elle est vide  on va vers index
            if (empty($_SESSION['link']))
            {
                header('Location: ./index.php?pseudo=' . $_SESSION['pseudo']);
                //sinon on va faire la derniere page visitee
                
            }
            else 
            {
                header('location: ' . $_SESSION['link']);
            }
            die();
        }
        else
        {
            header('Location: connexion-site.php?login_err=password');
            die();
        }
    }
    else
    {
        header('Location: connexion-site.php?login_err=already');
        die();
    }
	}
    else
    {
        
        
         header('Location: connexion-site.php?login_err=divers');
        die();
      
        
        
        
    }
}
?>

1
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024
10 nov. 2022 à 09:27

En ligne 52, tu testes deux conditions.  Teste les séparément, de façon à pouvoir déterminer laquelle provoque le message d'erreur.

1
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024
10 nov. 2022 à 11:29

Dans la requête, tu as deux points d'interrogation:

WHERE pseudo = ? OR email = ?';
    

Tu utilises ensuite "array($pseudo,$pseudo)" pour préciser quelles données doivent se substituer au point d'interrogation.

1
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
9 nov. 2022 à 16:33

j'ai modifie ma requete de la sorte mais il refuse de prendre l'adresse email

    $sql = 'SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ? OR email = ?';
    //$datas = [$pseudo];
    $datas = array($pseudo,$email);
    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->rowCount();
$userexit=$requete->fetch();
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
9 nov. 2022 à 16:50

bonjour,

Que contient la variable $email?

Tu ne nous montres pas le formulaire utilisé.

Si l'utilisateur peut rentrer son email dans la zone pseudo, alors plutôt:

$datas = array($pseudo,$pseudo);

Fais attention alors à vérifier que personne n'utilise comme pseudo l'email d'un autre utilisateur (à l'inscription).

1
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
9 nov. 2022 à 16:54

Bonjour 

Merci pour l'aide 

voici ce que contient cette variable

  $email = !empty($_POST['email']) ? $_POST['email'] : NULL;

Mais le code que tu me donnes ne serais pas 

$datas = array($pseudo,$email);
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024
9 nov. 2022 à 16:57

Ce serait plus propre alors de faire deux requêtes, une quand le pseudo est entré, l'autre quand l'email est entré.

1
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
Modifié le 9 nov. 2022 à 17:06

Merci pour l'aide oui c'est ce a quoi j'avais pense

cela pourrait etre ceci alors ?

$sql = 'SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ? OR email = ?';
    $datas = [$pseudo];
    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->rowCount();
$userexit=$requete->fetch();

if ($data['confirme'] !=1 and $row == 0 )//pseusdo pas bon  {
echo "pseudo existe";
} else {
echo "pseudo n'existe pas";
} 

//requete 2 pour le mail
$datasmail = [$email];
//exécution de la requête
try{
$stmt = $bdd->prepare($sql);
$stmt->execute($datasmail);
$user = $stmt->fetch();
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datasmail);
}
if (!empty($user)) {
echo "email existe";
} else {
echo "email n'existe pas";
} 
0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477
9 nov. 2022 à 18:21

Plutôt tester si l'utilisateur a rentré son pseudo ou son email, et, ensuite, utiliser uniquement le pseudo ou uniquement l'email.

0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
9 nov. 2022 à 19:56

oui c'est exactement ce a quoi je pensais a l'instant 

Mais au niveau des conditions je m'y perds un peu

car si cela est une adresse email 

je dois la tester et si elle est dans la base de donnee 

je continue mes conditions

Mais pareil pour le pseudo

je dois voir si il est dans la base de donnee

si oui je continue mes conditions 

J'essaye de mettre cela sur papier ...

0
yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 477 > flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024
9 nov. 2022 à 21:17

"tester si l'utilisateur a rentré son pseudo ou son email", cela signifie tester si l'utilisateur a rempli $_POST['pseudo'] ou bien si il a rempli $_POST['email'].  SI aucun des deux ou les deux, refuser.

0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187 > yg_be Messages postés 22730 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024
9 nov. 2022 à 22:14

oui c'est vrai que jn'y avait pas pense 

mais j'ai un petit soucis 

pour ma connexion j'ai deux pages la premiere pour la gestion du formulaire et des erreurs qui est donc le code ici plus haut soit connexion.php

la deuxieme page pour afficher les erreurs connexion-site.php

j'ai donc cree deux variable de session avec $_POST['email'] et $_POST['pseudo'] sur connexion.php

ensuite je les appelles connexion-site.php  

Lorsque je rentre une adresse email sur connexion.php et que je valide

aussi bien les var_dump de email et de pseudo m'affiche l'adresse email

ce qui est logique 

Donc du coup comment je pourrais savoir celle qui a ete remplie lorsqu'il valide le formulaire

0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187 > flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024
9 nov. 2022 à 22:53

le seul moyen que j'ai trouve pour l'instant c'est comme tu l'avais suggere

serait de realiser deux requetes completes suivant si cest email ou pseudo qui est remplit

car j'ai fini par trouver comment les tester

if (empty($_POST['email']))
0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
9 nov. 2022 à 20:51

je viens d'essayer ce code 

$pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] : NULL;
    $password = !empty($_POST['password']) ? $_POST['password'] : NULL;
  $email = !empty($_POST['email']) ? $_POST['email'] : NULL;
    //préparation de la requête et des variables
    //$sql = 'SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ?';
    $sql = 'SELECT pseudo, email,id,confirme, password,confirmkey FROM utilisateurs WHERE pseudo = ? OR email = ?';
    $datas = [$pseudo];
    //$datas = array($pseudo,$email);
    //Execution de la requete
    try
    {
        $requete = $bdd->prepare($sql);
        $requete->execute($datas);
    }
    catch(Exception $e)
    {
        // en cas d'erreur :
        echo " Erreur ! " . $e->getMessage();
        echo " Les datas : ";
        print_r($datas);
    }
    $data = $requete->fetch();
    $row = $requete->rowCount();
$userexit=$requete->fetch();





if($data['confirme'] !=1 and filter_var($email, FILTER_VALIDATE_EMAIL) ){
	$datasmail = [$email];
//exécution de la requête
try{
$stmt = $pdo->prepare($sql);
$stmt->execute($datas);
$user = $stmt->fetch();
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datasmail);
}
if (empty($user)) {header('Location: connexion-site.php?login_err=divers3');
       die();}

} 
else  if ($data['confirme'] !=1 and $row == 0 )//pseusdo pas bon 
  {header('Location: connexion-site.php?login_err=divers2');
       die();}

mais lorsque je rentre le bon pseudo et bon mot de passe j'ai l'erreur divers2

idem si je rentre la bonne adresse emil avec le bon mot de passe

0