Se connecter avec
S'enregistrer | Connectez-vous

requete qui marche pô

Dernière réponse : dans Programmation

Bonjour,
j'ai une requête à priori toute simple mais qui ne veut pas fonctionner.
Je réalise une étude de marché, il y a donc beaucoup de questions (et de champ : à peu près 80).
Le formulaire se trouve sur index.php,
  1. action="form.php" method="post"

Sur form.php, après la connexion à la bdd, j'ai ceci (x 80) :
  1. $nom=$_POST['nom'];


Puis, plus loin, j'ai écris la requête de la manière suivante :
  1. $valeurs="INSERT INTO projet VALUES ('','',$nom,$email,$cult,$conso,$conso_non,...,$hab,$cp,$csp";
  2. $ajout = mysql_query($valeurs, $connexion) or die (mysql_error());
  3. mysql_close($connexion);


1 - à l'exécution, j'ai le message suivant :
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@free.fr,test1,non,test2, je ne consomme pas de produits cu
Pourquoi est-ce que l'adresse mail n'est pas complète ?
Pourquoi est-ce $nom n'est pas affiché ? C'est peut-être normal.
Mais surtout : quelle est la signification de ce message d'erreur ? Et comment le corriger ?
Je pense qu'il s'agit d'un stupide oubli de virgule ou apostrophe, mais je le vois pas...
Donc toute aide est la bienvenue.

Tant que j'y suis, comment faire pour dans les champs de type input type="text" et textarea, je sois prémunis contre les hacks en tous genre ?

d'avance merci,

Julien

Autres pages sur : requete marche

Lassé par la pub ? Créez un compte

  1. $valeurs="INSERT INTO projet VALUES ('','', $nom, $email, $cult, $conso, $conso_non, $freq, $mag_surg, $mag_sup, $mag_surf, $mag_exo, $mag_autre, $mag_autre_score, $forme_surgele, $forme_frais, $forme_conserve, $forme_snacking, $forme_autre, $forme_autre_score, $freq_conso, $seul, $entreamis, $enfamille, $repas, $brunch, $soiree, $diner, $nimportequand, $table, $afrique, $asie, $maghreb, $orient, $caraibes, $texmex, $indienne, $pref_autre, $pref_autre_score, $origine, $origine_autre, $rare, $rare_laquelle, $frequent_laquelle, $budget, $premiere, $liban, $mezze, $sandwich, $patisserie, $plats_autre_score, $mezze_surgele, $mezze_kit, $mezze_frais, $mezze_conserve, $sandwich_surgele, $sandwich_kit, $sandwich_frais, $prix3, $prix4, $prix5, $prix6, $prix7, $prix8, $prix9, $reiterer, $jamais, $declencheur, $declencheur_autre, $restaurant, $grandesurface, $sandwicherie, $distribution, $sexe, $age, $fam, $foyer, $residence, $hab, $cp, $csp";
  2. $ajout = mysql_query($valeurs, $connexion) or die (mysql_error());

tu oublies de mettre des ' autour de chaque variable: '$nom', '$email',...







EDIT MODO: J'ai remplacé toutes les virgules par la séquence virgule-espace. En espérant que ça garde un sens.

sancho666 a dit :
salut,

ton probleme viens du fait que le caractere '@' n'es pas compris par ta base de donnée, regardes dans la doc de ta bd comment retranscrire les ceracteres speciaux!
et Hop! Bon courage!

J'avais essayé d'encadrer $_POST['email'] avec un htmlentities, mais ça ne semblait pas suffire. Une autre solution ?

Chapellois a dit :
moi je le vois mais c'est chiant de scroller pour poster !

Notez que j'ai édité mon premier message pour raccourcir les VALUES, c'est dartyduck qui met le bazar :heink: 
Pour retourner sur le post, j'ai modifié comme indiquer les 'apostrophes' et les la parenthèse.
J'ai constaté au passage que le nombre de champs du formulaire ne correspondait pas aux champs de la bdd : corrigé.
Malgré l'absence d'htmlentities ou autre, l'insert de l'adresse mail se déroule sans souci.
Je pourrais donc m'en passer, mais je vais quand même essayer le mysql_real_escape_string().
Cela dit, alors que le charset est en UTF-8 dans le formulaire, que l'interclassement dans PHPMyAdmin est en UTF-8-bin, les caractères accentués ne sont pas renvoyés convenablement.
Que faire ?
Expert Programmation

Shino-Genin a dit :
Il manque juste la fermeture de la parenthèse pour VALUES ;) 

J'aimerais bien ne pas parler dans le vide :o 

Alors, cette parenthèse, elle est à l'origine de ton souci, ou c'est juste un oubli dans ton post ?

celien38 a dit :

Pour retourner sur le post, j'ai modifié comme indiquer les 'apostrophes' et les la parenthèse.

Je pense que l'oubli de la parenthèse est plus lié au copier-coller, car je ne l'ai pas vu dans mon fichier.
Expert Programmation

apostrophe = chaîne de caractères (mot, phrase, chiffres, etc.).
pas apostrophe = variable (pour php : $....).

Mais je ne vois pourquoi ta requête initiale (avec la parenthèse de clôture) ne marche pas...

Citation :
MODO: Dites-moi si la correction "esthétique" apportée au code de Dartyduck a une incidence ou pas sur le fonctionnement de ce code.

non, c'est ok. c'est du sql standard, les espaces entre les operandes n'ont pas d'importance

Citation :
MODO: Dites-moi si la correction "esthétique" apportée au code de Dartyduck a une incidence ou pas sur le fonctionnement de ce code.

Je vois que tu t'es permis un etdit de mon post :fou: 
Nan, je déconne, tu as bien fait, c'est nettement mieux ainsi ! :lol: 

Dans une requete SQL,
si tu stockes ta requete entre guillemets :
apostrophe pour les chaines de caracteres
pas apostrophe pour les entiers et réels.
si tu la stocke dans des apostrophe (quotes) :
"'.$taChaine."' pour une chaine
'.$tonNombre.' pour un entier ou un réel (un nombre quoi)

Evidemment je suppose que dans ta bdd tu as bien déclaré les type des champs comme il se doit.


Lassé par la pub ? Créez un compte