Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1250 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  UPDATE ne fonctionne pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

UPDATE ne fonctionne pas

n°1898132
absot77
Posté le 23-06-2009 à 13:08:06  profilanswer
 

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?  :??:

mood
Publicité
Posté le 23-06-2009 à 13:08:06  profilanswer
 

n°1898137
pataluc
Posté le 23-06-2009 à 13:19:28  profilanswer
 

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)

n°1898155
macgawel
Posté le 23-06-2009 à 13:50:46  profilanswer
 

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

n°1898179
absot77
Posté le 23-06-2009 à 14:36:22  profilanswer
 

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
n°1898198
macgawel
Posté le 23-06-2009 à 14:48:23  profilanswer
 

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)...

n°1898199
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2009 à 14:48:28  profilanswer
 

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)
n°1898210
absot77
Posté le 23-06-2009 à 14:55:42  profilanswer
 

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)..

n°1898219
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2009 à 15:04:34  profilanswer
 

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)
n°1898224
pataluc
Posté le 23-06-2009 à 15:06:18  profilanswer
 

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

n°1898245
absot77
Posté le 23-06-2009 à 15:24:26  profilanswer
 

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 :)

mood
Publicité
Posté le 23-06-2009 à 15:24:26  profilanswer
 

n°1898248
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2009 à 15:26:17  profilanswer
 

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)
n°1898249
pataluc
Posté le 23-06-2009 à 15:26:59  profilanswer
 

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
n°1898254
absot77
Posté le 23-06-2009 à 15:29:49  profilanswer
 

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?

n°1898259
absot77
Posté le 23-06-2009 à 15:35:01  profilanswer
 

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?

n°1898260
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2009 à 15:36:23  profilanswer
 

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)
n°1898262
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 23-06-2009 à 15:37:17  profilanswer
 

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)
n°1898272
absot77
Posté le 23-06-2009 à 15:45:06  profilanswer
 

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? :??:

n°1898282
Deamon
Posté le 23-06-2009 à 15:59:18  profilanswer
 

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.

n°1898300
pataluc
Posté le 23-06-2009 à 16:26:11  profilanswer
 

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.

n°1898699
kao98
...
Posté le 24-06-2009 à 15:28:13  profilanswer
 

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
n°1899244
_xme_
Posté le 25-06-2009 à 17:13:35  profilanswer
 

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 ;)

n°1899494
piyou
Posté le 26-06-2009 à 14:40:07  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  UPDATE ne fonctionne pas

 

Sujets relatifs
Faire UPDATE sur cette requetteScript javascript fonctionne / IE mais pas / Mozilla
[Java] BorderLayout qui ne fonctionne pasUne fonction qui ne fonctionne qu'une fois !!
probleme requete Sql sur update clef primaire[Besoin d'aide]: php dans requête SQL qui ne fonctionne pas
Update mysql / php sur le premier enregistrement[MYSQL] Update qui oublie des données
[PHP] Après update serveur. Script de log ne fonctionne plus[Resolu] Update ADODB ne fonctionne pas
Plus de sujets relatifs à : UPDATE ne fonctionne pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR