Page 1 sur 1

probleme de connexion

Posté : 07 oct. 2007, 22:34
par natas
Bonjour
j ai fais un code avec un accé admin donc

inscription => et ensuite connexion avec un login et pass mais le probleme c que lorsque je m inscrit pas de probleme je suis redirigé vers la page voulu maus si je veux me reco le landemain impossible voyez vous une erreur dans mon code merci
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

     $base = mysql_connect('localhost', 'root', '');
        mysql_select_db ('dog', $base);
        
        // on teste si une entrée de la base contient ce couple login / pass
        $sql = 'SELECT count(*) FROM membre WHERE login="'.addslashes($_POST['login']).'" AND pass="'.addslashes($_POST['pass']).'"';
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        $data = mysql_fetch_array($req);
        
        mysql_free_result($req);
        mysql_close();
        
        // si on obtient une réponse, alors l'utilisateur est un membre
        if ($data[0] == 1) {
            session_start();
            $_SESSION['login'] = $_POST['login'];
            header('Location: index.php');
            exit();
        }
        // si on ne trouve aucune réponse, le visiteru s'est trompé soit dans son login, soit dans son mot de passe
        elseif ($data[0] == 0) {
            $erreur = 'Compte non reconnu.';
        }
        // sinon, alors la, il y a un gros problème :)
        else {
            $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
        }
    }
    else {
        $erreur = 'Au moins un des champs est vide.';
    }
}
?>
voila j espere avoir etes clai je vous remerci d avance

Posté : 07 oct. 2007, 22:50
par Tracker
Pourrais-tu expliquer un peu l'architecture des pages impliquées, le code que tu nous as soumis appartient à index.php ?

Je ne vois rien de particulièrement chocant dans ton code, la seule interrogation que je pourrais avoir est sur la position du session_start(), mais sans d'info supplémentaire je peux pas t'en dire plus.

Posté : 07 oct. 2007, 23:03
par natas
deja merci de ta reponse rapide :)

alors voici l architecture .
J ai la page
inscription ==> qui elle fonctionne trés bien que ce soit coté inscription mais aussi redirection sur la page admin

la voici
<?php
// on teste si le visiteur a soumis le formulaire
if (isset($_POST['inscription']) && $_POST['inscription'] == 'Inscription') {
    // on teste l'existence de nos variables. On teste également si elles ne sont pas vides
    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass'])) ) {
        // on teste les deux mots de passe
        if ($_POST['pass'] != $_POST['pass_confirm']) {
            $erreur = 'Les 2 mots de passe sont différents.';
        }
		
        else {
            $base = mysql_connect ("localhost","root",""); 
            mysql_select_db ('dog', $base);
            
            // on recherche si ce login est déjà utilisé par un autre membre
            $sql = 'SELECT count(*) FROM membre WHERE login="'.addslashes($_POST['login']).'"';
            $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
            $data = mysql_fetch_array($req);

            if ($data[0] == 0) {
                $sql = 'INSERT INTO membre VALUES("", "'.addslashes($_POST['login']).'", "'.addslashes($_POST['pass']).'")';
                mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
				
                session_start();
                $_SESSION['login'] = $_POST['login'];
                header('Location: index.php');
                exit();
            }
            else {
                $erreur = 'Un membre possède déjà ce login.';
            }
        }
    }
    else {
        $erreur = 'Au moins un des champs est vide.';
    }

}
?>
biensur je ne vous met pas le html :))

ensuite lors d une connexion j utilise la page

connexion
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

     $base = mysql_connect('localhost', 'root', '');
        mysql_select_db ('dog', $base);
        
        // on teste si une entrée de la base contient ce couple login / pass
        $sql = 'SELECT count(*) FROM membre WHERE login="'.addslashes($_POST['login']).'" AND pass= "'.addslashes($_POST['pass']).'"';
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        $data = mysql_fetch_array($req);
          
        
        // si on obtient une réponse, alors l'utilisateur est un membre
        if ($data[0] == 0) {
            session_start();
            $_SESSION['login'] = $_POST['login'];
            header('Location: index.php');
            exit();
        }
        // si on ne trouve aucune réponse, le visiteru s'est trompé soit dans son login, soit dans son mot de passe
        elseif ($data[0] == 1)  non reconnu.';
        }{
            $erreur = 'Compte
        // sinon, alors la, il y a un gros problème :)
        else {
            $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
        }
    }
    else {
        $erreur = 'Au moins un des champs est vide.';
    }
}
?>

et enfin pour ma session
<?php


session_start();
if (!isset($_SESSION['login'])) {
	die(
	' Vous n\'êtes pas autorisez à acceder à cette page.'); //Si non, on arrete le script
}
?>
qui elle est en requier sur les page que je desir proteger

le proble c que lorsque je desire me connecté a une de ces page il me dit
Vous n'êtes pas autorisez à acceder à cette page

donc la est mon probleme et je n arrive pas a comprendre pourquoi j ai l impression qu il ne trouve pas le couple login / pass donc il m empeche d accedé a la page

Posté : 08 oct. 2007, 01:45
par iclo
Dans ce genre de cas, pas de miracle, il faut débugger :D
Fait des affichage intermédiare dans ton code de connexion, par exemple en affichant les informations reçues en méthode Post depuis le formulaire, les infos récupérées dans la base de données, etc
Afin de pouvoir isoler le problème.
Bonne continuation, et n'hésite pas à nous soumettre les résultats de tes tests pour de plus amples informations.

Posté : 08 oct. 2007, 03:57
par Patriboom
Je n'ai vu nulle part d'inscription du contenu de $_SESSION
La commande " session_write_close(); " , si je ne m'abuse, me semble essentielle pour l'inscription du contenu du tableau dans la mémoire.

Apparaît-elle quelque part dans ton code?

Posté : 08 oct. 2007, 05:47
par Tracker
connexion
<?php
// on teste si le visiteur a soumis le formulaire de connexion
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

     $base = mysql_connect('localhost', 'root', '');
        mysql_select_db ('dog', $base);
        
        // on teste si une entrée de la base contient ce couple login / pass
        $sql = 'SELECT count(*) FROM membre WHERE login="'.addslashes($_POST['login']).'" AND pass= "'.addslashes($_POST['pass']).'"';
        $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
        $data = mysql_fetch_array($req);
          
        
        // si on obtient une réponse, alors l'utilisateur est un membre
        if ($data[0] == 0) {
            session_start();
            $_SESSION['login'] = $_POST['login'];
            header('Location: index.php');
            exit();
        }
        // si on ne trouve aucune réponse, le visiteru s'est trompé soit dans son login, soit dans son mot de passe
        elseif ($data[0] == 1)  non reconnu.';
        }{
            $erreur = 'Compte
        // sinon, alors la, il y a un gros problème :)
        else {
            $erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
        }
    }
    else {
        $erreur = 'Au moins un des champs est vide.';
    }
}
?>
Es-tu sûr de nous avoir donné le code original de ta page connexion, car le test de connexion que tu nous donne semble complètement faux:
if ($data[0] == 0) // pas d'utilisateur dans la base
if ($data[0] == 1) // utilisateur ok -> mise à jour des informations de la session
if ($data[0] > 1)   // cas impossible si tu mets une contrainte d'unicité sur la table membre(login).

Posté : 08 oct. 2007, 07:37
par AB
Je n'ai vu nulle part d'inscription du contenu de $_SESSION
La commande " session_write_close(); " , si je ne m'abuse, me semble essentielle pour l'inscription du contenu du tableau dans la mémoire.
:?: :?:

Posté : 08 oct. 2007, 07:41
par Sékiltoyai
L'écriture dans les fichiers de session est automatique et implicite à la fin du script…

Posté : 09 oct. 2007, 20:44
par natas
deja merci pour tte vos reponses
je nai pas encor eu le tps de reflechir a mon probleme mais je vais commancé par debuger comme dit gilo :)