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 :

Redirection selon les droits


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 411
    Points : 117
    Points
    117
    Par défaut Redirection selon les droits
    Bonjour à tous
    qui peu me dire ou ça déconne dans mon script

    je cherche à faire des redirection selon les niveaux mais ca me renvoi tout le temps vers la page NON

    voici mon script et soyez indulgents car j'apprend, c'est d'aide que j'ai besoin pas de morale Merci

    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
     
     
    <?php
    session_start();  // démarrage d'une session
     
     
    // on vérifie que les variables de session identifiant l'utilisateur existent
    if (isset($_SESSION['identifiant']) && isset($_SESSION['mdp'])) {
        $identifiant = $_SESSION['identifiant'];
        $mdp = $_SESSION['mdp'];
    }
    ?>
     <?php
    try
    {
        // On se connecte à MySQL
        $bdd = new PDO('mysql:host=*****;dbname=********;charset=utf8', '*****', '******');
    }
    catch(Exception $e)
    {
        // En cas d'erreur, on affiche un message et on arrête tout
            die('Erreur : '.$e->getMessage());
    }
     
     
    // Si tout va bien, on peut continuer
     
     
    // On récupère tout le contenu de la table 
    $reponse = $bdd->query('SELECT * FROM users');
     
     
    // On affiche chaque entrée une à une
    while ($donnees = $reponse->fetch())
    {
     
     
    if($Niveau == "1")
    {
    header('Location: /amicalistes/Administration/Noel/ListeInscritsNoel.php');
    }
    if($Niveau == "2")
    {
    header('Location: /amicalistes/Administration/Noel/ListeInscritsNoel.php');
    }
    else
    {
    header('Location: /amicalistes/Administration/Noel/Non.php');
    }
     
     
    ?>
    <?php
    }
     
     
    $reponse->closeCursor(); // Termine le traitement de la requête
     
     
    ?>

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    // On affiche chaque entrée une à une
    Donc vous parcourez toute la table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    else
    {
    header('Location: /amicalistes/Administration/Noel/Non.php');
    }
    Il est probable que le dernier enregistrement de la table soit dans le cas else.

    je cherche à faire des redirection selon les niveaux
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // On récupère tout le contenu de la table 
    $reponse = $bdd->query('SELECT * FROM users');
    Pourquoi récupérer toute la table des utilisateurs et non pas seulement la ligne de l'utilisateur connecté ?
    Si j'ai bien compris, vous voulez rediriger l'utilisateur selon son niveau, non ?

    Donc il faudrait plutôt faire un truc de ce genre :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT /* les colonnes nécessaires et pas * */
    FROM users -- il vaudrait mieux un nom de table au singulier mais bon...
    WHERE id = :id -- on sélectionne l'utilisateur connecté
    Avec cette requête, vous allez obtenir le niveau de l'utilisateur connecté, ce qui vous permettra de le rediriger sur la bonne page.
    Et plutôt que $reponse = $bdd->query('SELECT * FROM users');, passez du coup par une requête préparée :
    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
    $sql = '
    	SELECT niveau
    	FROM users
    	WHERE id = :id
    ';
     
    $prep = $bdd->prepare($sql);
    $prep->bindParam(':id', $_SESSION['identifiant'], PDO::PARAM_STR);
    $prep->execute();
     
    $result = $prep->fetch();
     
    $niveau = $result['niveau'];
     
    switch ($niveau)
    {
    	case 1:
    		header('Location: /amicalistes/Administration/Noel/ListeInscritsNoel.php');
    	case 2:
    		header('Location: /amicalistes/Administration/Noel/ListeInscritsNoel.php');
    	default:
    		header('Location: /amicalistes/Administration/Noel/Non.php');
    }
    exit;
    Écrit vite fait et pas testé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // on vérifie que les variables de session identifiant l'utilisateur existent
    if (isset($_SESSION['identifiant']) && isset($_SESSION['mdp'])) {
        $identifiant = $_SESSION['identifiant'];
        $mdp = $_SESSION['mdp'];
    À quoi sert de stocker le mot de passe en session ?
    C'est dangereux, en plus !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Les remarques de CinePhil sont correctes : on ne lit pas toute la table quand on ne s'intéresse à qu'à une seule ligne et on ne stocke pas les mots de passe en session (et j'espère fortement que le mot de passe n'est pas stocké en clair en base, hein )

    Cela dit, l'origine de ton problème est beaucoup plus simple : où initialises-tu la variable $Niveau ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Cela dit, l'origine de ton problème est beaucoup plus simple : où initialises-tu la variable $Niveau ?
    Arf ! Je n'avais même pas vu ça !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 411
    Points : 117
    Points
    117
    Par défaut
    merci les amis je suis pris par mon boulot
    j'essaie ca dimanche j'aurai plus de temps et je vous redis

    en tout cas merci

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 411
    Points : 117
    Points
    117
    Par défaut
    Bon j'ai fais des essais dimanche mais je n'y arrive pas

    Je répète mon code est pour une petite association donc désolé s'il vous semble obsolète.

    Dite mois ou je merde car la je rame trop

    voici mon code de login

    login.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
    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
     
     
    <html>
        <head>
            <meta charset="UTF-8">
            <title>Connexion</title>
            <style type="text/css">
    <!--
    .Style1 {color: #990000}
    -->
            </style>
    </head>
        <body>
     
    <table width="685" border="0" align="center">
      <tr>
        <td><h1 align="center" class="Style1">Connexion utilisateur</h1></td>
      </tr>
    </table>
     
     
     
     
    <table width="685" border="1" align="center" bgcolor="#FFFFFF">
      <tr>
    <td>        <form action="login_post.php" method="post">
                <label for="nom">
                <table width="685" border="0">
                  <tr>
                    <td width="123"><div align="center"><img src="https://www.developpez.net/forums/images/Logo.png" width="173" height="236"></div></td>
                    <td width="536"><div align="center">Nom :</div>
                      </label>
                      <div align="center">
                      <input type="text" name="identifiant" id="identifiant" required />
                      </div>
                      <br>
     
     
                      <div align="center">Mot de passe :</div>
                      <div align="center">
                        <p>
                          <input type="password" name="mdp" id="mdp" required />
                        </p>
                    </div></td>
                  </tr>
                </table>
            <div align="center"></div>
                <div align="center">
                  <table width="685" border="0">
                    <tr>
                      <td width="169">&nbsp;</td>
                      <td width="500"><div align="center">
                        <input type="submit" value="Connexion">
                      </div></td>
                    </tr>
                  </table>
                  </div>
        </form></td>
      </tr>
    </table>
     
     
    </body>
    </html>
    ensuite les données sont récupérées par cette page

    login_post.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
    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
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    <?php
    session_start();  // démarrage d'une session
     
     
    // on vérifie que les données du formulaire sont présentes
     
     
    if (isset($_POST['identifiant']) && isset($_POST['mdp'])) {
        require 'fonctions.php';
        $bdd = getBdd();
     
     
        // cette requète permet de récupérer l'utilisateur depuis la BD
        $requete = "SELECT * FROM users WHERE identifiant=? AND mdp=?";
        $resultat = $bdd->prepare($requete);
        $login = $_POST['identifiant'];
        $mdp = $_POST['mdp'];
        $resultat->execute(array($login, $mdp,));
        if ($resultat->rowCount() == 1) {
            // l'utilisateur existe dans la table
            // on ajoute ses infos en tant que variables de session
            $_SESSION['identifiant'] = $login;
            $_SESSION['mdp'] = $mdp;
        $_SESSION['Niveau'] = $Niveau;
            // cette variable indique que l'authentification a réussi
            $authOK = true;
        }
    }
    ?>
     
     
    <!doctype html>
    <html>
    <head>
        <meta charset="UTF-8" />
        <title>Résultat de l'authentification</title>
        <style type="text/css">
    <!--
    .Style1 {color: #990000}
    -->
        </style>
    </head>
    <body>
     
    <div align="center">
      <table width="685" border="0">
        <tr>
          <td><h1 align="center" class="Style1">Résultat de l'authentification</h1></td>
        </tr>
      </table>
      <table width="685" border="1">
        <tr>
          <td bgcolor="#FFFFFF">    <div align="center">
            <?php
        if (isset($authOK)) {
            echo "<p>Vous avez été reconnu(e) en tant que " . escape($login) . "</p>";
            header('Location: https://ma_page_a_ouvrir.php');
        }
        else { ?>
            </div>
            <table width="685" border="0">
              <tr>
                <td width="93"><img src="https://www.developpez.net/forums/images/Logo.png" width="86" height="118"></td>
                <td width="576"><p align="center">Vous n'avez pas été reconnu(e)</p>
                <p align="center"><a href="login.php">Nouvel essai | <a href="../index.php">Retour</a></p></td>
              </tr>
            </table>
            <div align="center">
                <?php } ?>
          </div></td>
        </tr>
      </table>
    </div>
    </body>
    </html>
    voila ça, globalement ça fonctionne mais je sais pas ou je bloque pour que dans "ma_page_a_ouvrir", selon le niveau de chaque utilisateur, une redirection se fasse

    voici le début du code de "ma_page_a_ouvrir"

    ma_page_a_ouvrir.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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
     
    <?php
    session_start();  // dÃémarrage de ma session
     
     
    // on vérifie que les variables de session identifiant l'utilisateur existent
    if (isset($_SESSION['identifiant']) && isset($_SESSION['mdp'])) {
        $login = $_SESSION['identifiant'];
        $mdp = $_SESSION['mdp'];
        $Niveau = $_SESSION['Niveau'];
    }
    // Si aucun identifiant redirection vers la page de connexion
    else
        {
    header('Location: ../login.php');
        }
    // Vérification du niveau
    if  $Niveau = "1";
       {
    header('Location: ../page1.php');
       }
     
     
    if $Niveau = "2";
        {
    header('Location: ../login.php');
        }
     
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    Pourriez-vous m'aider en restant calme lol je débute serieusement et je sais que c'est pas beau

    merci

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    je sais que c'est pas beau
    Effectivement, c'est une horreur !

    Le problème est dans login_post.php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        $_SESSION['Niveau'] = $Niveau;
    Toujours le même problème signalé par Celira : $niveau n'est pas valorisé.
    En fait, le niveau est à extraire du résultat de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ($resultat->rowCount() == 1) 
    {
    	$ligne = $resultat->fetch(PDO::FETCH_ASSOC);
    	$_SESSION['niveau'] = $ligne['niveau']; // en supposant que la colonne contenant le niveau de la personne s'appelle bien 'niveau'
    	$_SESSION['identifiant'] = $login;
    	// Ne pas stocker le mot de passe en session, ça ne sert à rien !
    }
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2007
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 411
    Points : 117
    Points
    117
    Par défaut
    pour le mot de passe c'est juste au dessus qu'il faut que je l'enlève

    désolé de vous faire offense par ma programmation

  9. #9
    Membre régulier Avatar de monaka
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mars 2017
    Messages : 64
    Points : 107
    Points
    107
    Par défaut
    quand tu auras géré le problème du niveau,

    voila ça, globalement ça fonctionne mais je sais pas ou je bloque pour que dans "ma_page_a_ouvrir", selon le niveau de chaque utilisateur, une redirection se fasse
    avec le contrôle de login_post.php, si $authOK = true on arrive à "ma_page_a_ouvrir"
    // on vérifie que les variables de session identifiant l'utilisateur existent
    if (isset($_SESSION['identifiant']) && isset($_SESSION['mdp'])) {
    $login = $_SESSION['identifiant'];
    $mdp = $_SESSION['mdp'];
    $Niveau = $_SESSION['Niveau'];
    }
    est inutile, on a ; les variables sont conservées, plutôt

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if  ($_SESSION['niveau']== 1)
       {
    header('Location: ');
       }
     
     
    if ($_SESSION['niveau'] == 2)
        {
    header('Location:');
        }
    avec==
    La rigueur vient toujours à bout de l'obstacle.
    Les détails font la perfection, et la perfection n'est pas un détail.

    J'avais une charrette tirée par des chevaux, mais j'ai acheté une voiture avec un moteur.
    Est-ce que je dois tout le temps rouler avec le moteur, ou est-ce que je peux atteler mes chevaux à la voiture de temps en temps ?

Discussions similaires

  1. [Débutant] Est il possible de n'afficher qu'un type d'item dans une liste selon les droits
    Par jubourbon dans le forum Configuration
    Réponses: 5
    Dernier message: 07/01/2014, 11h54
  2. [IP-2010] Afficher/masquer selon les droits de l'utilisateur
    Par Kael_004 dans le forum InfoPath
    Réponses: 12
    Dernier message: 28/10/2013, 10h34
  3. S'authentifier selon les droits du groupe d'un utilisateur
    Par sihamnet dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 06/08/2012, 21h35
  4. Redirection selon les caractères présents
    Par Baldy dans le forum ASP
    Réponses: 8
    Dernier message: 28/06/2010, 10h23
  5. [AC-2000] bloquer un bouton selon les droits de groupe
    Par polo31 dans le forum Sécurité
    Réponses: 2
    Dernier message: 31/07/2009, 11h26

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