Erreur de syntaxe mysql_query [Résolu/Fermé]

Signaler
Messages postés
9
Date d'inscription
mardi 15 mars 2011
Statut
Membre
Dernière intervention
17 août 2012
-
MK-10
Messages postés
9
Date d'inscription
mardi 15 mars 2011
Statut
Membre
Dernière intervention
17 août 2012
-
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


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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 71917 internautes nous ont dit merci ce mois-ci

Messages postés
9
Date d'inscription
mardi 15 mars 2011
Statut
Membre
Dernière intervention
17 août 2012
3
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();
Utilisateur anonyme
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.
Messages postés
2
Date d'inscription
jeudi 16 août 2012
Statut
Membre
Dernière intervention
16 août 2012

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
flokocha
Messages postés
1508
Date d'inscription
lundi 8 mars 2004
Statut
Membre
Dernière intervention
10 octobre 2015
262
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).
Messages postés
9
Date d'inscription
mardi 15 mars 2011
Statut
Membre
Dernière intervention
17 août 2012
3
@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 :)