Partage
  • Partager sur Facebook
  • Partager sur Twitter

Pb espace membre

inspiré du tuto de Dixi

    2 décembre 2006 à 22:47:28

    Bjour,

    J'essaie de créer une espace membre pour mon site mais j'ai un probleme, j'arrive pas à me connecter.
    Pas de soucis pour enregister un compte mais impossible de se connecter. Quand je rentre mon pseudo et pass et clik sur "se connecter" je reviens sur la page d'identification. o_O

    Voici mon code
    <?php
    //Démarrage de la session (à mettre avant tout code xhtml)
    session_start();

    //Si la variable $_SESSION['logged'] n'existe pas on la créée.
    if (!isset($_SESSION['logged'])) $_SESSION['logged'] = false;

    //Inclusion du fichier contenant les identifiants de connexion à la base de données.
    require("config.inc.php");

    //Connexion à la base de données.
    mysql_connect($host, $username, $password);
    mysql_select_db($bdd_name);
    ?>

    <?php
    if ($_SESSION['logged'] === false)
    {
       if (isset($_COOKIE['pseudo'], $_COOKIE['mot_passe']))
       {
          //Vérification du pseudo.
          $pseudo = htmlspecialchars($_COOKIE['pseudo']);
          $mot_passe = htmlspecialchars($_COOKIE['mot_passe']);
                   
          //Requête comptant le nombre de pseudos $_POST['pseudo']
          $sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM membres WHERE pseudo='".$pseudo."'");
             
           //Si le pseudo existe.
           if (mysql_result($sql,0,'nb_pseudo') == 1)
           {
                 //Vérification du mot de passe
                 //Information sur le compte du membre.
                 $sql_infos = mysql_query("SELECT id, mot_passe, confirmation FROM membres WHERE pseudo='".$pseudo."'");
                 $donnees = mysql_fetch_array($sql_infos);
                           
                 //Comparaison du mot de passe et vérification que le compte est confirmé.
                 if ($mot_passe == $donnees['mot_passe'] && $donnees['confirmation'] == 1)
                 {
                       //Tout est bon, on connecte le membre.
                       $_SESSION['logged'] = true;
                       
                       //Création de 2 variables de sessio, contenant des informations sur le membre.
                       $_SESSION['id'] = $donnees['id']; //Id du membre.
                       $_SESSION['pseudo'] = $pseudo; //Pseudo du membre.
                                           
                       //Redirection vers la page membre.
                       header("location: membres.php");
                  }
            }
       }
    }
    ?>

    <?php
    //Si la variable $_POST['connexion'] (bouton submit du formulaire) et la variable $_SESSION['logged'] vaut false (déconnecté) existent.
    if (isset($_POST['connexion']) && $_SESSION['logged'] === false)
    {
            //Vérification des autres variables.
            if (isset($_POST['pseudo'],$_POST['mot_passe']) && !empty($_POST['pseudo']) && !empty($_POST['mot_passe']))
            {
                    //Vérification du pseudo.
                    $pseudo = htmlspecialchars($_POST['pseudo']);
                    $mot_passe = htmlspecialchars($_POST['mot_passe']);
                   
                    //Requête comptant le nombre de pseudos $_POST['pseudo']
                    $sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM membres WHERE pseudo='".$pseudo."'");
                   
                    //Si le pseudo existe.
                    if (mysql_result($sql,0,'nb_pseudo') == 1)
                    {
                            //Vérification du mot de passe
                            //Information sur le compte du membre.
                            $sql_infos = mysql_query("SELECT id, mot_passe, confirmation FROM membres WHERE pseudo='".$pseudo."'");
                            $donnees = mysql_fetch_array($sql_infos);
                           
                            //Hashage du mot de passe.
                            $mot_passe_hash = md5($mot_passe);
                           
                            //Comparaison du mot de passe.
                            if ($mot_passe_hash == $donnees['mot_passe'])
                            {
                                    //On vérifie que le compte est confirmé.
                                    //Si $donnees['confirmation'] vaut 1.
                                    if ($donnees['confirmation'] == 1)
                                    {
                                            if (isset($_POST['souvenir']) && $_POST['souvenir'] == 'on')
                                            {
                                                //Temps d'expiration des cookies (1 an).
                                                $expire = time() + 3600 * 24 * 365;

                                                setcookie('pseudo', $pseudo, $expire);
                                                setcookie('mot_passe', $mot_passe_hash, $expire);
                                            }

                                            //Tout est bon, on connecte le membre.
                                            $_SESSION['logged'] = true;
                                           
                                            //Création de 2 variables de session, contenant des informations sur le membre.
                                            $_SESSION['id'] = $donnees['id']; //Id du membre.
                                            $_SESSION['pseudo'] = $pseudo; //Pseudo du membre.
                                           
                                            //Redirection vers la page membre.
                                            header("location: membres.php");
                                    }
                                    else
                                            echo 'Erreur : le compte n\'est pas confirmé !';
                            }
                            else
                                    echo '
    Erreur : le mot de passe est incorrect !';
                    }
                    else
                            echo '
    Erreur : le pseudo n\'existe pas !';
            }
            else
                    echo 'Erreur : veuillez remplir tous les champs !';
    }
    ?>

    <html>
            <head>
                    <title>Accueil</title>
            </head>
            <body>
                    <h1>Bienvenue sur mon site</h1>
                   
                    <p>
                            <a href="inscription.html">Inscription</a>
                    </p>
                   
                    <form method="post" action="index.php">
                            <label for="pseudo">Pseudo : <input type="text" name="pseudo" id="pseudo" /></label>
                            <label for="mot_passe">Mot de passe : <input type="password" name="mot_passe" id="mot_passe" /></label>
                            <label for="souvenir">Se souvenir de moi ? <input type="checkbox" name="souvenir" id="souvenir" /></label>
                            <input type="submit" name="connexion" value="Se connecter" />
                    </form>
            </body>
    </html>
    <?php
    //Déconnection de la base de données.
    mysql_close();
    ?>


    Où est l'erreur ???? o_O


    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      3 décembre 2006 à 1:09:44

      Salut !

      Est-ce que tu t'es renseigné un peu sur la fonction header()? Car à un moment il est expliqué de :

      Citation : http://fr.php.net/manual/fr/function.header.php

      N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP.


      Et donc en regardant ton code on remarque ceci :

      //Du code
      ?>

      <?php
      //et du code avec les header()

      Il y un saut de ligne (à 2 reprises) entre une balise fermante et une balise ouvrante de php! Et les sauts de ligne ainsi que les espaces hors de ton code PHP peuvent être interprétés comme des données HTML et donc rendent ta fonction header() inopérante. Ceci dit je n'ai pas tester ton code donc peut-être que quelque chose d'autre provoque ce mauvais fonctionnement. Mais vu comme ça je vois pas quoi alors tiens moi au courant si cela résout ton probleme.
      @+

      Ah oui et j'allais oublié dans le manuel sur php.net ils précisent aussi ceci :

      Citation : Manuel PHP

      Note : L'ID de session n'est pas passé avec l'en-tête Location même si session.use_trans_sid est activé. Il doit être passé manuellement en utilisant la constante SID.


      Cela signifie-t-il que les variables de sessions que l'on aurait crée ne seront plus accessibles ? Bref je tenais juste à te le faire remarquer.
      @+

      EDIT :

      Bon alors voila j'ai pas tout compris à propos de passer manuellement avec la constante SID. Mais en ce qui te concerne les variables de session passent lors de la redirection si celle-ci est ciblée dans la fonction header() par une adresse relative. (J'espere ne pas dire de bêtises :-° ) Donc ça devrait pas te poser de probleme.
      @+
      • Partager sur Facebook
      • Partager sur Twitter
        3 décembre 2006 à 10:20:34

        Salut,

        J'ai supprimé les espace entre mes code PHP mais c'est toujours pareil.

        Comment reformuler le code avec la fonction header() ?

        Concenant l'ID j'ai pas tout compris non plus :p

        Merci ;)
        • Partager sur Facebook
        • Partager sur Twitter
          3 décembre 2006 à 10:25:55

          ce que je remarque surtout c'est que tu a simplement copier/coller le code de dixy...
          tu ne devrais pas... inspire toi de son code pour crée le tien mais la copie apporte toujours des erreurs....
          • Partager sur Facebook
          • Partager sur Twitter
            3 décembre 2006 à 10:39:48

            En fait je pense remanier son script et le personaliser mais j'arrive pas a le faire fonctionner (c'est un peu gênant) :(
            • Partager sur Facebook
            • Partager sur Twitter

            Pb espace membre

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown