8796 sujets

Développement web côté serveur, CMS

Bonjour,

J'ai créé un 1er formulaire PHP qui me permet de saisir des données. Lorsque j'envoie le formulaire un script récupère les données "postées", puis génère une requête qui est censée déposer les données saisies préalablement dans la base de données correspondante (voir le code ci-dessous).

Malheureusement, j'ai le message d'erreur suivant qui apparaît :

"Erreur de syntaxe près de 'div) VALUES ('', 'test', 'test', 'test', 'test', 'test', 'test',' à la ligne 1".

lorsque je teste ma requête (j'ai bien compris que la ligne 1 correspond à la requête sql).


Cela fait pas loin de quatre heures que je tente de résoudre ce problème sans résultat. Tout me semble être correcte et pourtant...

Je vous remercie par avance de vos suggestions avisées qui me permettraient de pouvoir résoudre ce problème et de passer à autre chose.

Merci d'avance,

Bill


<?php
//connection au serveur & sélection de la base de données

require_once('Connections/gestion_if.php');
  
//récupération des valeurs des champs

$famprogc    	= $_POST['famprogc'];
$perprogc    	= $_POST['perprogc'];
$nomprogc     	= $_POST['nomprogc'];
$dotaprogc     	= $_POST['dotaprogc'];
$natprogc     	= $_POST['natprogc'];
$bailprogc     	= $_POST['bailprogc'];
$docsprogc   	= $_POST['docsprogc'];
$conteuprogc	= $_POST['conteuprogc'];
$contnatprogc	= $_POST['contnatprogc'];
$objprogc     	= $_POST['objprogc'];
$nomprog     	= $_POST['nomprog'];
$dotaprog     	= $_POST['dotaprog'];
$natprog     	= $_POST['natprog'];
$docsprog     	= $_POST['docsprog'];
$conteuprog     = $_POST['conteuprog'];
$contnatprog	= $_POST['contnatprog'];
$objprog     	= $_POST['objprog'];
$nosprog     	= $_POST['nosprog'];
$nomsprog     	= $_POST['nomsprog'];
$objsprog     	= $_POST['objsprog'];
$dotasprog     	= $_POST['dotasprog'];
$noobjmsp     	= $_POST['noobjmsp'];
$nomobjmsp     	= $_POST['nomobjmsp'];
$objobjmsp     	= $_POST['objobjmsp'];
$dotaobjmsp     = $_POST['dotaobjmsp'];
$nodomsm     	= $_POST['nodomsm'];
$nomdomsm     	= $_POST['nomdomsm'];
$objdomsm     	= $_POST['objdomsm'];
$dotadomsm     	= $_POST['dotadomsm'];
$ratprog     	= $_POST['ratprog'];
$aireint     	= $_POST['aireint'];
$paysel     	= $_POST['paysel'];
$regel     		= $_POST['regel'];
$depel     		= $_POST['depel'];
$parteu     	= $_POST['parteu'];
$critel     	= $_POST['critel'];
$nomact     	= $_POST['nomact'];
$themact     	= $_POST['themact'];
$sthemact     	= $_POST['sthemact'];
$objcontact     = $_POST['objcontact'];
$typeactel     	= $_POST['typeactel'];
$motcle     	= $_POST['motcle'];
$depelact     	= $_POST['depelact'];
$depinelact     = $_POST['depinelact'];
$critqualact	= $_POST['critqualact'];
$dureproj     	= $_POST['dureproj'];
$benpot     	= $_POST['benpot'];
$montsubv     	= $_POST['montsubv'];
$tauxsubv     	= $_POST['tauxsubv'];
$appelproj     	= $_POST['appelproj'];
$carappproj     = $_POST['carappproj'];
$datelimcand	= $_POST['datelimcand'];
$lieudepdos     = $_POST['lieudepdos'];
$docs     		= $_POST['docs'];
$div     		= $_POST['div'];

//création & exécution de la requête SQL

$sql = "INSERT INTO gestion_if (id_gestion, famprogc, perprogc, nomprogc, dotaprogc, natprogc, bailprogc, docsprogc, conteuprogc, contnatprogc, objprogc, nomprog, dotaprog, natprog, docsprog, conteuprog, contnatprog, objprog, nosprog, nomsprog, objsprog, dotasprog, noobjmsp, nomobjmsp, objobjmsp, dotaobjmsp, nodomsm, nomdomsm, objdomsm, dotadomsm, ratprog, aireint, paysel, regel, depel, parteu, critel, nomact, themact, sthemact, objcontact, typeactel, motcle, depelact, depinelact, critqualact, dureproj, benpot, montsubv, tauxsubv, appelproj, carappproj, datelimcand, lieudepdos, docs, div) VALUES ('', '$famprogc', '$perprogc', '$nomprogc', '$dotaprogc', '$natprogc', '$bailprogc', '$docsprogc', '$conteuprogc', '$contnatprogc', '$objprogc', '$nomprog', '$dotaprog', '$natprog', '$docsprog', '$conteuprog', '$contnatprog', '$objprog', '$nosprog', '$nomsprog', '$objsprog', '$dotasprog', '$noobjmsp', '$nomobjmsp', '$objobjmsp', '$dotaobjmsp', '$nodomsm', '$nomdomsm', '$objdomsm', '$dotadomsm', '$ratprog', '$aireint', '$paysel', '$regel', '$depel', '$parteu', '$critel', '$nomact', '$themact', '$sthemact', '$objcontact', '$typeactel', '$motcle', '$depelact', '$depinelact', '$critqualact', '$dureproj', '$benpot', '$montsubv', '$tauxsubv', '$appelproj', '$carappproj', '$datelimcand', '$lieudepdos', '$docs', '$div')";
  mysql_query($sql) or die(mysql_error());
  echo "Nouvelle ligne de financement insérée dans la base de données !";
  echo "<a href='menu.php'>retour au menu principal</a>"; 

  //fermer la connexion 
  mysql_close();
?>
Salut,

"div" est un mot réservé de MySQL, il s'agit d'une fonction qui fait la division entière entre deux nombre.

Donc tu as plusieurs possibilités :
1. Tu renommes ton champ.
2. Tu encadres le nom de ton champ d'un délimiteur (`).

Personnellement je suis pour la seconde solution, ce qui te permet, au hasard d'une mise à jour MySQL, de rester compatible et d'éviter les bugs lorsqu'un mot devient réservé d'une version à l'autre.
Bonjour
Je me permets de me raccrocher à ce sujet car mon problème ressemble à celui de billledouble : erreur près de 'set civilité = 'Mr', nom = 'a', prénom = 'a', adresse = 'a', code_postal' at line 1'.
J'ai vérifié les noms de colonnes et il ne me semble pas avoir utilisé des mots réservés.
Voici mon code :
les crochets après $_POST n'apparaissent pas sur chaque ligne (???) mais ils figurent bien dans le code de ma page
$requete_insert = "insert into $table set civilité = '$_POST[civilite]',
	nom = '$_POST[nom]',
	prénom = '$_POST[prenom]',
	adresse = '$_POST[adresse]',
	code_postal = '$_POST[code_postal]',
	ville = '$_POST[ville]',
	email = '$_POST[mail]',
	naissance = '$naissance',
	permis = '$permis',
	délivré = '$_POST[delivre]',
	marque = '$_POST[marque]',
	type = '$_POST[type]',
	quotidien = '$_POST[frequence]',
	utilisation = '$_POST[utilisation]',
	kilométrage = $_POST[km],
	enregistré = '$date'";
$reponse = mysql_query($requete_insert);

Merci pour vos conseils
Papapetch
Soit $table est vide, soit $table est un mot réservé, soit $table contient au moins un espace.

Comme tu ne nous montres pas ce que contient $table, on ne pourra pas savoir.

De plus, quand on analyse une requête, il vaut mieux avoir le code SQL généré plutôt que le code PHP, c'est plus facile.
Modifié par Agylus (12 Aug 2009 - 17:10)
Pour la table :
$table = "rallye";

Pour le code sql généré, peux-tu m'expliquer comment le récupérer ?
Le problème venait bien de $table :
- table est un mot réservé
- l'affectation de $table était mal placé

Merci pour ton aide.

A titre d'information (qui pourrait me servir plus tard) peux-tu me dire comment récupérer le code sql généré.
Merci Agylus j'ai également pu résoudre mon problème, grace à ta suggestion ! Je souhaite marquer ce post comme "résolu", mais ne sait pas comment !