Problème session php

Résolu
Bonjour,

n'étant pas du tout informaticien, j'ai appris à me servir du php grâce à des forums et des tutos. J'ai donc beaucoup de lacunes.
J'essaie de créer des sessions sur mon site mais je bloque en écrivant le code de vérification qui identifie l'utilisateur.
Voici mon code :

<?php

session_start();
$pseudoOK = false;

if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) ) {

extract($_POST);

$hostname = "*****";
$user = "*****";
$password = "*****";
$nom_base_donnees = "*****";

mysql_connect($hostname, $user, $password) or die(mysql_error());
mysql_select_db($nom_base_donnees);

$sql = "SELECT nom, prenom, pseudo, email FROM joueurs WHERE pseudo = '".addslashes($pseudo)."'";
$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);

if (mysql_num_rows($req) > 0) {
$data = mysql_fetch_assoc($req);

if ($mdp == $data['mdp']) {
$pseudoOK = true;
}
}
}

if ($pseudoOK) {
$_SESSION['nom'] = $data['nom'];
$_SESSION['prenom'] = $data['prenom'];
$_SESSION['pseudo'] = $data['pseudo'];
$_SESSION['email'] = $data['email'];

header("Location: index3.php") ;
}
else {
header("Location: index2.htm") ;
}
?>

J'ai pompé des morceaux sur plusieurs tutos et je pense ne pas tout mettre dans le bon ordre en fait.

Merci de me donner un coup de main ;o)
Configuration: Windows 2000 Internet Explorer 6.0

33 réponses

Résumé de la discussion

L'utilisateur cherche à mettre en place une authentification par sessions en PHP pour son site, mais bloque sur le code de vérification qui identifie l'utilisateur. Les échanges montrent des soucis comme la récupération POST, la construction de la requête SQL, le hachage du mot de passe et le placement de session_start, avec des erreurs de syntaxe. En progressant, il simplifie le processus, applique md5 sur le mot de passe, construit une requête SELECT et vérifie le résultat avant d'ouvrir la session et de rediriger. Entre autres, la consolidation clé est l'initialisation de la session avant tout affichage et la vérification du retour de la requête avec un objet pour alimenter $_SESSION.

Bobot (l’IA à votre service)
  1. Bonjour,

    il semblerait que la nuit porte conseil :o))

    Je viens de galérer pendant 1 heure avant de te solliciter et finalement j'ai trouvé.
    J'ai reconstruit ma requête sur papier pour que ce soit plus clair.
    Il y avait des problèmes d'accolades qui n'étaient pas au bon endroit.

    Voici le résultat :

    <?php

    if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
    {
    $pseudo = $_POST["pseudo"] ;
    $mdp = md5($_POST["mdp"]) ;

    $hostname = "";
    $user = "";
    $password = "";
    $nom_base_donnees = "";

    mysql_connect($hostname, $user, $password) or die(mysql_error());
    mysql_select_db($nom_base_donnees);

    $sql = "SELECT nom, prenom, pseudo, email FROM joueurs WHERE pseudo = '".addslashes($pseudo)."' AND mdp = '".$mdp."'";
    $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);

    if (mysql_num_rows($req) > 0)
    {
    $data = mysql_fetch_assoc($req);

    {
    session_start();
    {
    $_SESSION['nom'] = $data['nom'];
    $_SESSION['prenom'] = $data['prenom'];
    $_SESSION['pseudo'] = $data['pseudo'];
    $_SESSION['email'] = $data['email'];
    }
    header("Location: index3.php") ;
    }
    }
    else {
    echo '<p>Pseudo ou mot de passe incorrect. Veuillez réessayer.</p>';
    include('index2.htm');
    exit;
    }
    }
    ?>

    En tous cas un GRAND MERCI à toi pour avoir passé autant de temps à m'aider pour ce script.
    Je vais pouvoir commencer à m'amuser avec toutes ces sessions ^^
    1. Je te fais un point demain, j'ai du monde à manger ;o)

      Merci beaucoup en tous cas
      1. bon alors on fait un point.
        dites moi où on en est. et ce qui ne va toujours pas.
        1. alors on continue à tracer

          $sql = "SELECT nom, prenom, pseudo, email FROM joueurs WHERE pseudo = '".addslashes($pseudo)."'";
          $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);

          if (mysql_num_rows($req) > 0) {
          $data = mysql_fetch_assoc($req);
          echo "<pre>";print_r($data);echo "</pre>";

          pour voir ce que renvoit cette requête.
          1. Ca ne m'affiche toujours que mon pseudo. Le nom et prénom ne s'affichent pas
            1. C'est mieux puisque maintenant les valeurs passent.
              est-ce que cela fonctionne maintenant ?
              1. J'obtiens :

                Array
                (
                [pseudo] => nico3009
                [mdp] => ******
                [submit] => Se connecter
                )
                1. oui celui là.

                  mettez post en majuscule
                  <form method="POST" action="verifpseudo.php">
                  1. Ben c'est celui-là :

                    <html>
                    <head>
                    <title>Connexion au site</title>
                    </head>
                    <body>
                    <form method="post" action="verifpseudo.php">
                    <table border="0" width="400" align="center">
                    <tr>
                    <td width="200"><b>Pseudo</b></td>
                    <td width="200">
                    <input type="text" name="pseudo">
                    </td>
                    </tr>
                    <tr>
                    <td width="200"><b>Mot de passe<b></td>
                    <td width="200">
                    <input type="password" name="mdp">
                    </td>
                    </tr>
                    <tr>
                    <td colspan="2">
                    <input type="submit" name="submit" value="Se connecter">
                    </td>
                    </tr>
                    </table>
                    </form>
                    </body>
                    </html>

                    Où sinon je ne comprends pas quel est ce fichier.
                    En tous cas je n'en ai pas d'autres
                    1. Ca me renvoie à nouveau sur :

                      Array
                      (
                      )
                      1. cela confirme que $_POST existe et ne contient rien.
                        il me faut le code de la page qui appelle ce fichier.

                        d'une manière générale, c'est un formulaire utilisé avec la method POST qui renseigne ces infos

                        je vais déjeuner je reprendrai cet après midi
                    2. $_POST['pseudo'] n'est pas vide : il n'existe pas.

                      détaillons les if pour suivre :
                      if (isset($_POST)) {
                      echo "<pre>";print_r($_POST);echo "</pre>";

                      else {
                      echo "$ POST n'existe pas";
                      }

                      J-L
                      1. Il me répond je passe par là.
                        Ca voudrait dire que :
                        if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
                        ne retourne rien??

                        Il me semblait que ça voulait dire que "si le pseudo envoyé n'est pas vide et si le mdp envoyé n'est pas vide" ...
                        1. --si le résultat de ce que je t'ai demandé de faire (echo "<pre>";print_r($_POST);echo "</pre>"; ) est vide d'après ta réponse, cela veut dire que $_POST est vide.

                          donc pour pister ton souci, tu ajoutes

                          if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
                          {
                          $pseudo = $_POST["pseudo"] ;
                          $mdp = md5($_POST["mdp"]) ;
                          echo "je passe ici<br>";

                          }
                          et dans le else de ce if tu mets
                          echo "je passe par là<br>";

                          J-L
                          1. Je ne comprends pas bien ta question.
                            Dans le formulaire, l'utilisateur entre son pseudo et mdp. Ca va vérifier dans la table "joueurs" si ils concordent bien et je veux faire afficher les autres variables concernant ce pseudo (nom, prenom, email) qui sont affichées dans la table.
                            Je ne pense pas que c'est ce que tu me demandes. Je suis désolé, j'ai un pu de mal.
                            1. Bonjour,

                              ce qui veut dire que le formulaire ne renvoit RIEN
                              où sont renseignées les zones qui "alimentent" $_POST ?
                              1. je te suggère de rajouter la ligne en gras pour voir ce que tu reçois du formulaire; cela peut nous aiguiller

                                Le code de vérif : (verifpseudo.php)

                                <?php
                                echo "<pre>";print_r($_POST);echo "</pre>";
                                if ( isset($_POST) && (!empty($_POST['pseudo'])) && (!empty($_POST['mdp'])) )
                                {
                                $pseudo = $_POST["pseudo"] ;
                                $mdp = md5($_POST["mdp"]) ;
                                • 1
                                • 2