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

EDI, CMS, Outils, Scripts et API PHP Discussion :

redirection ->header pour certains ET redirection-> pour d'autres selon la fonction de chacun


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 39
    Points : 4
    Points
    4
    Par défaut redirection ->header pour certains ET redirection-> pour d'autres selon la fonction de chacun
    Alors bonjour,

    je suis actuellement en stage de développeur dans une société de transports en communs, donc pardonnez moi mon niveau.

    Alors mon but est de rediriger, par le biais d' une connexion dans un formulaire :
    • les contrôleurs [->header('Location: rechercheBisTest.php')] = que les contrôleurs auront accès à ce fichier
    • ET tout le reste vers [->header('Location: recherche.php].


    Jusqu' à présent j' ai réussi tant bien que mal à donner l' accès seulement au contrôleur mais je voudrais que n' importe quelle personne, autre que contrôleur puisse être redirigé au fichier [header('Location: recherche.php].

    Voici 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
    57
    <?php 
    session_start ();
    require ("connexion.php");
     
     
    if(isset($_POST['login'])){
    if($_POST['login'] != "" && $_POST['mdp'] !=""){
    	$login = $_POST['login']; 
    	$mdp = $_POST['mdp']; 
     
     
    	$reponse = $bdd->prepare('SELECT * FROM utilisateurs WHERE login =:login  AND mdp=:mdp AND fonction="controleur";' );	
            $reponse->bindParam(':login', $login);
            $reponse->bindParam(':mdp', $mdp);
     
            $reponse->execute();
     
    	$donnees = $reponse->fetchAll();
    	if(count($donnees) == 0){
    		echo 'le mot de passe ou le login est incorrecte';
    	}
    	else{
    		foreach($donnees as $ligne)
    		{
        // traitement sur $ligne
     
    			//echo $ligne['nom'] . ' et son prénom est  ' . $ligne['prenom'] . '<br />';
     
    				$_SESSION['nom']= $ligne['nom']; 
    				$_SESSION['prenom']= $ligne['prenom'];
    				$_SESSION['type']= $ligne['type'];
    				$_SESSION['idutilisateur']= $ligne['idutilisateur'];
    				$_SESSION['fonction']= $ligne['fonction'];
     
     
    				 header('Location: rechercheBisTest.php');
     
     
     
     
     
    			//echo "fffffffff ". htmlentities($_SESSION['nom']);
    		}
    		var_dump($donnees);
    	}
     
     
    	$reponse->closeCursor();	
     
    }else{
    	echo "vous devez entrer le login et le mot de passe";
     
     
     
    }
    }
    ?>

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 39
    Points : 4
    Points
    4
    Par défaut
    En fait, je souhaiterais que toute autre personne de la société de transports en communs n' étant pas contrôleur, par exemple chauffeur, personnel de sécurité...puisse se connecter par le même formulaire de connexion que ceux des contrôleurs, soient redirigés vers une autre page ( recherche.php) et non vers (rechercheBisTest.php= page que seuls les contrôleurs peuvent avoir accès).

  3. #3
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Suivant cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(count($donnees) == 0){
    		echo 'le mot de passe ou le login est incorrecte';
    	}
    Seul les controlleurs peuvent se connecter.
    Si vous n'êtes pas controlleurs, alors la requête ne fonctionne pas il faut donc déjà donner la possibilité à tout le monde de pouvoir se connecter.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 39
    Points : 4
    Points
    4
    Par défaut
    Dois je refaire une requête avec ses parametres ou peux tu m' indiquer la méthode ?

    depuis hier je me creuse la tête, j' ai essayé réessayé, cherché sur internet, je ne trouve pas une explication de code pour mon cas

  5. #5
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Un truc du genre, en comptant sur le fait que login et mdp soit unique

    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
     
    <?php
    session_start();
    require("connexion.php");
     
     
    if (isset($_POST['login'])) {
        if ($_POST['login'] != "" && $_POST['mdp'] != "") {
            $login = $_POST['login'];
            $mdp = $_POST['mdp'];
     
     
           //je récupère le user
           $reponse = $bdd->prepare('SELECT * FROM utilisateurs WHERE login =:login  AND mdp=:mdp LIMIT 1;');
            $reponse->bindParam(':login', $login);
            $reponse->bindParam(':mdp', $mdp);
     
            $reponse->execute();
     
            $donnees = $reponse->fetch();
            if (count($donnees) == 0) {
                echo 'le mot de passe ou le login est incorrecte';
                die('il faut faire quelque chose ici');
            }
            //je vérifie si il es controleur ou non
            if ($donnees['fonction'] == 'controleur') {
     
                $_SESSION['nom'] = $donnees['nom'];
                $_SESSION['prenom'] = $donnees['prenom'];
                $_SESSION['type'] = $donnees['type'];
                $_SESSION['idutilisateur'] = $donnees['idutilisateur'];
                $_SESSION['fonction'] = $donnees['fonction'];
     
     
                header('Location: rechercheBisTest.php');
     
            } else {
                header('Location: recherche.php');
            }
            var_dump($donnees);
        }
     
     
        $reponse->closeCursor();
     
    } else {
        echo "vous devez entrer le login et le mot de passe";
     
     
    }

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 39
    Points : 4
    Points
    4
    Par défaut
    Merci super ton code, j' étais parti pour redoubler mon code avec des conditions !!!

    Juste une question
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $reponse = $bdd->prepare('SELECT * FROM utilisateurs WHERE login =:login  AND mdp=:mdp LIMIT 1;');
    J' ai compris ton code dans sa globalité mais le je ne connaissais pas

    Peux tu me dire à quoi il sert je t' en serais reconnaissant !!

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    C'est la logique de ton script qu'il faut revoir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$reponse = $bdd->prepare('SELECT * FROM utilisateurs WHERE login =:login  AND mdp=:mdp AND fonction="controleur";' );
    1- "...AND fonction="controleur" : tu ne cherches QUE les controleurs...

    2- "...AND mdp=:mdp..." : là, c'est plus grave : ça suppose que les mots de passe sont enregistrés EN CLAIR dans la BDD.
    Il NE faut JAMAIS enregistrer EN CLAIR !!!

    3- EVITE de mettre " SELECT * " : il vaut mieux indiquer uniquement les colonnes nécessaires.

    4- Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$reponse = $bdd->prepare('SELECT idutilisateur, nom, prenom, mdp, type, fonction FROM utilisateurs WHERE login =:login";' );
    Ensuite, on vérifie, pour CE login, que le mot de passe enregistré est le même que celui tapé.

    Avec le mot de passe EN CLAIR (CE QU'IL NE FAUT PAS FAIRE, je le répète) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if( $ligne['mdp'] == $mdp)
    {
      // OK, on continue...
    }
    5- Enfin, on met une condition, pour rediriger vers le bon fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    if( $ligne['fonction'] == 'controleur' )
    {
       header('Location:...............');
    } else {
       header('Location:...............');
    }
    BONNE METHODE pour le Mot de passe :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if( password_verify( $mdp, $ligne['mdp']) ) 
    {
      // OK, on continue...
    }

  8. #8
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Je suis parti du principe que la db est MySQL/MariaDB et LIMIT 1 , veux dire ne retourne qu'une seule ligne, du coup pasbesoin du fetchall mais juste du fetch. marche aussi avec Limit 6 cela ne retourne alors que les 6 premières lignes

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par keywork Voir le message
    ...mais le LIMIT 1 je ne connaissais pas

    Peux tu me dire à quoi il sert je t' en serais reconnaissant !!
    Euhh... tu ne sais pas FAIRE UNE RECHERCHE ??

    "SQL LIMIT"

  10. #10
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 39
    Points : 4
    Points
    4
    Par défaut
    AH WWWEEEE, en 5 minutes j' ai + appris qu' en formation.

    Je met la page en favoris.

    Vous pouvez pas savoir....mais vous avez fait ma journée.

    1000 merci !!!!

  11. #11
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    N'oublie pas les recommandations de @jreaux62, car ton code n'est absolument pas sécure.
    Et puis mets "résolu".

  12. #12
    Invité
    Invité(e)
    Par défaut
    @MaitrePylos +1



    Et MONTRE-NOUS ton code CORRIGE !

    On te dira si c'est OK.

  13. #13
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 39
    Points : 4
    Points
    4
    Par défaut
    Pardon pour le retard j' étais en réunion.

    Alors j' ai proposé à mon supérieur d' y mettre un peu plus de sécurité concernant la connexion et la BDD, mais il m' a rétorqué que ce n' était pas nécesssaire, donc voilà mon code ( à ne pas recopier car il dispose d' aucune sécurité =


    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
    <?php
    	session_start();
    	require("connexion.php");
     
     
    	if (isset($_POST['login'])) {
        	if ($_POST['login'] != "" && $_POST['mdp'] != "") {
            $login = $_POST['login'];
            $mdp = $_POST['mdp'];
     
     
           //je récupère l' utilisateur pour enfin me retourner qu' une seule ligne
     
            $reponse = $bdd->prepare('SELECT * FROM utilisateurs WHERE login =:login  AND mdp=:mdp LIMIT 1;');
            $reponse->bindParam(':login', $login);
            $reponse->bindParam(':mdp', $mdp);
     
            $reponse->execute();
     
            $donnees = $reponse->fetch();
            if (count($donnees) == 0) {
                echo 'le mot de passe ou le login est incorrecte';
                die('il faut faire quelque chose ici');
            }
     
     
    	 //je vérifie s'il est contrôleur ou non
     
    	if ($donnees['fonction'] == 'controleur') {
     
                $_SESSION['nom'] = $donnees['nom'];
                $_SESSION['prenom'] = $donnees['prenom'];
                $_SESSION['type'] = $donnees['type'];
                $_SESSION['idutilisateur'] = $donnees['idutilisateur'];
                $_SESSION['fonction'] = $donnees['fonction'];
     
     	//s'il est contrôleur, donc redirection vers rechercheBisTest sinon, vers recherche
     
     
                header('Location: rechercheBisTest.php');
     
            } else {
                header('Location: recherche.php');
            }
            var_dump($donnees);
        }
     
     
        $reponse->closeCursor();
     
    } else {
        echo "Veuillez entrer votre login et votre mot de passe.";
     
     
    }?>

  14. #14
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 39
    Points : 4
    Points
    4
    Par défaut rajout 'inspecteur' en + de controleur
    Salut,

    je voudrais rajouter la fonction "inspecteur en + de la fonction "controleur", ça marche mais c'est affreux lol.

    Avez vous une autre idée par tout hasard??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (($donnees['fonction'] == 'controleur') or ($donnees['fonction'] == 'inspecteur'))

  15. #15
    Invité
    Invité(e)
    Par défaut
    Où est le problème ?

    à part qu'il vaut mieux écrire || plutôt que or (qui fonctionne différemment).

    Une autre possibilité :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( in_array($donnees['fonction'], array('controleur','inspecteur') ) )
    Si tu as plus de fonctions, à rediriger vers des pages différentes, on peut utiliser switch case.

  16. #16
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 39
    Points : 4
    Points
    4
    Par défaut
    Bien Vu jreaux62 , j' ai également lu une doc sur qui est pas mal non plus.

    En tout cas merci à toi et MaitrePylos pour votre aide

  17. #17
    Invité
    Invité(e)
    Par défaut
    Le mieux est de toujours se référer au manuel PHP : switch case

  18. #18
    Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2018
    Messages : 39
    Points : 4
    Points
    4
    Par défaut
    Mon formateur m' avait fortement déconseillé d' utiliser
    break
    pour sortir d'une boucle par exemple , qu' est ce que t' en penses ?

    Est il toujours bon de l' utiliser ou y a t il une autre alternative ?

  19. #19
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Citation Envoyé par keywork Voir le message
    Mon formateur m' avait fortement déconseillé d' utiliser pour sortir d'une boucle par exemple , qu' est ce que t' en penses ?

    Est il toujours bon de l' utiliser ou y a t il une autre alternative ?
    C'est une autre question, ouvre un autre post, afin que tout le monde puisse en bénéficier.

  20. #20
    Invité
    Invité(e)
    Par défaut
    Toujours pareil :

    • Fais une RECHERCHE
    • LIS la DOC : break

    Il n'y a aucune contre-indication (si c'est employé correctement).

Discussions similaires

  1. Réponses: 12
    Dernier message: 17/05/2017, 13h00
  2. Probleme de redirection avec Header
    Par ehmppowa dans le forum Langage
    Réponses: 7
    Dernier message: 28/12/2006, 18h26
  3. Script pour identifier une redirection
    Par Raideman dans le forum Langage
    Réponses: 1
    Dernier message: 18/10/2006, 12h25
  4. [PHP-JS] Problème de redirection avec header
    Par pierrot10 dans le forum Langage
    Réponses: 6
    Dernier message: 02/09/2006, 18h01
  5. Réponses: 16
    Dernier message: 01/02/2006, 19h09

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