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 compte accès réservé [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut Connexion compte accès réservé
    Bonjour à tous,

    Actuellement débutant en php, j’essaye comme je peux d’apprendre par moi-même, ce qui n’est pas très facile.

    J’ai acheté un livre « PHP & MySql pour les nuls », livre bien détaillé ou l’on retrouve plein d’erreurs. Quand on débute c’est pratique !!!

    Je souhaite réaliser, un site à accès réservé (pour ceux qui ont le livre : chapitre 14)

    Je ne vous cache pas que j’ai repris le code du livre, où j’ai déjà corrigé quelques erreurs, mais lorsque je veux me loguer, il me met « Couldn’t execute query » car il ne peut executer la requète : SELECT loginName FROM Member WHERE loginName='$_POST[fusername]'

    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
    <?php
    session_start();                                      # 9
     include("xxx.inc");                                  #10
     switch (@$_POST['do'])                                #11
     {
       case "login":                                       #13
         $cxn = mysql_connect($host, $user, $passwd) 
                or die ("Couldn't connect to server.");    #15
    
         $sql = "SELECT loginName FROM Member 
                  WHERE loginName='$_POST[fusername]'";     #18
         $result = mysql_query($sql)
                   or die("Couldn't execute query.");      #20
         $num = mysql_num_rows($result);                  #21
         if ($num > 0)  // login name was found            #22
         {
            $sql = "SELECT loginName FROM Member 
                    WHERE loginName='$_POST[fusername]'
                    AND password=md5('$_POST[fpassword]')";
            $result2 = mysql_query($sql)
                       or die("Couldn't execute query 2.");
            $num2 = mysql_num_rows($result2);
            if ($num2 > 0)  // password is correct         #30
            {
               $_SESSION['auth']="yes";                    #32
               $logname=$_POST['fusername']; 
               $_SESSION['logname'] = $logname;            #34
               $today = date("Y-m-d h:i:s");               #35
               $sql = "INSERT INTO Login (loginName,loginTime)
                       VALUES ('$logname','$today')";
               $result = mysql_query($cxn,$sql) 
                         or die("Can't execute insert query.");
               header("Location: Member_page.php");        #40
            }
            else    // password is not correct             #42
            {
               $message="The Login Name, '$_POST[fusername]' 
                         exists, but you have not entered the 
                         correct password! Please try again.<br>";
               include("login_form.inc");                  #47
            } 
         }                                                 #49
         elseif ($num == 0)  // login name not found       #50
         {   
            $message = "The Login Name you entered does not 
                        exist! Please try again.<br>";
            include("login_form.inc");
         }
       break;                                              #56

    Merci pour votre aide

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Commence par proteger les données recues du formulaire avant des les inserer dans la requete.
    Il est navrant qu'un livre n'aborde pas immédiatement les questions pourtant simples de securité.

    Ensuite affiche l'erreur avec mysql_error() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $username = mysql_real_escape_string($_POST[fusername]);
    $password = mysql_real_escape_string($_POST[fpassword]);
     
    $sql = "SELECT loginName FROM Member 
                  WHERE loginName='$username'"; 
         $result = mysql_query($sql)
                   or die(mysql_error());

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Commence par proteger les données recues du formulaire avant des les inserer dans la requete.
    Il est navrant qu'un livre n'aborde pas immédiatement les questions pourtant simples de securité.

    Ensuite affiche l'erreur avec mysql_error() :
    Ok j'ai mis pour le moment mysql_error()

    et il me renvoie No DataBase selected

  4. #4
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Apres le mysql_connect, il faut faire un mysql_select_db

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Apres le mysql_connect, il faut faire un mysql_select_db
    OK, donc j'ai rajouté

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
         $cxn = mysql_connect($host, $user, $passwd) 
                or die ("Couldn't connect to server.");    #15
     
    $db_selected = mysql_select_db($dbname, $cxn);
    if (!$db_selected) {
       die ('Impossible de sélectionner la base de données : ' . mysql_error());
    }
    Maintenant il se connecte mais me dit que mon mot de passe est incorrect alors que je suis sur qu'il l'est... Je vais essayer de trouver

    Merci encore.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut
    Je reviens vers vous avec un autre problème, j'ai précédemment résolu avec votre aide les soucis de connexion à la base, et la création de compte fonctionne.

    Après avoir créer mon compte, je veux m'identifier et il me répond que mon pseudo est OK mais pas mon mot de passe.

    Je pense que cela vient du cryptage md5, lorsque j'ai crée mon compte, il m'a crypté mon password dans ma base, et lorsque je veux me connecter. Il ne dois pas bien décrypter. (voir ligne en gras)

    Voici le 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
       case "login":                                       #13
         $cxn = mysql_connect($host, $user, $passwd) 
                or die ("Couldn't connect to server.");    #15
         
    	$db_selected = mysql_select_db($dbname, $cxn);
    	if (!$db_selected) {
       		die ('Impossible de sélectionner la base de données : ' . mysql_error());
    	}
    
    
         $sql = "SELECT loginName FROM Member 
                  WHERE loginName='$_POST[fusername]'";     #18
         $result = mysql_query($sql)
                   or die(mysql_error());      #20
         $num = mysql_num_rows($result);                  #21
         if ($num > 0)  // login name was found            #22
         {
            $sql = "SELECT loginName FROM Member 
                    WHERE loginName='$_POST[fusername]'
                    AND password=md5('$_POST[fpassword]')";
            $result2 = mysql_query($sql)
                       or die(mysql_error());
            $num2 = mysql_num_rows($result2);
            if ($num2 > 0)  // password is correct         #30
            {
               $_SESSION['auth']="yes";                    #32
               $logname=$_POST['fusername']; 
               $_SESSION['logname'] = $logname;            #34
               $today = date("Y-m-d h:i:s");               #35
               $sql = "INSERT INTO Login (loginName,loginTime)
                       VALUES ('$logname','$today')";
               $result = mysql_query($sql,$cxn) 
                         or die(mysql_error());
               header("Location: Member_page.php");        #40
            }
            else    // password is not correct             #42
            {
               $message="The Login Name, '$_POST[fusername]' 
                         exists, but you have not entered the 
                         correct password! Please try again.<br>";
               include("login_form.inc");                  #47
            } 
         }                                                 #49
         elseif ($num == 0)  // login name not found       #50
         {   
            $message = "The Login Name you entered does not 
                        exist! Please try again.<br>";
            include("login_form.inc");
         }
       break;                                              #56


    Merci

  7. #7
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Je ne crois pas que tu puisse faire appell à un élément d'un tableau directement dans un chaîne de caractère avec guillemets.

    Met plutot $_POST... dans une variable et ensuite faite "xxxx $variable xxx"

  8. #8
    Membre actif Avatar de Alshten
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2005
    Messages
    157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2005
    Messages : 157
    Points : 233
    Points
    233
    Par défaut
    Oui et en plus il te manque des quotes du genre :
    =>

  9. #9
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    md5 ne chiffre pas et donc ne dechiffre pas non plus le mot de passe.
    en fait md5 réalise une empreinte du mot de passe et c'est donc cette empreinte que tu enregistres dans la base.
    quand l'utilisateur cherche à se connecter on effectue l'empreinte de ce qu'il a tapé et on regarde si ca correspond a ce qu'on a enregistré dans la base.

    A ce titre le code que tu nous montres semble correct.

    Pour les deux remarques sur la syntaxe, effectivement la bonne ecriture est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = "SELECT loginName FROM Member 
                    WHERE loginName='" . $_POST['fusername'] . "'
                    AND password=md5('" . $_POST['fpassword'] ."')";
    echo $sql;
    Il est une nouvelle vois navrant de voir des approximation de la sorte dans un livre.
    La mauvaise syntaxe ne devrait toutefois pas provoquer de mauvais fonctionnement ; j'ai ajouté comme tu le vois un echo $sql;
    Tu verrais ainsi quel requête est exécutée et tu pourras controler que le mot de passe existe bien dans la base.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut
    Donc, je tape mon login et mon password. et ensuite il me met :
    The Login Name, '$_POST[fusername]'
    exists, but you have not entered the
    correct password! Please try again.
    ça veut donc dire que à la ligne 42, il choisit le else puisqu'il doit trouver que mon password n'est pas correct.

    Dans ma BDD, j'ai fait un compte login:toto password:titi (en l'inscrivant direct dans mes tables.
    J'ai fait un autre compte, en passant par le formulaire de ma page php, login:mikael et password:56549ee03272ef8e13(qui est donc crypté)

    Et quand je veux me connecter, j'essaye les deux méthodes (password crypté et non), et ça ne marche pas, à chaque fois je reviens à ma ligne 42 : The login Name ...

    Merci pour votre aide

    Merci encore pour votre aide.

  11. #11
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    as-tu fais le echo comme je te l'ai indiqué ?

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par sabotage Voir le message
    as-tu fais le echo comme je te l'ai indiqué ?
    OUi je l'ai fais la requete etait bonne.

    Par contre j'ai fais la même requete directement dans la base de données : et elle ne renvoie aucun enregistrement.
    SELECT loginName FROM Member WHERE loginName='toto' AND password=md5('titi')
    MySQL n'a retourné aucun enregistrement. ( Traitement en 0.0005 sec. )




    Mais la même requete en enlevant le md5, elle marche
    SELECT loginName FROM Member WHERE loginName='toto' AND password='titi'
    Affichage des enregistrements 0 - 0 (1 total, Traitement en 0.0100 sec.)



    Extrait de ma table :

    loginName createDate password
    toto 2009-07-24 titi
    mikael 2009-07-24 56549ee03272ef8e1312253fef9fc886


    Merci

  13. #13
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    heu c'est normal c'est mickael / md5('titi')

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par sabotage Voir le message
    heu c'est normal c'est mickael / md5('titi')
    Non lol,

    Extrait de ma table :
    loginName createDate password
    toto 2009-07-24 titi
    mikael 2009-07-24 56549ee03272ef8e1312253fef9fc886

  15. #15
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    ton compte toto ne peut pas fonctionner puisque le mot de passe n'a pas été md5isé.

    c'est le compte "mickael", que tu dois valider.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut
    donc apparement ça marche avec un autre compte que j'ai crée et mot de passe en md5...


    Mais il me renvoie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Duplicate entry 'mik-2009-07-25' for key 1
    extrait du code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $_SESSION['auth']="yes";                    #32
               $logname=$_POST['fusername']; 
               $_SESSION['logname'] = $logname;            #34
               $today = date("Y-m-d h:i:s");               #35
               $sql = "INSERT INTO Login (loginName,loginTime)
                       VALUES ('$logname','$today')";
               $result = mysql_query($sql,$cxn) 
                         or die(mysql_error());
               header("Location: Member_page.php");        #40
    Le format date est Année Mois Jour Heure Minute Seconde.

    Il ne devrait donc pas y avoir de doublons dans ma base ??

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Points : 104
    Points
    104
    Par défaut
    C'est bon mon problème est résolu pour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Duplicate entry 'mik-2009-07-25' for key 1
    C'est en fait mon attribut pour mon champ "loginTime" dans ma table "login" qui était défini sur DATE et non sur DATETIME.

    Je pouvais donc me connecter à mon compte qu'une seule fois par jour...


    Merci à tous pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. connexion compte active directory et Exchange
    Par daninou dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 05/02/2009, 11h44
  2. couplage apache tomcat : accès réservé
    Par mcrbe dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 07/01/2009, 16h13
  3. Paramètres de connexion à compte MySQL chez Free
    Par zebulon9 dans le forum Free
    Réponses: 1
    Dernier message: 24/04/2007, 18h26
  4. Connexion compte ftp
    Par tomfoot dans le forum Composants VCL
    Réponses: 3
    Dernier message: 27/02/2006, 14h37
  5. Tentative de connexion internet:accès interdit
    Par doctorlove dans le forum Réseau
    Réponses: 16
    Dernier message: 05/12/2005, 21h57

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