Requète SQL - erreur syntaxe

Egs1989
Invité n'ayant pas de compte PHPfrance

17 avr. 2010, 17:25

Bonjour à tous,

Je débutes en php, j'ai fait une requête pour enregistrer un nouvel adhérent dans ma base mais j'ai une erreur de syntaxe et le problème c'est que le message n'est pas précis : on m'indique une erreur à la ligne 32 , ici ça correspond au contenu du premier else
if(empty($_POST['nom']) || empty($_POST['prenom']) || (empty($_POST['masculin']) && empty($_POST['feminin'])) || empty($_POST['datenaiss']) || empty($_POST['adresse']) || empty($_POST['cp']) ||  empty($_POST['ville']))
	{
		echo ("Veuillez saisir toutes les valeurs!");
	}
	else
	{  

$query ="insert into adherent (nom, prenom, sexe, datenaiss, adresse, cp, ville, dateadhesion, dateecheance) values (".$_POST['nom'].",".$_POST['prenom'].","($_POST['masculin'] || $_POST['feminin']).$_POST['datenaiss'].",".$_POST['adresse'].",".$_POST['cp'].",".$_POST['ville'].",".$_POST['inscript'].",".$_POST['echeance'].",now())";

		$result =mysql_query($query);
	
		if ($result==FALSE)
		{
			echo ("<p>Erreur : ".mysql_errno($connect)."<br />");
			echo ("Message : ".mysql_error($connect)."</p>");
		die("L'opération a échoué");
		}	
		else
		{
			echo ("La requète a réussi, l'adherent a été enregistrer");
		}		
	}

Voila :D Si vous avez une idée, elle est la bien venue

ViPHP
ViPHP | 2287 Messages

17 avr. 2010, 17:33

Bonjour,

Trois idées :

- Ecris des lignes moins longues, quitte à éclater un long if() en plusieurs. Les messages d'erreur seront alors plus ciblés et les erreurs plus faciles à trouver.
- Tu peux te passer des parenthèses autour des valeurs transmises dans un echo, elles sont optionnelles et tu en as déjà largement assez ailleurs ;)
- Ton problème est simplement un point qui manque dans l'assemblage de certains éléments de la requête. (pense à nous copier le message d'erreur exact la prochaine fois stp).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Egs1989
Invité n'ayant pas de compte PHPfrance

17 avr. 2010, 17:54

Ok je vais essayer de voir ce que je peux faire, sinon voila mon message d'erreur :

Parse error: parse error in C:\Program Files (x86)\EasyPHP 3.0\www\Ludotheque\ajoutadherentsql.php on line 32

Egs1989
Invité n'ayant pas de compte PHPfrance

17 avr. 2010, 18:46

Re,
Hum... je cherches depuis tout à l'heure et ne n'avances pas trop. Quelqu'un en saurait un peu plus sur le problème ??

ViPHP
AB
ViPHP | 5818 Messages

17 avr. 2010, 20:26

faits un echo $query pour vérifier ce que renvoi la chaine de ta requête avec les variables.
Comme l'a dit Calimero ta requête n'est pas bien écrite.
Et puis c'est quoi ce || dans la requête d'insertion ?

Egs1989
Invité n'ayant pas de compte PHPfrance

17 avr. 2010, 20:42

En fait pour le sexe, c'est féminin ou masculin j'ai deux bouton radio de choix. Donc pour ma requète l'enregistrement sexe prend F ou M . Donc je me suis dit c'est masculin "ou" féminin :^o . J'ai voulais essayer quelque chose :?

ViPHP
ViPHP | 2287 Messages

18 avr. 2010, 05:00

J'ai voulais essayer quelque chose :?
Ca se sent, car c'est justement là que se situe ton problème ;) Regarde attentivement autour de cet essai pour trouver ton souci :)

:arrow: Il manque un point avant "l'essai", et il manque au moins une virgule après (même si tu surmontes la parse error PHP, la requête n'est pas bien formée comme l'a vu AB).

Quand tu auras rajouté ce fameux point (et donc réglé la Parse Error), tu pourras faire un echo de la variable $query, et en copier le résultat ici (encadré par des balises SQL) pour "voir" le second problème dans cette requête.
if(!@work()){ Nespresso(); } else { what(); }
______________________________

ViPHP
ViPHP | 1996 Messages

18 avr. 2010, 09:40

Moi pour tester plein de valeurs envoyée par POST j'emploie cette méthode :
Je mets un mots clef (ou une lettre clef genre * dans la clef du post) et je teste les variables grâce à une fonction.
Sans le mot clef, cela qui donnerai dans ton cas :
<?php
function test_post ($tab_a_tester)
{
	foreach ($tab_a_tester as $cle_POST)
	{
		if (!isset($_POST[$cle_POST]) or empty ($_POST[$cle_POST]))
			return FALSE;
	
	}
}

$tab_post_a_tester = array ("nom", "prenom", "masculin", "feminin", "datenaiss", "adresse", "cp", "ville");
if(!test_post($tab_post_a_tester))
{
	echo ("Veuillez saisir toutes les valeurs!");
}
else
{ 
?>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Egs1989
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 10:40

Merci beaucoup pour vos réponses =) j'avances. Donc j'ai trouvé mes erreurs de points et j'ai enfin quelque chose de plus :

Notice: Undefined index: inscript in C:\Program Files (x86)\EasyPHP 3.0\www\Ludotheque\ajoutadherentsql.php on line 33

Notice: Undefined index: echeance in C:\Program Files (x86)\EasyPHP 3.0\www\Ludotheque\ajoutadherentsql.php on line 33

Erreur : 1064
Message : Erreur de syntaxe près de ', now())' à la ligne 2
L'opération a échoué

Donc : Pour les undefined index je penses que ça doit être un $_post mal déclaré je pourrais me débrouiller , parc contre "Erreur de syntaxe près de ', now())' à la ligne 2", je ne comprend pas du tout ce type d'erreur car avec une autre requête j'ai écrit le now de la même façon et ça marche. :^o

Egs1989
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 10:56

C'est bon j'ai trouvé pour mes undefined index :D . Me manque que l'histoire du now, j'ai ça comme erreur depuis que j'ai corrigé les undefined index :

Erreur : 1064
Message : Erreur de syntaxe près de '10:53:47 ,,now())' à la ligne 2
L'opération a échoué

Egs1989
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 11:36

Re, j'ai réussi à corriger mon problème de now, maintenant le dernier vient de mon bidouillage avec le masculin et féminin car j'ai ça :

Erreur : 1136
Message : Column count doesn't match value count at row 1

Il croit qu'il me manque une valeur et je suis sur que ça vient de mon " || " . Quelqun aurait une idée pour que j'insère ces champs ? :^o

ViPHP
ViPHP | 1996 Messages

18 avr. 2010, 12:26

C'est quoi la structure de ta table?
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

devlop78
Invité n'ayant pas de compte PHPfrance

18 avr. 2010, 17:46

Il manque un point ici (au niveau du smiley)

$query ="insert into adherent (nom, prenom, sexe, datenaiss, adresse, cp, ville, dateadhesion, dateecheance) values (".$_POST['nom'].",".$_POST['prenom']."," :oops: ($_POST['masculin'] || $_POST['feminin']).$_POST['datenaiss'].",".$_POST['adresse'].",".$_POST['cp'].",".$_POST['ville'].",".$_POST['inscript'].",".$_POST['echeance'].",now())";

ViPHP
AB
ViPHP | 5818 Messages

19 avr. 2010, 02:49

Faut pas mettre de || dans la requête.

Définis une variable par exemple
$sexe = isset($_POST['masculin'])?  'M'  : 'indéfini';
$sexe = isset($_POST['feminin'])?  'F'  : $sexe;
ensuite c'est cette variable que tu insère dans la requête à la place de ($_POST['masculin'] || $_POST['feminin'])

Au passage les variables que l'on insère dans une requête doivent être protégées par la fonction mysql_real_escape_string

Et puis si tu débutes mieux vaut prendre l'habitude d'utiliser mysqli pour les requêtes en procédural. Il y a vraiment peu de différence avec la syntaxe mysql et c'est recommandé par le manuel.