Probleme de connexion avec mon site en php

Résolu
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 - 4 oct. 2023 à 14:06
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 - 4 oct. 2023 à 22:11

Bonjour à tous,

Cela fait déjà plusieurs jours que j'essaie différents codes pour trouver une solution à mon problème qui est le suivant :

J'ai une base de données avec une colonne "confirme" et une colonne "liste-noire".

Lorsqu'un utilisateur est banni, je le mets sur la liste noire et lorsqu'il n'est pas encore confirmé, il reçoit le statut 0.

Jusque-là, pas de soucis et mon code fonctionne à merveille.

Lorsque l'utilisateur entre le bon mot de passe et le bon pseudo, et que le compte est confirmé (donc à "1"), il se connecte correctement.

Cependant, lorsque l'utilisateur n'est pas confirmé, je reçois bien un message d'erreur sur ma page de connexion, mais le problème est qu'il est quand même connecté.Alors qu'il ne devrait pas 

J'ai beau retourner le code dans tous les sens, cela semble illogique.

<?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";

//si le pseudo et le pawword ne sont pas vide
if (!empty($_POST["pseudo"]) && !empty($_POST["password"])) {
    //je recupere proprement des variables
    $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, liste_noire,password,confirmkey FROM utilisateurs WHERE pseudo = ? OR email = ?";
    //$datas = [$pseudo];
    $datas = [$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();

    //je teste pour savoir si ils sont pas sur la liste noire
    if ($data["liste_noire"] != "0") {
        header(
            "Location: /zone-membre/connexion-site.php?login_err=listenoire"
        );
        die();
    }

    //si l 'email ou le pseusdo sont bons on continue
    if (!empty($data)) {
        
        //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"];
          
            //je verifie si le compte est confirme
            if ($data["confirme"] != 0) {
                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 {
                //compte pasconfirme
                header(
                    "Location: /zone-membre/connexion-site.php?login_err=ComptePasActive&pseudo=" .
                        $_SESSION["pseudo"]
                );
                die();
            }
        } else {
            //mot de passe incorrect
            header(
                "Location: /zone-membre/connexion-site.php?login_err=password"
            );
            die();
        }
    } else {
        //compte non existant
        header(
            "Location: /zone-membre/connexion-site.php?login_err=MailPseusdoMauvais"
        );
        die();
    }
}
?>
A voir également:

5 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
4 oct. 2023 à 18:29

Bonjour

Vide totalement le cache de ton navigateur avant de réessayer. Il se peut simplement que tu aies conservé en session les valeurs de tes précédents tests.

À la limite, essaie directement en navigation privée.

Si le souci persiste, n'hésite pas à placer des échos dans ton code pour voir si tu rentres bien dans les différentes conditions que tu testes...

Au passage, j'aurais directement intégré la condition qui permet de vérifier qu'il n'est pas banni dans la requête SQL qui te permet de récupérer l'utilisateur..... 


0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
Modifié le 4 oct. 2023 à 19:32

Bonjour Jordane,

Merci pour la réponse.

C'est bien ce que je fais à chaque fois, vider le cache de mon navigateur, même sur 3 navigateurs différents, mais le résultat reste le même.

En fait, dans mon code, tout se passe bien et toutes les conditions fonctionnent, sauf celle où, malgré que l'utilisateur a un jeton confirmé à 0, il parvient à se connecter.

C'est vrai que j'aurais pu le mettre dans la requête, mais j'ai besoin des variables même s'il n'est pas confirmé

si je realise un var_dump dans le code ci dessous j'obtiens bien "0" de la valeur confirme

 //erreur si compte pas active
 case 'ComptePasActive':
 ?> <div style="color: #f2071d;background-color: #fde30c;border-color: #f90a23;font-weight: bold;  margin-bottom: 10px;  padding: 15px;margin-top: 15px;">
   <strong>Erreur</strong>Ton compte n'est pas activé , Regarde bien dans tes spams
   <?php
                     
                      var_dump($_SESSION["confirme"] );                    

?>

   <form action='https://phil.pecheperle.be/zone-membre/ActivationInscriptionSite.php' method='post'>
     <button style=" display: block;margin-left: auto;margin-right: auto;" type='submit' name='renvoyer'>Reçois a nouveau le lien pour activer ton compte </button>
   </form>
 </div>
 <?php
               break;
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
4 oct. 2023 à 19:37

C'est à la ligne 37 de ton premier code que tu devrais ajouter du debug histoire de voir ce que te retourne exactement ta requête et si par la suite les conditions que tu penses tester après sont les bonnes


0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
4 oct. 2023 à 19:59

Merci Jordane je viens d'essayer de cette façon mais rien n'est retourné

 

   $sql =
        "SELECT pseudo, email,id,confirme, liste_noire,password,confirmkey FROM utilisateurs WHERE pseudo = ? OR email = ?";
    $datas = [$pseudo, $pseudo];

// Debug pour vérifier les valeurs dans $datas
echo "Datas: ";
var_dump($datas);

    //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();
    
    // Debug pour vérifier le contenu de $data
echo "Data: ";
var_dump($data);
0
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
4 oct. 2023 à 20:40

Place un exit apres ta ligne 23

Si tu ne vois toujours rien..... c'est que tu ne passes pas par ce fichier 

0
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
4 oct. 2023 à 20:59

Merci jordane 

Cela fonctionne 

et tout est ok au niveau des valeurs 

et comme prévu la valeur de confirme est bien de "0" 

Je comprends de moins en moins ce qui se passe avec ce code 

Datas: array(2) { [0]=> string(3) "san" [1]=> string(3) "san" } 

Data: array(7) { ["pseudo"]=> string(3) "san" ["email"]=> string(21) "sanphi@gmail.com" ["id"]=> string(3) "543" ["confirme"]=> string(1) "0" ["liste_noire"]=> string(1) "0" ["password"]=> string(60) "$2y$12$S0unm9Q2y0JSlKTgGX2OHe" ["confirmkey"]=> string(11) "5659897" } 
0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
4 oct. 2023 à 21:04

Dans le code initial que tu nous as montré, tu testes la valeur de confirme après avoir rempli les valeurs de session...... Normal donc, qu'il considère que tu es bien connecté


0
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
Modifié le 4 oct. 2023 à 21:09

oui d'accord sur ce point mais alors comment je pourrais faire pour recupérer les variable de session si je teste la confirmation avant  le remplissage des valeurs de sessions

0
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 4 oct. 2023 à 21:42

Je ne vois pas où se trouve le problème, tu fais toutes tes vérifications et si tout est ok tu charges les variables de session avec les valeurs désirées... cqfd

0
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
4 oct. 2023 à 21:55

Merci pour la reponse 

je viens de refaire mon code mais une des premieres chose que je verifie a present c'est que confirme est "0" mais lorsque c'est le cas je suis envoyé vers ma page d'erreur mais sans mes variables de session puisque pas encore définie

//je teste si le pseudo ou l'email sont bon 
    if (empty($data))
    {
        header('Location: /zone-membre/connexion-site.php?login_err=MailPseusdoMauvais');
        die();
    }
    
    //je teste pour savoir si ils sont bien confirme
    if ($data['confirme'] != '1')
    {
       header('Location: /zone-membre/connexion-site.php?login_err=ComptePasActive');
       die();
   }
    
    
      //je teste pour savoir si ils sont pas sur la liste noire
    if ($data['liste_noire'] != '0')
    {
        header('Location: /zone-membre/connexion-site.php?login_err=listenoire');
        die();
    }
    
    
    // vérifie si la valeur associée à la clé confirme n'est pas égale à zéro. Si c'est le cas, la condition sera évaluée comme vraie.
    //dans ce cas je realise d'autre verification
   if ($data['confirme'] != "0")
    {
    
        //si l 'email ou le pseusdo sont bons on continue
        if (!empty($data))
        {
            //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
            {//mot de passe incorrect
                header('Location: /zone-membre/connexion-site.php?login_err=password');
                die();
            }
        }
        else
        {
            //compte non existant
            header('Location: /zone-membre/connexion-site.php?login_err=already');
            die();
        }
        
  }
    else
    {//compte pas confirme
        header('Location: /zone-membre/connexion-site.php?login_err=ComptePasActive');
        die();
    }
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
flexi2202 Messages postés 3795 Date d'inscription lundi 14 mars 2011 Statut Membre Dernière intervention 21 avril 2024 187
4 oct. 2023 à 22:11

j'ai fini par trouver voici ce que je realise 

 

if ($data['confirme'] != '1') {
    $email = $data['email']; // Récupérez l'adresse e-mail de $data

    // Redirigez vers la page d'erreur en incluant l'adresse e-mail comme paramètre
    header('Location: /zone-membre/connexion-site.php?login_err=ComptePasActive&email=' . urlencode($email));
    die();
}
0