France Hardware : Forums de discussion
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
22 743 membres enregistrés - 1 887 659 posts - 96 550 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           [mysql] erreur ajout données dans la base
28 connectés(record : 207 le 05 juin 2007 - 05 h 23)

Vous devez vous connecter pour répondre au topic.
[mysql] erreur ajout données dans la base

Xone
Jarrie Arena

Messages : 1 040
Inscrit le 02/11/03
Ville : Grenoble (Jarrie)
Non connecté
  Posté le 09 avril 2005 - 16 h 33 m 05 s
bonjour qq1 pourra t 'il m'aider ?

voici le code

    Code     
 1. <html>
 2. <head>
 3. <title>Document sans titre</title>
 4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
 5. </head>
 6. 
 7. <body>
 8. <html>
 9. <form method="POST" action="ad.php">
10. <center>
11. <input type="text" name="titre" size="20" value="titre" maxlength="35"> 
12. <input type="text" name="artiste" size="20" value="artiste" maxlength="35">
13. <br>
14. <input type="text" name="label" size="20" value="label" maxlength="70"> 
15. <input type="text" name="genre" size="20" value="genre" maxlength="11">
16. <br>
17. 
18. <br>
19. <input type="submit" value="Envoyer" name="envoyer">
20. </center>
21. </form>
22. </html>
23. 
24. <?
25. // On commence par récupérer les champs
26. if(isset($_POST['titre']))      $titre=$_POST['titre'];
27. else      $titre="";
28. 
29. if(isset($_POST['artiste']))      $artiste=$_POST['artiste'];
30. else      $artiste="";
31. 
32. if(isset($_POST['label']))      $label=$_POST['label'];
33. else      $label="";
34. 
35. if(isset($_POST['genre']))      $genre=$_POST['genre'];
36. else      $genre="";
37. 
38. 
39. // On vérifie si les champs sont vides
40. if(empty($titre) OR empty($artiste) OR empty($genre)  )
41.     {
42.     echo '<font color="red">Attention, seul le champs <b>label</b> peut rester vide !</font>';
43.     }
44. 
45. // Aucun champ n'est vide, on peut enregistrer dans la table
46. else     
47.     {
48.        // connexion à la base
49. $db = mysql_connect('localhost', 'root', '');
50. // sélection de la base  
51. 
52.     mysql_select_db('max',$db);
53.     
54.     // on écrit la requête sql
55.     $sql = "INSERT INTO tracks_tbl(titre, artiste, label, genre,) VALUES('$titre','$artiste','$label','$genre')";
56.     
57.     // on insère les informations du formulaire dans la table
58.     mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
59. 
60.     // on affiche le résultat pour le visiteur
61.     echo 'Vos infos on été ajoutées.';
62. 
63.     mysql_close();  // on ferme la connexion
64.     }  
65. ?>
66. </body>
67. </html>


j'obtient sa comme erreur

Erreur SQL !INSERT INTO tracks_tbl(titre, artiste, label, genre,) VALUES('titre','artiste','label','genre')
Erreur de syntaxe près de ') VALUES('titre','artiste','label','genre')' à la ligne 1

merci de votre aide



Cherche dvd de ELEPHANT

grabber
Coordinateur
MacBook Pro 2,4 Powered

Messages : 8 556
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 09 avril 2005 - 16 h 47 m 40 s
ben fo juste que tu mettes des $ dans ta requete devaznt les noms de variable, la tu balances du texte dans la table et non la valeur de tes variables. d'autre part, dans ton insert, apres le nom de la table, pas besoin de repreciser l'ordre des champs car le insert insere les donnees dans l'ordre ou tu les insere.

INSERT INTO tracks_tbl VALUES ('$titre', '$artiste', '$label', '$genre');

bon sinon au debut de ton code tu fais 2 tests pour savoir si la variable est affectee ou non, 1 des 2 (voire les 2) est inutile ! au lieu d'affecter tes variables en disant $machin=$_POST['machin'] utilises directement $_POST['machin'], c'est pareil ;) en gros vires tes 10 premieres lignes de php, elles servent a rien.

enfin bon... comme tu le sens ! dernier truc, au lieu de faire bosser ton serveur pour verif les champs, ajoutes un code javascript pour que les champs soient testes AVANT l'envoi du formulaire, comme ca ca evite du boulot inutile a ton serveur ;)

autre point important, dans ta table, il faut creer un index, sinon, bonjour les doublons...

bon courage



:firefox:

Xone
Jarrie Arena

Messages : 1 040
Inscrit le 02/11/03
Ville : Grenoble (Jarrie)
Non connecté
  Posté le 09 avril 2005 - 16 h 57 m 38 s
nikel merci grabber
qu'appelle tu un index ?

comment faire ça ?

sinon j'ai rajouté un id



Cherche dvd de ELEPHANT

DeVice
Boulet occasionel...

Messages : 3 022
Inscrit le 12/03/03
Ville : Grenoble
Non connecté
  Posté le 10 avril 2005 - 12 h 18 m 46 s


Le 09 avril 2005 - 16 h 33, Xone a écrit :

$sql = "INSERT INTO tracks_tbl(titre, artiste, label, genre,) VALUES('$titre','$artiste','$label','$genre')";


Je pense que cette virgule en trop peut-être la source de l'erreur syntaxique :???:



Règle N°1 du forumeur : "Ta souris 7 fois autour du bouton poster tu tourneras, ainsi moins pour un âne de passer tu risqueras"

Woofy
Pour les bons tuyaux me demander

Messages : 26 213
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 10 avril 2005 - 12 h 18 m 54 s
INSERT INTO tracks_tbl(titre, artiste, label, genre,) VALUES('titre','artiste','label','genre')

Regarde apres genre, t'a une virgule toute seule! L'erreur viens de la!

EDIT : :grillaid: :dd:


Message édité 1 fois, la dernière par Woofy le 10 avril 2005 - 12 h 19.

:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


DeVice
Boulet occasionel...

Messages : 3 022
Inscrit le 12/03/03
Ville : Grenoble
Non connecté
  Posté le 10 avril 2005 - 12 h 21 m 38 s


Le 09 avril 2005 - 16 h 47, grabber a écrit :enfin bon... comme tu le sens ! dernier truc, au lieu de faire bosser ton serveur pour verif les champs, ajoutes un code javascript pour que les champs soient testes AVANT l'envoi du formulaire, comme ca ca evite du boulot inutile a ton serveur ;)


C'est une mauvaise idée de ne pas vérifier les données soumises par l'utilisateur avant utilisation par le serveur. Si tu fais la vérif. en javascript, coté client, un bidouilleur peut bricoler une "attaque" de ta base, tandis que si tu fais les tests de validité coté serveur, tu es plus tranquille.

C'est mon opinion de parano averti :)



Règle N°1 du forumeur : "Ta souris 7 fois autour du bouton poster tu tourneras, ainsi moins pour un âne de passer tu risqueras"

grabber
Coordinateur
MacBook Pro 2,4 Powered

Messages : 8 556
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 11 avril 2005 - 00 h 11 m 17 s


Le 10 avril 2005 - 12 h 21, DeVice a écrit :


Le 09 avril 2005 - 16 h 47, grabber a écrit :enfin bon... comme tu le sens ! dernier truc, au lieu de faire bosser ton serveur pour verif les champs, ajoutes un code javascript pour que les champs soient testes AVANT l'envoi du formulaire, comme ca ca evite du boulot inutile a ton serveur ;)


C'est une mauvaise idée de ne pas vérifier les données soumises par l'utilisateur avant utilisation par le serveur. Si tu fais la vérif. en javascript, coté client, un bidouilleur peut bricoler une "attaque" de ta base, tandis que si tu fais les tests de validité coté serveur, tu es plus tranquille.

C'est mon opinion de parano averti :)


l'un n'empeche pas l'autre, mais je persiste, il est inutile de faire bosser le serveur si aucun champ requis n'est rempli. apres, libre a toi de faire les tests que tu veux sur tes donnees en aval, mais avant de tester la validite d'une info, il faut que l'info soit presente :jap:
la bande passante est un parametre important, tout comme les connexions simultanees sur mysql, et imposer a l'utilisateur un rechargement supplementaire de la meme page si certaines donnees requises sont absentes est hors de propos, c'est d'ailleurs a cela que sert javascript, tester les evenements ;)
je suis donc en partie daccord avec toi seulement :D

... et c vrai t un peu parano lol, mais je suis un peu comme toi donc :lol:

pour l'interesse en ce qui concerne les index : en gros, tu ajoutes une colonne a ta base genre si tu as les colonnes suivantes actuellement :
- titre
- artiste
- label
- genre
tu ajoutes une premiere colonne "identifiant_chanson" a laquelle tu vas apporter une propriete auto increment lors de sa creation(dans ton phpmyadmin ;)). lorsque tu vas faire une insertion dans ta base, tu ne t'occupes pas de cette identifiant qui va etre gere tt seul. auto-increment fa&it que lors de la 1ere insertion dans ta table, les donnees porteront l'ident 1, la seconde serie l'identifiant 2, etc. l'interet de l'autoincrement est d'eviter les doublons, par exemple si tu tapes 2 fois la meme chanson dans ton formulaire, tu auras un doublon ;) pas avec l'index car il n'est pas falsifiable. imaginons que tu aies entre 3 titres dans ta table, avec comme index 1, 2 et 3, si tu supprimes le 2, ta table commencera avec le 1, puis le 3 (car le 2 est supprime). si tu ajoutes une nouvelle chanson, elle aura l'identifiant 4, et le 2 ne sera plus jamais utilise :jap:
la methode des index permet egalement de "classer" par ordre d'arrivee tes enregistrements des plus recents aux plus anciens pourquoi pas !

tu comprends ?

la seule facon de reinitialiser les index fait avec autoiincrement sans supprimer une table et la recreer serait de faire un truncate, qui aurait pour effet de vider la table et de reinitialiser les index sans aneantir la strucutre de la dite table.



:firefox:

Xone
Jarrie Arena

Messages : 1 040
Inscrit le 02/11/03
Ville : Grenoble (Jarrie)
Non connecté
  Posté le 11 avril 2005 - 18 h 03 m 22 s
oui je comprend c'est justement ce que j'avais fais

petite question comment on fait pour coder un pass par dans une base mysql
?



Cherche dvd de ELEPHANT

grabber
Coordinateur
MacBook Pro 2,4 Powered

Messages : 8 556
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 12 avril 2005 - 00 h 39 m 26 s
encodage md5 ;)



:firefox:

Woofy
Pour les bons tuyaux me demander

Messages : 26 213
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 12 avril 2005 - 00 h 47 m 05 s
sinon y a une fonction PASSWORD dans mysql si tu veut.
Utilisation : INSERT INTO `ma_table` (`...`, `...`, `...`) VALUES ('...', PASSWORD('monpass', '...');



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


grabber
Coordinateur
MacBook Pro 2,4 Powered

Messages : 8 556
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 12 avril 2005 - 01 h 07 m 29 s


Le 12 avril 2005 - 00 h 47, Woofy a écrit :
sinon y a une fonction PASSWORD dans mysql si tu veut.
Utilisation : INSERT INTO `ma_table` (`...`, `...`, `...`) VALUES ('...', PASSWORD('monpass', '...');


attention a cette fonction !!!
elle a evolue au cours des versions de mysql, ce qui veut dire que des pass crees avec telle version ne seront pas forcement operationnels suite a une maj de mysql ! je deconseille donc a moins d'etre sur de la maitrise des updates ;)

http://www.nexen.net/docs/mysql/annotee/password-hashing.php?lien=suivant



:firefox:

Woofy
Pour les bons tuyaux me demander

Messages : 26 213
Inscrit le 11/01/02
Ville : Paris / Grenoble
Non connecté
  Posté le 12 avril 2005 - 02 h 26 m 41 s
arf!
Merci pour le lien!



:smileymouth: Totalement inutile, donc completement indispensable :smileymouth:

:sms:


tempo
Zen

Messages : 2 177
Inscrit le 14/09/02
Ville : Grenoble (SMH)
Non connecté
  Posté le 12 avril 2005 - 12 h 20 m 33 s


Le 11 avril 2005 - 00 h 11, grabber a écrit :


Le 10 avril 2005 - 12 h 21, DeVice a écrit :


Le 09 avril 2005 - 16 h 47, grabber a écrit :enfin bon... comme tu le sens ! dernier truc, au lieu de faire bosser ton serveur pour verif les champs, ajoutes un code javascript pour que les champs soient testes AVANT l'envoi du formulaire, comme ca ca evite du boulot inutile a ton serveur ;)


C'est une mauvaise idée de ne pas vérifier les données soumises par l'utilisateur avant utilisation par le serveur. Si tu fais la vérif. en javascript, coté client, un bidouilleur peut bricoler une "attaque" de ta base, tandis que si tu fais les tests de validité coté serveur, tu es plus tranquille.

C'est mon opinion de parano averti :)


l'un n'empeche pas l'autre, mais je persiste, il est inutile de faire bosser le serveur si aucun champ requis n'est rempli. apres, libre a toi de faire les tests que tu veux sur tes donnees en aval, mais avant de tester la validite d'une info, il faut que l'info soit presente :jap:
la bande passante est un parametre important, tout comme les connexions simultanees sur mysql, et imposer a l'utilisateur un rechargement supplementaire de la meme page si certaines donnees requises sont absentes est hors de propos, c'est d'ailleurs a cela que sert javascript, tester les evenements ;)
je suis donc en partie daccord avec toi seulement :D

... et c vrai t un peu parano lol, mais je suis un peu comme toi donc :lol:


securité !!!
=> il faut faire les deux:
- coté client pour traquer au maxi les erreurs utilisateur => evite de "surcharger" le serveur et permet d'interagir plus rapidement avec l'utilisateur (style la popup js pour lui signifier: "oups, la t'as mis un truc qui va pas..")
- coté serveur: surtout pour se premunir des mauvaises surprises, style le champ rempli avec une quote (') et ce qui va bien derriere.... => il y a une fonction php/mysql que je conseille d'utiliser: mysql_escape_string
:)

pour le md5 => php a une jolie fonction md5...

EDIT: juste pour mettre en evidence mysql_escape_string...


Message édité 1 fois, la dernière par tempo le 13 avril 2005 - 11 h 58.


grabber
Coordinateur
MacBook Pro 2,4 Powered

Messages : 8 556
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 12 avril 2005 - 21 h 01 m 32 s


Le 12 avril 2005 - 12 h 20, tempo a écrit :


Le 11 avril 2005 - 00 h 11, grabber a écrit :


Le 10 avril 2005 - 12 h 21, DeVice a écrit :


Le 09 avril 2005 - 16 h 47, grabber a écrit :enfin bon... comme tu le sens ! dernier truc, au lieu de faire bosser ton serveur pour verif les champs, ajoutes un code javascript pour que les champs soient testes AVANT l'envoi du formulaire, comme ca ca evite du boulot inutile a ton serveur ;)


C'est une mauvaise idée de ne pas vérifier les données soumises par l'utilisateur avant utilisation par le serveur. Si tu fais la vérif. en javascript, coté client, un bidouilleur peut bricoler une "attaque" de ta base, tandis que si tu fais les tests de validité coté serveur, tu es plus tranquille.

C'est mon opinion de parano averti :)


l'un n'empeche pas l'autre, mais je persiste, il est inutile de faire bosser le serveur si aucun champ requis n'est rempli. apres, libre a toi de faire les tests que tu veux sur tes donnees en aval, mais avant de tester la validite d'une info, il faut que l'info soit presente :jap:
la bande passante est un parametre important, tout comme les connexions simultanees sur mysql, et imposer a l'utilisateur un rechargement supplementaire de la meme page si certaines donnees requises sont absentes est hors de propos, c'est d'ailleurs a cela que sert javascript, tester les evenements ;)
je suis donc en partie daccord avec toi seulement :D

... et c vrai t un peu parano lol, mais je suis un peu comme toi donc :lol:


securité !!!
=> il faut faire les deux:
- coté client pour traquer au maxi les erreurs utilisateur => evite de "surcharger" le serveur et permet d'interagir plus rapidement avec l'utilisateur (style la popup js pour lui signifier: "oups, la t'as mis un truc qui va pas..")
- coté serveur: surtout pour se premunir des mauvaises surprises, style le champ rempli avec une quote (') et ce qui va bien derriere.... => il y a une fonction php/mysql que je conseille d'utiliser: mysql_escape_string
:)

pour le md5 => php a une jolie fonction md5...


c'est justement ce qui est ecrit :jap:



:firefox:

DeVice
Boulet occasionel...

Messages : 3 022
Inscrit le 12/03/03
Ville : Grenoble
Non connecté
  Posté le 12 avril 2005 - 21 h 41 m 41 s
On est d'accord : les deux, c'est mieux :D



Règle N°1 du forumeur : "Ta souris 7 fois autour du bouton poster tu tourneras, ainsi moins pour un âne de passer tu risqueras"

grabber
Coordinateur
MacBook Pro 2,4 Powered

Messages : 8 556
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 13 avril 2005 - 11 h 30 m 27 s


Le 12 avril 2005 - 21 h 41, DeVice a écrit :
On est d'accord : les deux, c'est mieux :D


a 2 c toujours mieux lol :D (oula, chui en forme... :roll: )



:firefox:

mik69
Allez l'OL !

Messages : 1 282
Inscrit le 02/07/03
Ville : GRIGNY 69
Non connecté
  Posté le 25 mai 2005 - 18 h 21 m 36 s
oui mais deux bouts, c'est mou...

La sortie c'est où ? Ah ! c'est là. :okokjesors:




Page genérée en 1.4257 secondes par RahForum 2.0 | Gzip off |  Stats |  Metaforums |  RSS
© 2004 Cerbere Systems.
Prix Matériel Informatique | Informatique Lyon | Informatique Grenoble | Informatique Annecy | Informatique Marseille | Informatique Bordeaux | Forum Informatique
ADSL |Actualité ADSL | e-commerce | Commande Au Volant
Creative Commons
Message Boards and Forums Directory