France Hardware : Forums de discussion - Découvrez notre nouveau comparateur d'offres Internet
Retrouvez les prix près de chez vous :  
Index du forum | Liste des membres | Liste des groupes | Inscription | F-A-Q | Recherche
Pseudo :    Password :     
29 512 membres enregistrés - 2 069 327 posts - 122 028 topics
Index des forums FH  | Index des forums DegroupNews
      Programmation
           Bases de données
                [mysql] erreur ajout données dans la base
84 connectés(record : 2799 le 29 May 2016 - 15 h 34)

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

Xone
Jarrie Arena

Messages : 1 043
Inscrit le 02/11/03
Ville : Grenoble
Non connecté
  Posté le 09 April 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




grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 09 April 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: :ol:

Xone
Jarrie Arena

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

comment faire ça ?

sinon j'ai rajouté un id




DeVice
Boulet occasionel...

Messages : 3 022
Inscrit le 12/03/03
Ville : Grenoble
Non connecté
  Posté le 10 April 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
Totalement inutile, complètement indispensable

Messages : 31 539
Inscrit le 11/01/02
Ville : Lyon
Non connecté
  Posté le 10 April 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 April 2005 - 12 h 19.


DeVice
Boulet occasionel...

Messages : 3 022
Inscrit le 12/03/03
Ville : Grenoble
Non connecté
  Posté le 10 April 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 Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 11 April 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: :ol:

Xone
Jarrie Arena

Messages : 1 043
Inscrit le 02/11/03
Ville : Grenoble
Non connecté
  Posté le 11 April 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
?




grabber
Coordinateur
MacBook Pro Powered

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



:firefox: :ol:

Woofy
Totalement inutile, complètement indispensable

Messages : 31 539
Inscrit le 11/01/02
Ville : Lyon
Non connecté
  Posté le 12 April 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', '...');




grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 12 April 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: :ol:

Woofy
Totalement inutile, complètement indispensable

Messages : 31 539
Inscrit le 11/01/02
Ville : Lyon
Non connecté
  Posté le 12 April 2005 - 02 h 26 m 41 s
arf!
Merci pour le lien!




tempo
Zen

Messages : 2 178
Inscrit le 14/09/02
Ville : Grenoble (Echi)
Non connecté
  Posté le 12 April 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 April 2005 - 11 h 58.


grabber
Coordinateur
MacBook Pro Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 12 April 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: :ol:

DeVice
Boulet occasionel...

Messages : 3 022
Inscrit le 12/03/03
Ville : Grenoble
Non connecté
  Posté le 12 April 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 Powered

Messages : 9 506
Inscrit le 06/03/02
Ville : Angers
Non connecté
  Posté le 13 April 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: :ol:

mik69
Allez l'OL !

Messages : 1 282
Inscrit le 02/07/03
Ville : GRIGNY 69
Non connecté
  Posté le 25 May 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 0.4141 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 | Deligo | Appareil photo | Commande Au Volant
Creative Commons
Message Boards and Forums Directory