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 :

Connexion et redirection en fonction d'une variable


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Par défaut Connexion et redirection en fonction d'une variable
    Bonjour à toutes et à tous,

    Je suis actuellement en train de créer la page d'authentification de mon site internet, et je suis face à plusieur questions.

    Voici les différents états que ma page doit rencontrée lors d'une authentification :

    Une fois la page d'authentification affichée, l'utilisateur entre sont identifiant de et mot de passe de connexion, puis il choisi un service sur lequel se diriger.

    Le choix du service est important et obligatoire, car il permet par la suite d'indiquer sur quelle page rediriger l'utilisateur après l'authentification.

    Je dépose si dessous le code source que j'ai travaillé, et je met en rouge ce que je souhaite appliquer (edit jml94 : commentaire en fin du code) :

    Code php : 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
     
    $identifiant_de_connexion=$_POST['identifiant_de_connexion'];
    $mot_de_passe_de_connexion=$_POST['mot_de_passe_de_connexion'];
    $choix_service=$_POST['choix_service'];
    if(empty($identifiant_de_connexion))
    {
    echo'Veuillez saisir votre identifiant de connexion.';
    }
    elseif(empty($mot_de_passe_de_connexion))
    {
    echo'Veuillez saisir votre mot de passe de connexion.';
    }
    elseif(empty($choix_service))
    {
    echo'Veuillez choisir un service.';
    }
    else
    {
    $base_de_donnees=mysql_connect('localhost','utilisateur','utilisateur');
    mysql_select_db('systeme_gestion_du_magasin',$base_de_donnees);
    $verification_authentification=mysql_query(SELECT * FROM $choix_du_service WHERE identifiant_de_connexion=$identifiant_de_connexion and mot_de_passe_de_connexion=$mot_de_passe_de_connexion);
    if (!empty($verification_authentification)){echo'Authentification incorrecte';}
    else {
    $_SESSION['identifiant_de_connexion']=$identifiant_de_connexion;
    $_SESSION['mot_de_passe_de_connexion']=$mot_de_passe_de_connexion;
    $_SESSION['etc...']=$etc...;
     
    //ICI FONCTION DE REDIRECTION VERS LA PAGE CORRESPONDANT A LA VALEUR $choix_du_service
    }

    Pourriez-vous s'il vous plais, m'indiquer si mon code est syntaxiquement correct, et m'expliquer comment éfféctuer une redirection en php avec la fonction header.

    Merci beaucoup par avance.

    Cordialement.

    Christophe.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ton application n'est pas protegé contre les injections cf mysql_real_escape().

    Sinon je ne vois pas ton probleme : tu testes ce que vaut ta variable et tu fais la redirection adequat selon chaque cas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Je me permet une proposition simple :


    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
    //ICI FONCTION DE REDIRECTION VERS LA PAGE CORRESPONDANT A LA VALEUR $choix_du_service
    switch($choix_du_service)
    {
       default :
       header('Location: ./service_par_defaut.php');
       break;
     
       case 'truc':
       header('Location: ./service_truc.php');
       break;
     
       case 'bidule':
       header('Location: ./service_bidule.php');
       break;
     
       ect...
    }
    exit; // par sécurité...

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2005
    Messages : 357
    Par défaut
    Salut,
    Déjà, comme le dit Sabotage, ton code est l'exemple typique d'une ouverture aux injections SQL.
    Dans ta requête :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM $choix_du_service WHERE identifiant_de_connexion=$identifiant_de_connexion and mot_de_passe_de_connexion=$mot_de_passe_de_connexion

    Suppose que dans le champ identifiant de connexion j'ai entré : "'moi' or 1 --"
    et que pour le mot de passe, j'entre "'peu importe'"

    la requête va devenir :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT * FROM $choix_du_service WHERE identifiant_de_connexion='moi' or 1 -- and mot_de_passe_de_connexion='peu importe'
    la partie en rouge de la requête sera considérée comme du commentaire et ne permettra pas de lier le mot de passe. Quant à l'identifiant, qu'importe sa valeur car le or 1 renverra le contenu de toute la table.

    Donc procède plutôt de la manière suivante :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM $choix_du_service WHERE identifiant_de_connexion=$identifiant_de_connexion

    puis compare le mot de passe entré avec celui retourné par la requête.

    Ainsi, comme dans le cas de figure cité en exemple, même si la requête est pourrie par l'injection, la comparaison du mot de passe par après stoppera la tentative d'intrusion.

  5. #5
    Membre habitué
    Inscrit en
    Août 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 9
    Par défaut Modification de mon code source et erreur.
    Bonjour à toutes et à tous,

    Je viens de modifier mon code source et j'obtiens une erreur à la ligne 55 en mauve dans le code source ci-dessous.

    Erreur : Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\index.php on line 55

    Voici mon code source :

    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
    <?php $identifiant_de_connexion=$_POST['identifiant_de_connexion'];
    $mot_de_passe_connexion=$_POST['mot_de_passe_connexion'];
    $choix_service=$_POST['choix_service'];
    if(empty($identifiant_de_connexion))
    {
    echo'Veuillez saisir votre identifiant de connexion.';
    }
    elseif(empty($mot_de_passe_connexion))
    {
    echo'Veuillez saisir votre mot de passe de connexion.';
    }
    elseif(empty($choix_service))
    {
    echo'Veuillez choisir un service.';
    }
    else
    {
    mysql_connect('localhost','utilisateur','utilisateur');
    mysql_select_db('base_de_donnees_magasin');
    mysql_query(SELECT * FROM authentification_utilisateur WHERE identifiant_de_connexion=$identifiant_de_connexion);
    if(identifiant_de_connexion!=$identifiant_de_connexion)
    {
    echo'L\'identifiant saisi est incorrect.';
    }
    if(identifiant_de_connexion=$identifiant_de_connexion and mot_de_passe_de_connexion!=$mot_de_passe_de_connexion)
    {
    echo'Le mot de passe saisi est incorrect.';
    }
    elseif(identifiant_de_connexion=$identifiant_de_connexion and mot_de_passe_de_connexion=$mot_de_passe_de_connexion)
    {
    MISE EN SESSION DES VALEURS
    }
    if($choix_du_service="" and $_SESSION['']=acces_non_authorise)
    {
    echo'Vous ne disposez pas des droits suffisants pour accéder à ce service';
    }
    elseif($choix_du_service="" and $_SESSION['']=acces_authorise)
    {
    FERMETURE DE LA CONNEXION A LA BASE DE DONNEES ET REDIRECTION VERS LA PAGE DU SERVICE DEMANDEE;
    }
    }?>
    Merci par avance, cordialement, Christophe.

  6. #6
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    ta requetes doit etre entre guillement.
    Dans un IF, on utilise les symbole && et non pas le symbole AND
    Dans le code PHP, on ne met pas une phrase (derniere ligne) en plein milieu sans guillement autour (ni echo).

  7. #7
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par comode Voir le message
    ta requetes doit etre entre guillement.
    Dans un IF, on utilise les symbole && et non pas le symbole AND
    Dans le code PHP, on ne met pas une phrase (derniere ligne) en plein milieu sans guillement autour (ni echo).
    +1 sur la première remarque
    AND et OR existent bien en php (opérateurs logiques) mais il est donc recommandé d'éviter de les mélanger avec && et || dans une même expression.

    Et effectivement, mieux vaut éviter d'utiliser des phrases brutes dans ton code. Si ce sont des indications de ce que va faire le code une fois que tu l'auras écrit, préfère les commentaires
    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]

  8. #8
    Membre chevronné
    Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2008
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2008
    Messages : 504
    Par défaut
    Citation Envoyé par Celira Voir le message
    AND et OR existent bien en php (opérateurs logiques) mais il est donc recommandé d'éviter de les mélanger avec && et || dans une même expression.
    Ca ne serait pas lui rendre service que de ne pas lui recommander de ne pas les utiliser dans un if()... Ce sont des opérateurs de faibles priorités dont on devrait limiter l'usage à l'optimisation du code. Bref, les réserver aux personnes un peu expérimentés qui sauront pourquoi ils les utilisent à la place des opérateurs "normaux" style &&...

  9. #9
    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 : 40
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Citation Envoyé par comode Voir le message
    Ca ne serait pas lui rendre service que de ne pas lui recommander de ne pas les utiliser dans un if()... Ce sont des opérateurs de faibles priorités dont on devrait limiter l'usage à l'optimisation du code. Bref, les réserver aux personnes un peu expérimentés qui sauront pourquoi ils les utilisent à la place des opérateurs "normaux" style &&...
    Je signale simplement qu'ils existent également et donc que les expressions les utilisant ne renverront pas d'erreur.

    Ceci dit, je recommande aussi d'utiliser && et ||.
    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]

Discussions similaires

  1. Réponses: 11
    Dernier message: 10/03/2007, 02h01
  2. Créer une fonction avec une variable
    Par Ricou13 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 22/01/2007, 23h51
  3. Réponses: 1
    Dernier message: 20/01/2007, 14h06
  4. action vers formaulaire en fonction d'une variable
    Par JauB dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/01/2007, 15h47
  5. [VB6] Image en fonction d'une variable?
    Par TomIG dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 25/03/2006, 01h22

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