IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Droits membres sessions


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Par défaut Droits membres sessions
    Bonjour, Etant etudiant en DIUT Réseaux et télécommunication j'effectue actuellement un stage de programmation et étant plus compétant en réseaux et télécoms je galère un peu.. même si j'aime ce que je fais actuellement.

    Pour mon stage je dois développer un petit applicatif et pour cela j'ai du mettre en place un petit espace membre (juste de la connexion et de la déconnexion, pas d'inscription.) J'ai voulu gérer les droits de ces membre en ajoutant un champ dans ma table user : rang avec 0 ou 1 .
    Je voudrais que les utilisateurs qui ont la valeur rang 1 puisse être redirigé vers index2.php et ceux qui ont la valeur rang 0 puisse être redirigé vers index3.php.

    J'ai donc ma page de connectio/deco suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <?php
    include('config2.php');
    //Si lutilisateur est connecte, on le deconecte
    if(isset($_SESSION['username'])){
        //On le deconecte en supprimant simplement les sessions username et userid
        unset($_SESSION['username'], $_SESSION['userid']);
        header("location: index.html" );
    ?>
    <?php
    }
    else{
        $ousername = '';
        //On verifie si le formulaire a ete envoye
        if(isset($_POST['username'], $_POST['password'])){
            //On echappe les variables pour pouvoir les mettre dans des requetes SQL
            if(get_magic_quotes_gpc()){
                $ousername = stripslashes($_POST['username']);
                $username = mysql_real_escape_string(stripslashes($_POST['username']));
                $password = stripslashes($_POST['password']);
            }
            else{
                $username = mysql_real_escape_string($_POST['username']);
                $password = $_POST['password'];
            }
            //On recupere le mot de passe de lutilisateur
            $req = mysql_query('select password,id from users where username="'.$username.'"');
            $dn = mysql_fetch_array($req);
            //On le compare a celui quil a entre et on verifie si le membre existe
            if($dn['password']==$password and mysql_num_rows($req)>0){
                //Si le mot de passe es bon, on ne vas pas afficher le formulaire
                $form = false;
                //On enregistre son pseudo dans la session username et son identifiant dans la session userid
                $_SESSION['username'] = $_POST['username'];
                $_SESSION['userid'] = $dn['id'];
                if(isset($_SESSION['rang'])){
       		if($_SESSION['rang']==1) header('location:index2.php');
       		else header('location:index3.php');
    	    ?}
            }
            else{
                //Sinon, on indique que la combinaison nest pas bonne
                echo 'La combinaison n\'est pas bonne.';
                header("location: index.html" );
            }
        }
        else{
        }
    }        
    ?>


    Mon problème est que je reste bloqué sur l'acceuil, ma variable $_SESSION['rang'] n'est pas crée et je ne sais pas ou dans le code ni comment la créer.

    Merci d'avance de prendre le temps de me lire et de me répondre.

    Thomas.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    ma variable $_SESSION['rang'] n'est pas crée
    Dans quelle partie du code la crées-tu ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éprouvé Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    <?php
    include('config2.php');
    //Si lutilisateur est connecte, on le deconecte
    	if(isset($_SESSION['username']))
    	{
            //On le deconecte en supprimant simplement les sessions username et userid
            unset($_SESSION['username'], $_SESSION['userid']);
    	header("location: index.html" );
    ?>
    <?php
    }
    else
    {
            $ousername = '';
            //On verifie si le formulaire a ete envoye
            if(isset($_POST['username'], $_POST['password']))
            {
                    //On echappe les variables pour pouvoir les mettre dans des requetes SQL
                    if(get_magic_quotes_gpc())
                    {
                            $ousername = stripslashes($_POST['username']);
                            $username = mysql_real_escape_string(stripslashes($_POST['username']));
                            $password = stripslashes($_POST['password']);
                    }
                    else
                    {
                            $username = mysql_real_escape_string($_POST['username']);
                            $password = $_POST['password'];
                    }
                    //On recupere le mot de passe de lutilisateur
                    $req = mysql_query('select password,id from users where username="'.$username.'"');
                    $dn = mysql_fetch_array($req);
                    //On le compare a celui quil a entre et on verifie si le membre existe
                    if($dn['password']==$password and mysql_num_rows($req)>0)
                    {
                            //Si le mot de passe es bon, on ne vas pas afficher le formulaire
                            $form = false;
                            //On enregistre son pseudo dans la session username et son identifiant dans la session userid
                            $_SESSION['username'] = $_POST['username'];
                            $_SESSION['userid'] = $dn['id'];
                            $_SESSION['rang'] = $dn['rang'];
     
                             if(isset($_SESSION['rang']))
    				{
       				if($_SESSION['rang']==1) header('location:index2.php');
       				else header('location:index3.php');
    				?}
                    }
                    else
                    {
                            //Sinon, on indique que la combinaison nest pas bonne
     
                            echo 'La combinaison n\'est pas bonne.';
                            header("location: index.html" );
                    }
            }
            else
            {
     
            }
     
    }        
    ?>
    Comme ça ?

    Jisig

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Par défaut
    J'ai essayé comme toi jisig mais page blanche, pas de redirection lors de la connexion.

  5. #5
    Membre éprouvé Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut
    (ce n'est peut-être que pour tester mais je préviens que là qu'importe le rang il arrivera sur l'index3).

    Tu n'as pas d'html dans ton include dis moi ?

    Tu as essayer de faire un echo pour voir s'il passait bien dans ta condition ?

    si il passe bien, n'essayerait tu pas avec une redirection en javascript éventuellement ?

    Jisig

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Par défaut
    Dans mon include j'ai une session start () et une connexion a ma BD.

    Avant j'avais mis à la place des droit un code de ce style mais bon c'est pas secure et c'est pas terrible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if($_POST['username']=='root' && $_POST['password']=='saintex01'){
        header("location: index2.php" ); 
    }
    else{
        header("location: index3.php" );
    }
    et pour ce qui est de l'echo, il ne passe même pas.

  7. #7
    Membre éprouvé Avatar de jisig
    Homme Profil pro
    null
    Inscrit en
    Avril 2014
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Indonésie

    Informations professionnelles :
    Activité : null

    Informations forums :
    Inscription : Avril 2014
    Messages : 146
    Par défaut
    Essaye l'echo dans cette condition alors ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($dn['password']==$password and mysql_num_rows($req)>0)
    Il faut toujours traquer ses erreurs

  8. #8
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Citation Envoyé par jisig Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
                    $req = mysql_query('select password,id from users where username="'.$username.'"');
                    $dn = mysql_fetch_array($req);
                    //On le compare a celui quil a entre et on verifie si le membre existe
                    if($dn['password']==$password and mysql_num_rows($req)>0)
                    {
                            //Si le mot de passe es bon, on ne vas pas afficher le formulaire
                            $form = false;
                            //On enregistre son pseudo dans la session username et son identifiant dans la session userid
                            $_SESSION['username'] = $_POST['username'];
                            $_SESSION['userid'] = $dn['id'];
                            $_SESSION['rang'] = $dn['rang'];
     
    ?>
    Comme ça ?

    Jisig
    Ce code ne peut pas marcher étant donné que le rang n'est pas retourné dans la requête sql.

    Voici un code un peu plus propre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $req = mysql_query('select password,id,rang from users where username="' . $username . ' AND password="' . $password . '"');
    if (mysql_num_rows($req) > 0) {
        $dn = mysql_fetch_array($req);
     
        $form = false;
     
        $_SESSION['username'] = $_POST['username'];
        $_SESSION['userid'] = $dn['id'];
        $_SESSION['rang'] = $dn['rang'];
     
        if ($dn['rang'] == 1)
            header('location:index2.php');
        else
            header('location:index3.php');
    }
    Deux remarques au passage : l'extension Mysql est obsolète, il faut absolument passer à mysqli (qui est similaire), ou encore mieux, PDO.

    Et deuxième point, IL NE FAUT JAMAIS STOCKER EN CLAIR UN MOT DE PASSE DANS UNE BDD (voir ce tuto pour stocker des mots de passe de manière sécurisée).

    (quand c'est écrit en majuscule c'est que c'est important).

  9. #9
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'La combinaison n\'est pas bonne.';
    header("location: index.html" );
    Ces deux lignes n'ont aucun sens...
    Tu peux soit afficher un message, soit faire une redirection, mais pas les deux en même temps...
    Tu ne peux pas à la fois dire "n'affiche pas cette page" et "affiche cette page" !

    Ensuite, se pose bien entendu le problème des headers already sent...
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2014
    Messages : 16
    Par défaut
    Tu as raison, j'ai enlevé la redirec et pour les headers already send j'ai mis ce code dans mon include : if(session_id()=='') { session_start(); }

  11. #11
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Ton test est inutile vu que "session_id()" te retournera toujours une chaîne vide tant que "session_start" n'aura pas été appelé.

Discussions similaires

  1. Gestion des droits avec session serveur
    Par comode dans le forum Windows XP
    Réponses: 3
    Dernier message: 17/10/2009, 20h39
  2. [Cookies] Login membre, protection vol de session
    Par july dans le forum Langage
    Réponses: 18
    Dernier message: 06/06/2006, 11h02
  3. [Sécurité] Pb PHP pour une session membre
    Par fredylover dans le forum Langage
    Réponses: 2
    Dernier message: 02/05/2006, 08h59
  4. [Session] Gestion des droits en PHP
    Par persi dans le forum Langage
    Réponses: 3
    Dernier message: 22/02/2006, 14h54
  5. [Sécurité] probleme de session membre
    Par stomerfull dans le forum Langage
    Réponses: 8
    Dernier message: 09/12/2005, 14h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo