UPDATE ne fonctionne pas

UPDATE ne fonctionne pas - SQL/NoSQL - Programmation

Marsh Posté le 23-06-2009 à 13:08:06    

Slt, je voudrais faire un UPDATE de ma liste d'accessoire seulement elle ne fonctionne pas, j'ai le message d'erreur que j'ai dis de mettre en cas de problème, je vous montre mon code:
 

Code :
  1. $query = "UPDATE Processeur SET nom = '.$nom.',
  2.                                 categorie = '.$categorie.',
  3.        constructeur = '.$constructeur.',
  4.        socket = '.$socket.',
  5.        coeur = '.$coeur.',
  6.        photo = '.$photo.',
  7.        prixTTC = '.$prixTTC.'";
  8. /* execution de la requete */
  9. $result = mysql_query($query) or die("Première requête échouée" );


 
J'ai donc le message d'erreur Première requête échouée, je suis sûr que toutes ma variables ont des valeurs puisque je leur ai faites un echo et y avait les valeurs que je voulais..
 
D'où peut venir le problème?  :??:

Reply

Marsh Posté le 23-06-2009 à 13:08:06   

Reply

Marsh Posté le 23-06-2009 à 13:19:28    

essaie d'afficher l'erreur php, qui fournira sans doute une dindication sur le pourquoi du comment. (cf la valeur Display_Errors du php.ini)

Reply

Marsh Posté le 23-06-2009 à 13:50:46    

Profites-en pour afficher l'erreur SQL :
...or die (mysql_error());

Reply

Marsh Posté le 23-06-2009 à 14:36:22    

D'après l'erreur que je vois, c'est mon row qui a échoué puisque j'ai le message row échoué et c'est un message à mettre en cas d'erreur..

 

Mon code avec le row inclus:

 
Code :
  1. $query = "SELECT mail, mdp FROM client WHERE mail='$mail' AND mdp='$mdp'";
  2.  
  3.   /* execution de la requete */
  4. $result = mysql_query($query) or die(mysql_error());
  5.  
  6. /* Récupération de la requête dans un tableau numérique */
  7. $row = mysql_fetch_array($result, MYSQL_NUM) or die("row échoué" );
  8. if (mysql_num_rows($query) > 0)
  9. {
  10.        // L'utilisateur s'est bien connecté, création de la session avec le mail et le mot de passe
  11.       $_SESSION['mail'] = $mail;
  12.   $_SESSION['mdp'] = $mdp;
  13. }
  14. /* Création du cookie */
  15. setcookie($mail, $row);
 

Voici le screen de l'erreur:

 

http://free0.hiboox.com/images/2609/5d89300b38fd23938d1205136d35f4d3.png


Message édité par absot77 le 23-06-2009 à 14:47:15
Reply

Marsh Posté le 23-06-2009 à 14:48:23    

mysql_fetch_array retourne un tableau de chaînes qui correspond à la ligne récupérée ou FALSE  s'il n'y a plus de lignes.
mysql_num_rows retourne le nombre d'enregistrements.
 
Je serais toi, je commencerais par regarder combien j'ai d'enregistrements avant de boucler dessus  :D  
 
A priori, je dirais que ta requête ne retourne rien. Essaye de l'afficher avec un echo $query et de l'exécuter dans ton interface SQL (phpmyadmin, par exemple)...

Reply

Marsh Posté le 23-06-2009 à 14:48:28    

mysql_fetch_array() renvoie un array. je sais pas ce que t'essaies de faire à la ligne 19 en créant un cookie avec un array, mais ça m'étonnerait que ça donne le comportement souhaité


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-06-2009 à 14:55:42    

Ce que j'essaie de faire, c'est de faire un sorte que les personnes inscrites sur un site puissent se connecter à leur compte grâce à leur mot de passe et leur adresse mail (je précise que ce n'est qu'un enregistrement et non une réalité donc pas obliger que ce soit un truc costaud)..

Reply

Marsh Posté le 23-06-2009 à 15:04:34    

absot77 a écrit :

Ce que j'essaie de faire, c'est de faire un sorte que les personnes inscrites sur un site puissent se connecter à leur compte grâce à leur mot de passe et leur adresse mail (je précise que ce n'est qu'un enregistrement et non une réalité donc pas obliger que ce soit un truc costaud)..


regarde la doc de SetCookie() :

Citation :


bool setcookie  ( string $name  [, string $value  [, int $expire= 0  [, string $path  [, string $domain  [, bool $secure= false  [, bool $httponly= false  ]]]]]] )


à aucun moment il ne prend un array en paramètre, or toi tu lui transmets un array ($row) => erreur
 


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-06-2009 à 15:06:18    

ton mysql_num_rows, faut pas le faire sur la requete $query, mais sur le résultat $result.

Reply

Marsh Posté le 23-06-2009 à 15:24:26    

Ca m'en fait des erreurs...  :/
 
Voilà j'ai l'impression que ça fonctionne..
 
Je peux me connecter et me déconnecter (avec les bons identifiants bien sûr) et aucun message d'erreur..  :)
 
Je vous remontre code final:

Code :
  1. $query = "SELECT mail, mdp FROM client WHERE mail='$mail' AND mdp='$mdp'";
  2.  
  3.   /* execution de la requete */
  4. $result = mysql_query($query) or die(mysql_error());
  5.  
  6. /* Récupération de la requête dans un tableau numérique */
  7. $row = mysql_fetch_array($result, MYSQL_NUM) or die("row échoué" );
  8. if (mysql_num_rows($result) > 0)
  9. {
  10.        // L'utilisateur s'est bien connecté, création de la session avec le mail et le mot de passe
  11.       $_SESSION['mail'] = $mail;
  12.   $_SESSION['mdp'] = $mdp;
  13. }
  14. /* Création du cookie */
  15. setcookie($mail, $query);
  16. Merci de votre aide :)

Reply

Marsh Posté le 23-06-2009 à 15:24:26   

Reply

Marsh Posté le 23-06-2009 à 15:26:17    

Citation :


setcookie($mail, $query);


[:pingouino]
non mais tu es conscient de ce que tu fais ou bien.... ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-06-2009 à 15:26:59    

O_o

 

la sauf erreur de ma part tu mets dans un cookie le mdp en clair??

 

Edit: Grillaid


Message édité par pataluc le 23-06-2009 à 15:27:19
Reply

Marsh Posté le 23-06-2009 à 15:29:49    

C'est la première fois que je fais ça donc je peux faire des erreurs..
 
Comment je peux faire pour que ça ne soit pas vu?

Reply

Marsh Posté le 23-06-2009 à 15:35:01    

Si à la place de  

Code :
  1. setcookie($mail, $query);


 
Je fais

Code :
  1. setcookie($mail, $mail);


 
Où $mail est égale seulement à l'adresse mail, c'est correct?

Reply

Marsh Posté le 23-06-2009 à 15:36:23    

absot77 a écrit :

C'est la première fois que je fais ça donc je peux faire des erreurs..


non mais là, c'est même pas une erreur, juste du bon sens... tu ne vois pas que tu colles dans un cookie une chaine de caractères correspondant à une requête SQL qui va chercher les infos d'identification de ton visiteur ?
pour éviter ça, tu peux stocker le mot de passe hashé (en MD5 ou mieux, SHA1) dans la base et dans le cookie, puis effectuer une comparaison. il ne faut absolument pas que tu stockes le mot de passe en clair dans ta base pour d'évidentes raisons de sécurité.


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-06-2009 à 15:37:17    

absot77 a écrit :

Si à la place de  

Code :
  1. setcookie($mail, $query);


 
Je fais

Code :
  1. setcookie($mail, $mail);


 
Où $mail est égale seulement à l'adresse mail, c'est correct?


[:pingouino]
reprend tout de zéro, lis la doc de setcookie(), là tu fais n'importe quoi


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 23-06-2009 à 15:45:06    

Je viens de lire ça:

Code :
  1. La valeur du cookie. Cette valeur est stocké sur l'ordinateur du client ; ne stocker pas d'informations importantes.


 
Et aussi ça:

Code :
  1. Tous les arguments sauf name  (nom) sont optionnels.


 
 
Donc je préfère juste faire:

Code :
  1. setcookie($mail);


 
J'ai bien compris ou pas? :??:

Reply

Marsh Posté le 23-06-2009 à 15:59:18    

Si tu mets juste le mail alors n'importe qui pourra se connecter à ton compte s'il connait ton adresse, il suffit de créer un cookie avec juste ton mail.
 
Comme l'a proposé Harkonnen mets par exemple le md5 du mot de passe en valeur.

Reply

Marsh Posté le 23-06-2009 à 16:26:11    

perso je te conseille de te (re)documenter un peu sur les sessions php, parce que la j'ai l'impression que tu n'es pas au point.

Reply

Marsh Posté le 24-06-2009 à 15:28:13    

Harkonnen a écrit :


[:pingouino]
reprend tout de zéro, lis la doc de setcookie(), là tu fais n'importe quoi


 
Moi, je dirais plutôt :
reprend tout de zéro, lis la doc de setcookie(), là tu fais n'importe quoi
 
Il semble que même les bases de l'accès aux données soient à revoir.


Message édité par kao98 le 24-06-2009 à 15:29:33

---------------
Kao ..98 - Uplay (R6S) : kao98.7.62x39 - Origin (BF4, BF1) : kntkao98
Reply

Marsh Posté le 25-06-2009 à 17:13:35    

Salut
bon je suis d'accord sur l'idée avec kao98 relis un peu les principes de bases de données ca ferra pas de mal :)
mais bon kao98 c'est des erreurs qui arrivent ^^
absot77 il ne faut absolument jamais, jamais mettre d'information importante en claire, que ce soit dans un cookie ou dans ta base de donnée ;)  
J'ai pas trop regardé en quel langage tu travailles, mais il existe forcément des fonctions de sécurité (sinon code les ;) ), du genre en php :
string md5 ( string $str )
du coup dans ta base tu enregistres le md5 du mot de passe et surtout pas le mot de passe en claire
ensuite quand une personne veut se logger tu compare le md5 de la chaine qu'elle propose avec le md5 sauvegarder dans la base de donnée
Apres du coup je pense que tu peux stocker sans trop de risque le md5 dans un cookie ;)

Reply

Marsh Posté le 26-06-2009 à 14:40:07    

Ta requête est aussi une invitation gigantesque à l'injection sql.
 
Il suffit de saisir comme adresse mail la réponse suivante (en gras) et n'importe quoi (nawak ici) dans mdp
' or 1=1 --
 
et ça passe.
 
la requête construite et exécutée ressemble à ça :
SELECT mail, mdp FROM client WHERE mail='' or 1=1 --' AND mdp='nawak'
 
qui renvoie TOUTES les lignes de la table client !
 
 
Amis développeurs accédant aux bases de données, renseignez vous et protégez votre code contre l'injection sql. Please !


Message édité par piyou le 26-06-2009 à 14:41:29
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed