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 :

Login Mot de passe + base de données [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut Login Mot de passe + base de données
    Bonjour, J'ai créer deux zones de textes pour entrer le login et le mot de passe!!
    Je compte mettre dans des variables sessions le login et le mot de passe!!
    J'aimerais interroger ma base de données pour voir si ce que j'ai mis dans mes zones de textes sont bon ou pas!!
    Comment faire?
    En gros je veux faire ça:

    Si $login et $MDP sont bien présent dans ma base de données alors
    $_session[login]=$login et $_session[MDP]=$MDP
    sinon
    qu'il me ramène sur ma page initiale index.php!!

    (jutilise javascript pour tester si les zones de textes sont vides ou pas).

    J'ai vraiment besoin d'aide!!!

  2. #2
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    salut, je suppose qu'il y a deja pas mal de codes sur ce forum a ce sujet...
    bref pour resumer

    tu recuperes tes variables puis tu fais tes tests de cette maniere

    Select login, motdepasse from utilisateurs where login=" . $login ." and motdepasse=" . $mdp . ";"

    le principe se trouve dans ta requette

    bon courage !

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut
    Merci je vais essayer pour voir!!

  4. #4
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    Effectivement, il y a pleins de post concernant ton problème, avec un minimum de recherche tu t'en sortiras facilement.

    Par contre il faut ecrire, $_SESSION['login'] et non $_SESSION[login].

  5. #5
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    tu recuperes tes variables puis tu fais tes tests de cette maniere

    Select login, motdepasse from utilisateurs where login=" . $login ." and motdepasse=" . $mdp . ";"
    ATTENTION tout de même ...
    Oui, cela devrait marcher, mais ce code est très vulnérable aux attaques par SQL injection
    Il faut faire bien attention aux entrées saisies par l'utilisateur avant d'envoyer la requete sql, puis faire des vérification sur le résultat de cette requette.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut
    J'ai utiliser ce que vous m'aviez donné pour la base mais je ne sais pa comment faire le test qui me dit que le login et le mot de passe sont les memes qu'il y a dans la base de données!!
    J'ai fais ça:
    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
     
    <?php
    if(isset($_POST['login'])) {
    $login=$_POST['login']; }
    if(isset($_POST['MDP'])) {
    $MotDePasse=$_POST['MDP']; }
     
     
    if(isset($_POST['login'])) {
    if(isset($_POST['MDP'])) {
    if(($login<>"") && ($MotDePasse<>"")) {
     
    mysql_connect('localhost', 'root', ''); 
     
    mysql_select_db('bob); 
    
    $sqlLOGIN="SELECT * FROM utilisateur
    		   WHERE Login='$login'
    		   AND Mot_De_Passe='$MotDePasse'";
    
    $reqLOGIN=mysql_query($sqlLOGIN);
    
    echo "bonjour";
    
    exit;
    mysql_close(); }}}
    
    ?>
    est-ce que mon code à un sens??
    si NON ben aidez moi à trouver le bout du tunnel svp!!

    Je veux que si mon login et mon mot de passe est bon, ben je peux aller sur la page d'accueil !!

  7. #7
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    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
    <?php
     
      $login = "";
      $MotDePasse = "";
     
      $autorisation = false;
     
      if(isset($_POST['login']))
        $login=$_POST['login'];
     
      if(isset($_POST['MDP']))
        $MotDePasse=$_POST['MDP'];
     
      if(($login<>"") && ($MotDePasse<>"")) 
      {
     
        if(verifier_conformite())
        {
          mysql_connect('localhost', 'root', '');
          mysql_select_db('bob);
    
          $sqlLOGIN="SELECT * FROM utilisateur
             WHERE Login='$login'
             AND Mot_De_Passe='$MotDePasse'";
    
          $reqLOGIN=mysql_query($sqlLOGIN);
    
          if(mysql_num_rows($reqLOGIN)==1)
          {
            $ligneRetour = mysql_fetch_array($reqLOGIN);
            $loginRetour = $ligneRetour['Login'];
            $passRetour = $ligneRetour['Mot_De_Passe'];
    
            if(($loginRetour==$login)&&($passRetour==$MotDePasse))
            {
              $autorisation = true;
            }
          }
          mysql_close();
        }
      }
    
      if($autorisation)
      {
        print("Bienvenue");
      }
      else
      {
        print("Casse-toi de mon appli !");
      }
    
    ?>
    Là ou j'ai fait un appel à une fonction verifier_conformite(), je veu dire qu'il faut vérifier si un petit malin n'a pas essayé d'injecter du code sql dans les variables login et motdepasse.
    Il faut que cette fonction renvoie false si ces variables contiennent des mots réservés de SQL, ou des ; ou des -- ou des operateurs d'egalite ... bref tout ce qui pourrait dénaturer la requete que tu fais par la suite pour vérifier le login et mdp.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup Hervé Saladin!! Je vais tester!!

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Citation Envoyé par Le Rebel
    J'ai utiliser ce que vous m'aviez donné pour la base mais je ne sais pa comment faire le test qui me dit que le login et le mot de passe sont les memes qu'il y a dans la base de données!!
    J'ai fais ça:
    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
     
    <?php
    if(isset($_POST['login'])) {
    $login=htmlentities($_POST['login'],ENT_QUOTES); }
    if(isset($_POST['MDP'])) {
    $MotDePasse=htmlentities($_POST['MDP'],ENT_QUOTES); }
     
     
    if(isset($_POST['login'])) {
    if(isset($_POST['MDP'])) {
    if(($login<>"") && ($MotDePasse<>"")) {
     
    mysql_connect('localhost', 'root', ''); 
     
    mysql_select_db('bob); 
    
    $sqlLOGIN="SELECT * FROM utilisateur
    		   WHERE Login='".$login."'
    		   AND Mot_De_Passe='".$MotDePasse."'";
    
    $reqLOGIN=mysql_query($sqlLOGIN);
    
    echo "bonjour";
    
    exit;
    mysql_close(); }}}
    
    ?>
    est-ce que mon code à un sens??
    si NON ben aidez moi à trouver le bout du tunnel svp!!

    Je veux que si mon login et mon mot de passe est bon, ben je peux aller sur la page d'accueil !!
    Ben la tu fais ta requete apparement correctement (meme si tu ne vérifies pas le contenu de tes données envoyées par POST ce qui peut causer des vulnérabilités).

    Cependant, tu ne fais rien apres ta requete.
    Je sais pas moi, si tu veux vérifier qu'un login est bon , tu dois forcément avoir quelque part un truc du genre if (login_posté==login_de_la_bdd).

    alors je completerai juste ton code comme ceci:

    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
     
    <?php
    if(isset($_POST['login'])) {
    $login=htmlentities($_POST['login'],ENT_QUOTES); }
    if(isset($_POST['MDP'])) {
    $MotDePasse=htmlentities($_POST['MDP'],ENT_QUOTES); }
     
     
     
    if((strlen($login)>0) && (strlen($MotDePasse)>0)) {
     
    mysql_connect('localhost', 'root', ''); 
     
    mysql_select_db('bob); 
    
    $sqlLOGIN="SELECT * FROM utilisateur
    		   WHERE Login='$login'
    		   AND Mot_De_Passe='$MotDePasse'";
    
    $reqLOGIN=mysql_query($sqlLOGIN);
    //On vérifie que la requete est correcte
    if ($req){
         //on vérifie que l'on a un résultat
        $nb_ligne=mysql_num_rows($reqLOGIN);
        if ($nb_ligne>0){
           echo "login ok";
           $_SESSION['login']=$login;
           mysql_free_result($reqLOGIN);
           //tu rediriges avec ca par exemple
           echo "<meta http-equiv=\"refresh\" content=\"0.1;index.php\">";
        }
        else
        {
         echo "login incorrect";
         }
    }
    else
    {
    echo "erreur dans la requete";
    }
     
     
     
     
    exit;
    mysql_close(); }
     
    ?>

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut
    EUH, encore une question!! est -il vraiment utile d'utiliser la fonction verifier_conformite()??

  11. #11
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    ben c'est à toi de voir
    tu n'est pas obligé de l'appeler comme ça, tu peux également faire ces verifications d'une autre façon (directement dans le corps du script par exemple), mais sache que si tu ne fais pas de vérification sur les entrées saisies par les utilisateurs, cela est dangereux : une personne mal intentionnée n'ayant pas de mot de passe mais conaissant la technique de sql injection (qui est ultra-classique) pourrait tres facilement ouvrir une session si ton code n'est pas prévu pour éviter ce genre de magouilles.

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Citation Envoyé par Hervé Saladin
    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
    <?php
     
     
     
          if(mysql_num_rows($reqLOGIN)==1)
          {
            $ligneRetour = mysql_fetch_array($reqLOGIN);
            $loginRetour = $ligneRetour['Login'];
            $passRetour = $ligneRetour['Mot_De_Passe'];
     
            if(($loginRetour==$login)&&($passRetour==$MotDePasse))
            {
              $autorisation = true;
            }
          }
     
    ?>
    Cette partie ne sert à rien.
    Tu fais une requete qui te selectionne les lignes correspondant a ton login et on mot de passe. Pourquoi vérifier apres que ce qui t'es retourné correspond a ton login et a ton mot de passe. Si la requete te renvoit un résultat, c'est forcément le bon.
    De plus c'est recommandé de faire mysql_fetch_array($ressource,MYSQL_ASSOC) si tu veux travailler directement avec le nom des champs.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut
    J'ai un problème avec mysql_num_rows!!
    ya l'erreur classique qui s'affiche!!

    supplied argument is not valid!!

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    Quand tu as un supplied argument is not valid, c'est que ta ressource est mauvaise. autrement dit, ta requete est mal formulé.
    Essaie le code que j'ai posté et dis moi ce que ca donne.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut
    c'est bon ça marche maintenant javé mal renseigné mes connections sql!!
    Merci beaucoup à vous les gars!!

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut
    Euh désolé ça marche pa si bien que ça, jaimerais que le password saisie correspond au login entré sinon c'est pas bon!!
    fo changer koi pour avoir ça??

  17. #17
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    Cette partie ne sert à rien.
    Je te répondrais bien que c'est toi qui sert à rien, mais ca serait méchant et excessif, car visiblement, tu ne comprends pas le principe d'une injection sql.
    Laisse-moi t'expliquer :
    Lorsqu'on envoie la requete suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select login, motdepasse from utilisateurs where login=" . $login ." and motdepasse=" . $mdp . ";"
    immagine ce qu'il se passe si l'utilisateur tape dans le formulaire :
    login : '' OR 1=1"); //
    pass: nimportequoi
    (ce n'est qu'un exemple, il y a des centaines de possibilités différentes)
    à ce moment là, la chaine de caracteres construite par php devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select login, motdepasse from utilisateurs where login='' OR 1=1"); // and motdepasse=nimportequoi;
    cette chaine devient alors une requete qui selectionne toutes les lignes de la table utilisateurs (la deuxieme moitié de la, requete est commentée).
    d'ou l'utilité de :
    - vérifier qu'on a bien une seule ligne renvoyée par la requete
    - cvérifier à posteriori que ce qui est renvoyé par la BD est bien ce qui a été saisi par l'utilisateur
    Il y a des centaines d'astuces du genre qui permettent de dénaturer la requete sql ... il faut donc faire tres attention.
    Il faut aussi vérifier AVANT d'envoyer la requete et ceci pour toutes les entrées saisies par l'utilisateur qui peuvent se retrouver dans une requete (pas seulement pour l'authentification) car sinon un pirate peut y introduire ses propres requetes pour effacer, modifier, faire des dump de tes données etc ...

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut
    J'ai encore un problème mais là c'est au niveau du nom de l'index dans:
    $ligneRetour['Mot_De_Passe']
    Jremet le code avec les modif que j'ai fais:
    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
     
    <?php 
      $login = ""; 
      $MotDePasse = ""; 
     
      $autorisation = false; 
     
      if(isset($_POST['login'])) 
        $login=$_POST['login']; 
     
      if(isset($_POST['MDP'])) 
        $MotDePasse=$_POST['MDP']; 
     
      if(($login<>"") && ($MotDePasse<>"")) 
      { 
     
          mysql_connect('localhost', 'root', ''); 
          mysql_select_db('bob'); 
     
          $sqlLOGIN="SELECT Login FROM utilisateur 
                     WHERE Mot_De_Passe='$MotDePasse'"; 
     
          $reqLOGIN=mysql_query($sqlLOGIN); 
     
    	if(mysql_num_rows($reqLOGIN)==1)
          //if(mysql_num_rows($reqLOGIN)==1) 
          { 
            $ligneRetour = mysql_fetch_array($reqLOGIN); 
            //$loginRetour = $ligneRetour['Login']; 
            $passRetour = $ligneRetour['Mot_De_Passe']; 
     
              if(($passRetour==$MotDePasse)) 
            //if(($loginRetour==$login)&&($passRetour==$MotDePasse)) 
            { 
              $autorisation = true; 
            } 
          } 
          mysql_close(); 
        } 
     
     
      if($autorisation) 
      { 
        header("Location:accueil.php");
      } 
     
    ?>

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 73
    Points : 40
    Points
    40
    Par défaut
    lerreur me dit que l'index n'est pas défini!!

  20. #20
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    oui, c'est normal
    comme tu fais un select login dorénavant (alors qu'avant tu faisais un select *), le champ Mot_De_Passe n'est plus selectionné
    on ne peut donc plus y acceder avec l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $passRetour = $ligneRetour['Mot_De_Passe'];
    tu as deux solutions :
    - soit tu vire cette instruction et tu ne fais plus de verif a posteriori sur le mot de passe
    - soit dans ta requete, tu selectionne le mot de passe

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. mot de passe base de données
    Par samsoum2 dans le forum JDBC
    Réponses: 1
    Dernier message: 24/03/2014, 09h29
  2. [Spip] Changement mot de passe base de données
    Par Invité dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 30/11/2013, 17h07
  3. Stockage de données +login +mot de passe
    Par adrione dans le forum Android
    Réponses: 6
    Dernier message: 16/05/2012, 10h59
  4. Réponses: 0
    Dernier message: 21/02/2012, 10h51
  5. oubli de login/mot de passe/chaine hote
    Par meufeu dans le forum Administration
    Réponses: 9
    Dernier message: 10/03/2004, 17h02

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