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

Langage PHP Discussion :

Menu selon utilisateurs [PHP 5.4]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut Menu selon utilisateurs
    Bonjour,

    En fouillant dans le forum ja'ai trouvee ceci.
    http://www.developpez.net/forums/d82...selon-session/

    J'ai le code suivant mais je sais pas si peux le mettre ou pas pour l'adapter a mon code.

    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
    <?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 ('monhost', 'moncompte', 'monpass');
    		mysql_select_db ('matable', $base);
     
    		// on teste si une entrée de la base contient ce couple login / pass
    		$sql = 'SELECT count(*) FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.mysql_escape_string(md5($_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: membre.php');
    			exit();
    		}
    		// si on ne trouve aucune réponse, le visiteur 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.';
    	}
     
    }
    ?>
    <html>
    <head>
    <title>Accueil</title>
    </head>
     
    <body>
    Connexion à l'espace membre :<br />
    <form action="index.php" method="post">
    Login : <input type="text" name="login" value="<?php if (isset($_POST['login'])) echo htmlentities(trim($_POST['login'])); ?>"><br />
    Mot de passe : <input type="password" name="pass" value="<?php if (isset($_POST['pass'])) echo htmlentities(trim($_POST['pass'])); ?>"><br />
    <input type="submit" name="connexion" value="Connexion">
    </form>
    <a href="inscription.php">Vous inscrire</a>
    <?php
    if (isset($erreur)) echo '<br /><br />',$erreur;
    ?>
    </body>
    </html>
    J'ai ajouter dans ma table en plus de, login,pass,pass_md5. J'ai mis compte. Ou on specifie si util ou admin.

    Je pense qu'il faut modifier ici

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // si on obtient une réponse, alors l'utilisateur est un membre
    	if ($data[0] == 1) {
    	session_start();
    	$_SESSION['login'] = $_POST['login'];
    	header('Location: membre.php');
    	exit();
    	}
    Est ce que j'ai bon ??? Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    le meilleur moyen pour savoir si t'as bon c'est d'essayer, non ?

    Tu peux factoriser un peu ton code :
    - empty() fait déjà la vérification isset(),
    - il est bien plus performant de laisser le moteur PHP gérer en interne la libération des ressources de base de données, donc tu n'as pas besoin de mysql_free_result() ni de mysql_close(),
    - les fonctions mysql_xxx ont été abandonnées au profit de PDO ou des fonctions mysqli_xxx, pense à migrer,
    - enfin, factorise le code de connexion à ta base de données car je pense que tu en auras besoin un peu partout...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Merci d'avoir répondu. J'ai déjà essayer plusieurs méthode.
    Peut etre ais je oublier de mettre le code de membre.php

    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
    <?php
    session_start();
    if (!isset($_SESSION['login'])) {
    	header ('Location: index.php');
    	exit();
    }
    ?>
     
    <html>
    <head>
    <title>Espace membre</title>
    </head>
     
    <body>
    Bienvenue<?php echo htmlentities(trim($_SESSION['login'])); ?>!<br />
    <a href="deconnexion.php">Déconnexion</a>
    </body>
    </html>
    Je comprend que lorsque on est validée on va sur membre.php
    Mais est ce possible que membre.php redirige selon le type de compte (admin ou util) qui correspond au login ?

    PS: Quand a mysql_xxx, etc.... C'est bien beau mais pour moi c'est du charabia. Et je dois avouer que le code que j'ai mis sur le forum n'est pas de moi. Mais j'essai de faire mon bout de chemin en comprenant ce qui ne va pas. C'est pour un usage interne chez moi et non pour être sur le net. Tous le monde n'est pas doué comme ceux qui me repondent.

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    J'ai repris ton premier code en y incluant des commentaires afin de te permettre d'arriver à tes fins :
    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
    64
    65
    66
    67
    68
    69
    <?php
     
    $error = '';
    $login = '';
    $pwd   = '';
     
    if (isset($_POST['connexion']) && $_POST['connexion'] === 'connexion') {
        if ( ! (empty($_POST['login']) || empty($_POST['pass']))) {
     
            $cnx = mysql_connect('monhost', 'moncompte', 'monpass');
            if ($cnx === false) {
                die('Connection failure');
            }
     
            if (mysql_select_db('matable', $cnx) === false) {
                die('Select database failure');
            }
     
            $login = trim($_POST['login']);
            $pwd   = trim($_POST['pass']);
     
            // on extrait directement les données de l'utilisateur au lieu de vérifier son existence
            // dans les données, il doit y avoir le rôle (admin, user, reader...)
            $sql  = 'SELECT * FROM membre WHERE login="'.mysql_escape_string($login).'" AND pass_md5="'.mysql_escape_string(md5($pwd)).'"';
            $exec = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
     
            // l'erreur : "Plusieurs membres ont les mêmes identifiants de connexion" ne devrait jamais se produire
            // dans la mesure où cette éventualité doit être gérée directement par la base de données qui doit
            // rejeter les enregistrements enfreignant l'unicité de l'identifiant de connexion
     
            $data = mysql_fetch_assoc($exec);
     
            if (empty($data)) {
                $error = 'Compte non reconnu.';
            }
            else {
                session_start();
                // on enregistre en session tous les attributs de l'utilisateur
                $_SESSION['user'] = $data;
                header('Location: membre.php');
                exit;
            }
        }
        else {
            $error = 'Au moins un des champs est vide.';
        }
    }
     
    // fonction d'échappement des caractères dangereux (UTF-8)
    $hsc = function($p) { return htmlspecialchars($p); };
    ?>
    <html>
    <head>
    <title>Accueil</title>
    </head>
     
    <body>
    Connexion à l'espace membre :<br />
    <form action="index.php" method="post">
        Login : <input type="text" name="login" value="<?php echo $hsc($login) ?>"><br />
        Mot de passe : <input type="password" name="pass" value="<?php echo $hsc($pwd) ?>"><br />
    <input type="submit" name="connexion" value="connexion">
    </form>
    <a href="inscription.php">Vous inscrire</a>
    <?php if ( ! empty($error)): ?>
        <br /><br /><?php echo $hsc($error) ?>
    <?php endif ?>
    </body>
    </html>
    et voilà une idée de fichier membre.php qui redirige en fonction des droits :
    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
    <?php
    session_start();
     
    if (empty($_SESSION['user'])) {
        header('Location: index.php');
        exit;
    }
     
    $redirects = array(
        'admin'  => 'accueil_administrateur.php',
        'user'   => 'accueil_utilisateur.php',
        'reader' => 'accueil_lecteur.php',
    );
     
    $role = $_SESSION['user']['role'];
    header("Location: {$redirects[$role]}");
    exit;
    ?>
    Bref à creuser mais l'idée est là.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Merci rawsrc. Je vais tester cela ce soir. Je te tiens au courant..........

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Ok,

    Je met se qui se passe (pour comprendre).

    Dans,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $error = '';
    $login = '';
    $pwd   = '';
    Je sais pas si je dois remplir ceci. Et si oui avec quoi ?

    Dans,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            else {
                session_start();
                // on enregistre en session tous les attributs de l'utilisateur
                $_SESSION['user'] = $data;
                header('Location: membre.php');
                exit;
            }
    Je dois changer user par login ???

    Dans,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // fonction d'échappement des caractères dangereux (UTF-8)
    $hsc = function($p) { return htmlspecialchars($p); };
    Dreamweaver me met une erreur syntaxe.

    Ensuite allons a membre.php

    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
    <?php
    session_start();
     
    if (empty($_SESSION['user'])) {
        header('Location: index.php');
        exit;
    }
     
    $redirects = array(
        'admin'  => 'admin.php',
        'user'   => 'util.php',
        'reader' => 'accueil_lecteur.php',
    );
     
    $role = $_SESSION['user']['role'];
    header("Location: {$redirects[$role]}");
    exit;
    ?>
    Dois je changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($_SESSION['user'])) {
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (empty($_SESSION['login'])) {

  7. #7
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Tu ne dois rien changer en l'état.
    J'ai juste modifié légèrement le suivi de l'utilisateur pour que tu puisses arriver à tes fins dans les redirections de membre.php
    Relis mes commentaires.

    Au lieu de stocker uniquement le login en session, on stocke toutes les données de l'utilisateur. En gros on a quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $_SESSION['user'] = array(
        'id'       => 14568722,
        'login'    => 'superthx',
        'password' => '458df254fg689fm',    // hashé avec md5
        'role'     => 'admin'
    );
    J'ai supposé que ta table t_membre avait comme colonnes : id, login, password, role.

    Et je te conseillerai de jeter Dreamweaver, c'est une croûte sans compter qu'il existe des IDE gratuits qui sont bien mieux adaptés (Netbeans, Eclipse...).

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Merci,

    Sa marche correctement en mettant ton code et modifiant ce que j'ai.

    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
    <?php
    session_start();
     
    if (empty($_SESSION['user'])) {
        header('Location: index.php');
        exit;
    }
     
    $redirects = array(
        'admin'  => 'admin.php',
        'util'   => 'util.php',
        'reader' => 'accueil_lecteur.php',
    );
     
    $compte = $_SESSION['user']['compte'];
    header("Location: {$redirects[$compte]}");
    exit;
    ?>
    Si je me connecte selon le type de compte je suis bien rediriger.

    Mais je rencontre un hic....

    Comment protéger admin.php et util.php ne puissent être accessible que par le type de membres ? Faut il modifier quelque chose dans chaque fichier.? Merci.

  9. #9
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    simple, dans admin.php ceci devrait suffire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    session_start();
     
    if (empty($_SESSION['user'])) {
        header('Location: index.php');
        exit;
    }
     
    if ($_SESSION['user']['compte'] !== 'admin') {
        header("HTTP/1.1 403 Forbidden");
        exit;
    }
    comme tu peux t'en rendre compte, tu devrais commencer à réfléchir à la manière de factoriser le code redondant...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    Points : 112
    Points
    112
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    simple, dans admin.php ceci devrait suffire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    session_start();
     
    if (empty($_SESSION['user'])) {
        header('Location: index.php');
        exit;
    }
     
    if ($_SESSION['user']['compte'] !== 'admin') {
        header("HTTP/1.1 403 Forbidden");
        exit;
    }
    comme tu peux t'en rendre compte, tu devrais commencer à réfléchir à la manière de factoriser le code redondant...
    C'est PARFAIT

    J'ai pas tout compris....... Mais c'est exactement ce que je voulais faire.
    Je te remercie 1000X....... de m'avoir donner tes solutions.....
    Pas evident le php pour moi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment donner un menu selon l utilisateur connecté
    Par nouraty dans le forum Développement Web en Java
    Réponses: 1
    Dernier message: 13/04/2012, 08h57
  2. Réponses: 4
    Dernier message: 29/04/2011, 22h34
  3. Activation bouton selon utilisateur
    Par hugo1992 dans le forum Sécurité
    Réponses: 11
    Dernier message: 27/01/2008, 14h13
  4. Générer un menu selon un répertoire
    Par stailer dans le forum Langage
    Réponses: 7
    Dernier message: 24/11/2006, 10h04
  5. Réponses: 1
    Dernier message: 06/11/2005, 17h16

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