Page 1 sur 1

Récupération d'un formulaire et enregistrement sur BDD

Posté : 20 juin 2009, 20:12
par rusmaster
Bonjour,

Je souhaite récupérer les réponses d'un formulaire pour les enregistrer dans une base de données.
Jusqu'à présent les réponses étaient stockées dans un fichier plat.
Formulaire en POST.
Je récupère les réponses par $xx = $_POST[xx]
et je code :
mysql_query ('INSERT INTO mabdd (col1,col2,col3....)VALUES ($xx,$yy,$zzz...)');

Retour :

Unknown column '$xx' in 'field list'

Quelqu'un peut me dire quelle boulette je fais, merci

Posté : 20 juin 2009, 20:23
par dunbar
A mon avis la colonne n'existe pas

Posté : 20 juin 2009, 20:26
par rusmaster
$xx doit être la donnée pas la colonne, la colonne col1 existe bien elle.

Posté : 20 juin 2009, 20:30
par dunbar
$xx doit être la donnée pas la colonne, .
Euh oui je sais :?
la colonne col1 existe bien elle.
Je voulais dire que tu essaye l'insertion de la valeur de $xx dans une colonne qui n'existe pas ou donc il y a une erreur dans le nom ou un truc du genre.

Posté : 20 juin 2009, 20:37
par rusmaster
Visualisation des colonnes
Array ( [Field] => ID [Type] => int(11) [Null] => NO [Key] => PRI [Default] => [Extra] => auto_increment )
Array ( [Field] => Pseudo [Type] => varchar(15) [Null] => NO [Key] => [Default] => [Extra] => )
Array ( [Field] => Pays [Type] => varchar(15) [Null] => YES [Key] => [Default] => [Extra] => )
Array ( [Field] => Region [Type] => varchar(15) [Null] => YES [Key] => [Default] => [Extra] => )
Array ( [Field] => Email [Type] => varchar(30) [Null] => NO [Key] => [Default] => [Extra] => )
Array ( [Field] => Age [Type] => int(4) [Null] => YES [Key] => [Default] => [Extra] => )
Array ( [Field] => Message [Type] => varchar(50) [Null] => YES [Key] => [Default] => [Extra] => )
Array ( [Field] => Jour [Type] => date [Null] => NO [Key] => [Default] => [Extra] => )
Visualisation des données

Affichage par "tableau indicé"
id pseudo pays région email age message jour
1 $pseudo $pays $region $email 0 $message 0000-00-00


Enregistrement des données

Récupération.......

non enregistré : Unknown column '$pseudo' in 'field list'
L'enregistrement id=1 c'est que j'ai essayé de mettre mes variables $pseudo entre quote("), bien sur il l'a enregistré comme chaine pas comme variable

Posté : 20 juin 2009, 20:39
par dunbar
ou un truc du genre

Posté : 20 juin 2009, 20:40
par Calimero
Bonjour,

Ton erreur c'est de mettre des variables telles quelles (d'ailleurs, faudra te renseigner sur les dangers de l'injection SQL...) dans une chaîne en guillemets simples.

Il faut aussi protéger le contenu de chaque chaîne à insérer dans la requête par des guillemets simples, ce que tu n'as pas fait.

Ce qui nous envoie à des erreurs PHP et non SQL, et tu l'aurais vu tout de suite grâce à la colorisation syntaxique de ce forum si tu avais utilisé des balises PHP autour du code que tu as posté.

Posté : 20 juin 2009, 20:50
par rusmaster
mysql_query ('INSERT INTO mabdd (col1,col2,col3....)VALUES ($xx,$yy,$zzz...)'); 
mysql_query ("INSERT INTO mabdd (col1,col2,col3....)VALUES ($xx,$yy,$zzz...)"); 
Entre simple ou double, même en colorisant, je vois pas trop la différence. :oops:

je viens de passer foetus à l'instant, si ça peut être une circonstance attenuante.

Posté : 20 juin 2009, 20:57
par Calimero
Tu marques un point là 8-)

Pour la peine je vais être plus explicite. Le colorisateur de phpfrance n'étant pas le seul à se faire avoir là-dessus, une bonne pratique souvent recommandée est de sortir les variables des chaînes pour y voir plus clair.
// avant
mysql_query ("INSERT INTO mabdd (col1,col2,col3....)VALUES ($xx,$yy,$zzz...)");
// après
mysql_query ("INSERT INTO mabdd (col1,col2,col3....)VALUES (".$xx.",".$yy.",".$zzz."...)");
Il te reste encore les guillemets simples à mettre autour des valeurs. (et tant qu'à faire, on n'oublie pas de bien respecter les espaces autour des mots-clé sql, comme values)
mysql_query ("INSERT INTO mabdd (col1,col2,col3) VALUES ('".$xx."','".$yy."','".$zzz."')");

Et comme on est des gens bien, on pense à la sécurité et on se protège des injections sql, comme ceci :
mysql_query ("INSERT INTO mabdd (col1,col2,col3) VALUES ('".mysql_escape_string($xx)."','".mysql_escape_string($yy)."','".mysql_escape_string($zzz)."')");
Et là c'est sensé marcher mieux. Est-ce le cas ? :wink:

Posté : 20 juin 2009, 21:09
par rusmaster
enregistrement ajouté avec succès :
Quoi dire de mieux, merci
Je pense que j'aurai pu plancher des heures.

Promis je jeterai un coup d'oeil sur la sécu

Posté : 20 juin 2009, 21:24
par Calimero
De rien, n'oublie pas de mettre ton sujet Résolu ;-)

A noter que dunbar avait presque trouvé le problème et m'a mis sur la piste. Tu peux donc le remercier aussi ;-)