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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    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 confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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 éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    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 confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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 éclairé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : Espagne

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

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

    Informations forums :
    Inscription : Juillet 2003
    Messages : 323
    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'])) {

+ 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