Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 10 sur 10
  1. #1
    Membre à l'essai
    Inscrit en
    juillet 2003
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 91
    Points : 23
    Points
    23

    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 :
    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 :
    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 539
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 539
    Points : 8 007
    Points
    8 007

    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...
    # Dans la Création, tout est permis mais tout n'est pas utile...

  3. #3
    Membre à l'essai
    Inscrit en
    juillet 2003
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 91
    Points : 23
    Points
    23

    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 :
    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 539
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 539
    Points : 8 007
    Points
    8 007

    Par défaut

    J'ai repris ton premier code en y incluant des commentaires afin de te permettre d'arriver à tes fins :
    Code :
    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 :
    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à.
    # Dans la Création, tout est permis mais tout n'est pas utile...

  5. #5
    Membre à l'essai
    Inscrit en
    juillet 2003
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 91
    Points : 23
    Points
    23

    Par défaut

    Merci rawsrc. Je vais tester cela ce soir. Je te tiens au courant..........

  6. #6
    Membre à l'essai
    Inscrit en
    juillet 2003
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 91
    Points : 23
    Points
    23

    Par défaut

    Ok,

    Je met se qui se passe (pour comprendre).

    Dans,
    Code :
    1
    2
    3
    $error = '';
    $login = '';
    $pwd   = '';
    Je sais pas si je dois remplir ceci. Et si oui avec quoi ?

    Dans,
    Code :
    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 :
    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 :
    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 :
    if (empty($_SESSION['user'])) {
    par
    Code :
    if (empty($_SESSION['login'])) {

  7. #7
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 539
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 539
    Points : 8 007
    Points
    8 007

    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 :
    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...).
    # Dans la Création, tout est permis mais tout n'est pas utile...

  8. #8
    Membre à l'essai
    Inscrit en
    juillet 2003
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 91
    Points : 23
    Points
    23

    Par défaut

    Merci,

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

    Code :
    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
    Modérateur
    Avatar de rawsrc
    Homme Profil pro Martin
    Dev indep
    Inscrit en
    mars 2004
    Messages
    3 539
    Détails du profil
    Informations personnelles :
    Nom : Homme Martin
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : mars 2004
    Messages : 3 539
    Points : 8 007
    Points
    8 007

    Par défaut

    simple, dans admin.php ceci devrait suffire
    Code :
    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...
    # Dans la Création, tout est permis mais tout n'est pas utile...

  10. #10
    Membre à l'essai
    Inscrit en
    juillet 2003
    Messages
    91
    Détails du profil
    Informations forums :
    Inscription : juillet 2003
    Messages : 91
    Points : 23
    Points
    23

    Par défaut

    Citation Envoyé par rawsrc Voir le message
    simple, dans admin.php ceci devrait suffire
    Code :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •