Probleme d'authentification

Résolu
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010 - 2 août 2007 à 12:23
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010 - 7 août 2007 à 09:59
bonjour a tous et oui c'est encore moi ^^
voila je crée un programme qui permet de creer un compte sur un serveur mysql et l'utilisateur peut ensuite s'authentifier avec un login et un mot de passe.
a chaque fois que je clique sur connexion ma requete pour verifier si l'utilisateur est enregistré dans la base de données j'ai mon programme qui plante.
je le démarre donc en mode debug pour trouver l'erreur et la surprise sa plante pas et je suis authentifié -_-

je comprend pas du tout d'ou proviens mon erreur donc si vous pouviez m'aider sa serais super
voila mon code :

#include "global.h"

#define __LCC__
#include <stdio.h>
#include <mysql.h>
#include <conio.h>
#include <time.h>
#include
#include <string>

using namespace std;
bool connec(HWND hWnd, char* Log, char* Mdp)
{
    const char * hostname,*user,*password;
    unsigned int port;
    MYSQL *mysqlconnexion;
    MYSQL_ROW myROW;
    MYSQL_RES *myRES;

//initialisation des parametres de connexion
    hostname="mon serv";
    user="user";
    password="monpassword";
    port=3306;
    //initialisation du gestionnaire de la connexion à la base de données mySQL
    mysqlconnexion=mysql_init(NULL);
       
        if(!mysqlconnexion)
        {
            MessageBox(hWnd,"Echec de l'initialisation du gestionnaire de la connexion mysql","Erreur",MB_OK);
            return false;
        } 
        //tentative de connexion au serveur mySQL
                if (!mysql_real_connect(mysqlconnexion,hostname,user,password,"mabase",port,NULL,0))
        {
                MessageBox(hWnd,"Echec lors de la tentative de connexion au serveur mySQL","Erreur",MB_OK);
                return false;
        }
        string req="select pseudo";
        req =req + " from joueur where pseudo='";
        req =req + Log;
        req =req + "'and mdp='";
        req =req + Mdp;
        req =req + "'";

        mysql_query(mysqlconnexion,req.c_str());
       
        //initialisation du jeu de résultats et l'enregistre dans le client       
        myRES = mysql_store_result(mysqlconnexion);
        if (myRES)
        {
            //parcours de l'ensemble des lignes du resultat myRES
            for(unsigned int i = 0; i < myRES->row_count /*nombre de lignes dans la structure du resultat*/; i++)
            {
                myROW = mysql_fetch_row(myRES);
                for(unsigned int j = 0; j < mysql_num_fields(myRES)/*nombre de champs(colonnes) dans une ligne du resultat*/; j++)
                {
                    //affichage de la valeur du J ème champs de la ligne en cours du resultat.
                    MessageBox(hWnd,myROW[j],"test",MB_OK);
                }
            }
            //Libèration de la mémoire allouée au résultat myRES
            mysql_free_result(myRES);
        }
        else
        {
            MessageBox(hWnd,"Erreur.\nVerifiez le login et le mot de passe","Erreur",MB_OK);
            return false;
        }
        // fermeture de la connexion et libèration du pointeur de connexion mysqlconnexion
        mysql_close(mysqlconnexion);

        return true;
}

Cordialement,
Neofenix

16 réponses

cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
6 août 2007 à 09:35
bon j'avais pas vue un truc: c'est casiement sur c'est sa ton problème car le mode débug cloisonne et élargie les zones mémoire, du coup en cas d'écriture sur des zones non utilisés de la mémoire sa ne plante pas alors que dans un programme en mode release sa plante casiement a tout les coups :

const char * hostname,*user,*password;

//initialisation des parametres de connexion
    hostname="mon serv";
    user="user";
    password="monpassword";

Je ne vois pas d'allocation de mémoire pour tes pointeurs la ^^

a modifier:

#define hostname "mon serv"
#define user "user"
#define password "monpassword"
3
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
6 août 2007 à 23:26
mais est-ce possible que le probleme vienne de la chaine crypté en md5 lorsque j'essaye de la lire dans la base de données??
>>
oui par exemple si la chaine a des carcatères non asci ou des guillemets ou un 0 mal placé ^^

en fait ton problème viens soi de la fonction crypt ^^

soi du traitement effectué arpès la fonction crypt ^^

maintenant en résultat tu sais que sa vien soi de la fonction crypt soi de la chaine retourné, allé le bout du tunnel commence a être visible ^^

+
3
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
4 août 2007 à 10:01
Pour infos l'erreur relevée lorsque le programme plante est system.NullReferenceException si sa peut vous aider
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
4 août 2007 à 12:02
salut, pour :

myRES->row_count

et


mysql_num_fields(myRES)

tu dvrais effectuer un teste avant leurs boucles for a mon avis ^^
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
6 août 2007 à 09:29
merci de ton aide omnia.
j'ai essayé de faire un test sur myRES->row_count
et
mysql_num_fields(myRES)
mais cela ne change rien
0
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
6 août 2007 à 11:05
Super sa marche merci omnia si tu etais devant moi je te baiserais les pieds ^^.
0
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
6 août 2007 à 11:32
désolé je me suis laissé un peu emporté je crois car quand j'ai fais le test c'etait en mode debug
0
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
6 août 2007 à 11:43
c'est louche car je me sert a peu pres du meme code pour creer un compte dans la base de données sans probleme il n'y a que la requete qui change
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
6 août 2007 à 16:00
Ok, alors déja pour commencer vire le mode debug et met en release ^^

il faudrait faire un test:

            //parcours de l'ensemble des lignes du resultat myRES
            for(unsigned int i = 0; i < myRES->row_count /*nombre de lignes dans la structure du resultat*/; i++)
            {
                myROW = mysql_fetch_row(myRES);
   
            for(unsigned int j = 0; j <
mysql_num_fields(myRES)/*nombre de champs(colonnes) dans une ligne du
resultat*/; j++)
                {
                    //affichage de la valeur du J ème champs de la ligne en cours du resultat.
                    MessageBox(hWnd,myROW[j],"test",MB_OK);
                }
            }

si tu met sa en commentaire sa plante plus ?
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
6 août 2007 à 16:04
et une autre question pour ta requete

(je ne fait pas de c++ casiment et n'utilise pas string)

        string req="select pseudo";
        req =req + " from joueur where pseudo='";
        req =req + Log;
        req =req + "'and mdp='";
        req =req + Mdp;
        req =req + "'";

si tu mettait Log et Mdp en, string plutot que char * ?????

en gros tu fait un test ou tu fait directement : string req = "select pseudo from joueur where pseudo='lepseudo' and mdp='toto';";
0
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
6 août 2007 à 16:37
salut omnia pour commencer merci de te pencher sur mon probleme.
alors j'ai essayé de mettre en commentaire sa plante quand meme donc j'ai tout laissé en commentaire et j'ai donc fais la requete en une seule fois du genre string req = "select pseudo from joueur where pseudo='lepseudo' and mdp='toto';"; cependant sa ne change rien
0
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
6 août 2007 à 16:52
une legere modification: maintenant le programme ne plante plus en mode release, il s'arrete sans retourner d'erreur.
en mode debug j'ai toujours la meme chose
0
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
6 août 2007 à 17:09
en fait j'ai trouvé d'où proviens l'erreur meme si je n'ai pas encore su le résoudre:
en fait avant de me connecter et donc faire mon test d'authentification, j'utilise une focntion qui crypte mon mot de passe en md5 en depuis que jj'ai rajouter ma fonction d'authentification cette fonction plante, je l'ai mi en commentaire et plus de plantage.
0
cs_omnia Messages postés 240 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 22 mars 2009
6 août 2007 à 17:46
Et bien déja 50% du travail tu sais ou sa plante ^^

alors le truc serait d'isoler le problème

pour quoi ne pas afficher le comptenu de ton mot de passe (il lui manque d'ailleur surement un caractère 0 de fin de chaine), sa peut être une piste

via par exemple une messagebox

+
0
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
6 août 2007 à 23:14
bah en fait c'est la fonction md5 qui plante mais j'ai pas encoe isolé le probleme mais c'est louche car en fait la fonction qui me permet de crypter mon mot de passe fonctionnait avant que je rajoute l'authentification.
mais je suis sur que sa viens de la fonction crypt car quand elle est en commentaire sa ne plante plus.
mais est-ce possible que le probleme vienne de la chaine crypté en md5 lorsque j'essaye de la lire dans la base de données??
0
neofenix Messages postés 145 Date d'inscription mercredi 12 avril 2006 Statut Membre Dernière intervention 11 mars 2010
7 août 2007 à 09:59
Merci omnia de t'etre cassé la tete avec moi la dessus mais ne t'inquiete pas c'est terminé.
ce matin j'ai modifié la fonction md5 et depuis que je retourne un char* sa fonctionne beaucoup mieux
0
Rejoignez-nous