Probleme de connexion avec mon site en php

Résolu
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -  
flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   -

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();
    }
}
?>

5 réponses

  1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     

    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
  2. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     

    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
  3. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     

    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
    1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
       

      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
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention  
         

        Place un exit apres ta ligne 23

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

        0
      2. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         

        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
  4. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     

    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
    1. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
       

      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
      1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832 > flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention  
         

        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
      2. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190 > jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention  
         

        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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. flexi2202 Messages postés 3640 Date d'inscription   Statut Membre Dernière intervention   190
     

    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