neofenix
Messages postés145Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention11 mars 2010
-
2 août 2007 à 12:23
neofenix
Messages postés145Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention11 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 :
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);
cs_omnia
Messages postés240Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention22 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"
cs_omnia
Messages postés240Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention22 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 ^^
cs_omnia
Messages postés240Date d'inscriptionjeudi 9 janvier 2003StatutMembreDernière intervention22 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);
}
}
neofenix
Messages postés145Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention11 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
neofenix
Messages postés145Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention11 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
neofenix
Messages postés145Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention11 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.
neofenix
Messages postés145Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention11 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??
neofenix
Messages postés145Date d'inscriptionmercredi 12 avril 2006StatutMembreDernière intervention11 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