Erreur de syntaxe mysql_query

Résolu/Fermé
MK-10 Messages postés 9 Date d'inscription mardi 15 mars 2011 Statut Membre Dernière intervention 17 août 2012 - 16 août 2012 à 14:44
MK-10 Messages postés 9 Date d'inscription mardi 15 mars 2011 Statut Membre Dernière intervention 17 août 2012 - 16 août 2012 à 23:27
Bonjour tout le monde,

Voila, j' un petit problème qui sur lequel je me casse la tête.
En fait, je n'arrive pas a insérer des données récupérées d'un formulaire dans ma base de données. Je reçois une erreur qui me dit d'adapter ma syntaxe a la version de mon serveur MySQL.

Merci d'avance pour vos apports.



Erreur reçue:

Erreur SQL !INSERT INTO colloque_membres VALUES ( Intervenant, nomdefamille, xnom, xprenom,xpays, xnationalite,2012-08-31,Féminin,Divorcé,xmail@mail.fr,0300000000, 0100000000,x rue cp) 
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 '@mail.fr,0300000000, 0100000000,x rue cp)' at line 2


Mon code:

<?php

include('includes/connexion_db.php');
//echo 'connexion OK';

?>


<?php
 
    //Récupèration des variables
    if ( isset($status)) $statu=$_POST['status'];
    if ( isset($nomfamille))  $nomfamille=$_POST['nomfamille'];
    if ( isset($nom)) $nom = $_POST['nom'];
    if ( isset($prenom)) $prenom = $_POST['prenom'];
    if ( isset($pays)) $pays = $_POST['pays'];
    if ( isset($nationalite)) $nationalite = $_POST['nationalite'];
    if ( isset($age)) $age = $_POST['age'];
    if ( isset($sexe)) $sexe = $_POST['sexe'];
    if ( isset($statusfamille)) $statusfamille = $_POST['statusfamille'];
    if ( isset($mail))  $mail = $_POST['mail'];
    if ( isset($confirm_mail)) $confirm_mail = $_POST['confirm_mail'];
    if ( isset($phone_portable)) $phone_portable = $_POST['phone_portable'];
    if ( isset($phone_fixe)) $phone_fixe = $_POST['phone_fixe'];
    if ( isset($adresse)) $adresse = $_POST['adresse'];
	
	
 if( empty($_POST['nom']) || empty($_POST['prenom']) || empty($_POST['pays']) || 
     empty($_POST['nationalite']) || empty($_POST['phone_portable']) ||     empty($_POST['mail'])||  $_POST['mail']!=$_POST['confirm_mail'])
	{
echo 'Veuillez remplir correctement tous les champs';/*si ces champs  son vides  ou erreur dans la saissie du mail alors message d'erreur*/
	}//dans le cas ou les mails sont bon, on verifie son format
 else if( !empty($_POST['mail']) && (!preg_match("#^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))){
	 
echo 'Votre adresse E-Mail n\'a pas un format valide';// si format non valide alors erreur
					}
else{			
	 

	
  $sql= 'INSERT INTO colloque_membres VALUES ( '.$_POST['status'].','.$_POST['nomfamille'].', '.$_POST['nom'].', '.$_POST['prenom'].','.$_POST['pays'].','.$_POST['nationalite'].','.$_POST['age'].',
'.$_POST['sexe'].','.$_POST['statusfamille'].','.$_POST['mail'].','.$_POST['phone_portable'].','.$_POST['phone_fixe'].','.$_POST['adresse'].') '; 
			
   mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());  
 
	mysql_close();
 }
	
	
	
	
	
	
?>

4 réponses

Utilisateur anonyme
16 août 2012 à 15:29
Bonjour

Il te manque des ' ' autour de tes données :

  $sql= "INSERT INTO colloque_membres VALUES ( '$_POST[status]','$_POST[nomfamille]', '$_POST[nom]', '$_POST[prenom]','$_POST[pays]','$_POST[nationalite]','$_POST[age]',
'$_POST[sexe]','$_POST[statusfamille]','$_POST[mail]','$_POST[phone_portable]','$_POST[phone_fixe]','$_POST[adresse]') ";
1
MK-10 Messages postés 9 Date d'inscription mardi 15 mars 2011 Statut Membre Dernière intervention 17 août 2012 3
16 août 2012 à 18:29
Bonjour, merci pour votre intervention.

Ils ne manquaient pas, mais il y en avait de trop les ' '. A noter aussi, j'ai une colonne id qui s'auto incrémente, donc j'ai dû ajoute des ' ' au début des values.
:)

Nouvelle syntaxe:
 
$sql= "INSERT INTO colloque_membres VALUES ( ' ', '$_POST[status]',  '$_POST[nomfamille]', '$_POST[nom]', '$_POST[prenom]','$_POST[pays]',
'$_POST[nationalite]','$_POST[age]','$_POST[sexe]','$_POST[statusfamille]',
'$_POST[mail]','$_POST[phone_portable]','$_POST[phone_fixe]','$_POST[adresse]"); 
			
 mysql_query ($sql) or die ('Erreur SQL !'.$sql.'<br />'.mysql_error());  
 
	mysql_close();
0
Utilisateur anonyme
16 août 2012 à 21:44
Si, ils manquaient. Les apostrophes qui figuraient dans ta ligne étaient des délimiteurs de chaîne du php, pas des délimiteurs de valeurs de mysql. D'ailleurs, ça se voyait bien dans ton message d'erreur :
 VALUES ( Intervenant, nomdefamille, xnom, xprenom,xpays, xnationalite,2012-08-31,Féminin,Divorcé,xmail@mail.fr,0300000000, 0100000000,x rue cp)

au lieu de
 VALUES ( 'Intervenant', 'nomdefamille', 'xnom', 'xprenom','xpays', 'xnationalite','2012-08-31','Féminin','Divorcé','xmail@mail.fr','0300000000', '0100000000','x rue cp')

Les ' ' qu'il y avait dans $_POST['status'], $_POST['nomfamille'] etc... n'étaient pas en trop dans ta manière d'écrire. Si je les ai retirés, c'est parce que je complètement changé la manière d'écrire la requête : tu concaténais une douzaine de morceaux de chaines entre simples quotes et de variables, j'ai tout écrit en une seule chaîne entre doubles quotes.
0
alexiscv Messages postés 2 Date d'inscription jeudi 16 août 2012 Statut Membre Dernière intervention 16 août 2012
16 août 2012 à 20:08
Salut MK-10 ,

En fait ça marche pas parce que tu doit spécifier les noms des colonnes dans ta requete. Sinon tu pourras pas associer une valeur à une colonne donnée.


Voici la correction :

$sql= "INSERT INTO colloque_membres(col_'' , col_status, col_nomfamille, col_nom ,col_prenom,col_pays,col_nationalite,col_age,col_sexe , etc etc)
VALUES ( ' ', '$_POST[status]', '$_POST[nomfamille]', '$_POST[nom]', '$_POST[prenom]','$_POST[pays]',
'$_POST[nationalite]','$_POST[age]','$_POST[sexe]','$_POST[statusfamille]',
'$_POST[mail]','$_POST[phone_portable]','$_POST[phone_fixe]','$_POST[adresse]");


Pour plus d'informations :http://dev.mysql.com/doc/refman/5.0/fr/insert.html?ff=nopfpls

cdt
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
16 août 2012 à 21:01
Salut, juste une petite précision : tu n'as pas besoin de spécifier le nom de tes colonnes dans un insert si tu remplis tous les champs de ta table (et dans le bon ordre, bien entendu).
0
MK-10 Messages postés 9 Date d'inscription mardi 15 mars 2011 Statut Membre Dernière intervention 17 août 2012 3
16 août 2012 à 23:27
@le père Merci pour votre clarification, je viens de comprendre l'erreur suite a votre explication.

@Alexiscv merci, mais comme l'avait souligné flockocha ce n'était pas nécessaire et merci pour le lien.

merci a tous :)
0