Page 1 sur 2

Erreur de mysql_query

Posté : 17 juil. 2008, 18:36
par scadox
Bonjour a tous,

J'ai un petit problème et je trouve vraiment pas quel es le problème
j'utilise WampServer 2.0 ( php5 .. )

<form action=?section=modererdoc&moderer=ok method=POST name='".$data_docs_lignes['id']."'>
$id_form            =$_POST['id_form'];
$references_form    =$_POST['references_form'];
$titre_form         =$_POST['titre_form'];
$description_form   =$_POST['description_form'];
$quantite_form      =$_POST['quantite_form'];
$prix1_form         =$_POST['prix1_form'];
$rabais_form        =$_POST['rabais_form'];
mysql_query(" UPDATE docs_lignes SET references=\"$references_form\",titre=\"$titre_form\",description=\"$description_form\",quantite=\"$quantite_form\",prix1=\"$prix1_form\",rabais=\"$rabais_form\" WHERE id=\"$id_form\" ") or die('Erreur !<br>'.$sql.'<br>'.mysql_error());
il me print toujours :

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 'references="test",titre="test",description="test",quantite="test",prix1="test",rabais="test" WHERE id="7' at line 1


Je vous remercie beaucoup si vous trouvez la solution, passez une belle journée !

Posté : 17 juil. 2008, 19:10
par guilt92
Je pense que ton champ ID n'est pas de type TEXT.

Il faut donc faire un

Code : Tout sélectionner

WHERE id=X
et non pas

Code : Tout sélectionner

WHERE id="X"
....

Posté : 17 juil. 2008, 20:42
par chrislabricole
C'est pas une erreur du mysql_query() c'est tout simplement une erreur de ta requête SQL, donc, si un modo, passe ici, c'est dans le forum SQL & bases de données :)

Pour ton problème, il est préférable de mettre des apostrophes ( " ) dans ton <form> ;)


Pour ta requête, il est préférable également de pas avoir recours au backslash ( \ ) pour tes apostrophes, après, ont s'embrouille....
donc, moi, perso, je l'écrirait comme ça :
mysql_query('UPDATE docs_lignes SET references="'.$references_form.'", titre="'.$titre_form.'", description="'.$description_form.'", quantite="'.$quantite_form.'", prix1="'.$prix1_form.'", rabais="'.$rabais_form.'" WHERE id="'.$id_form.'"') or die('Erreur !<br />'.mysql_error());
Plus clair, plus pro, plus compréhensif ;) ^^

Posté : 17 juil. 2008, 22:33
par dunbar
Salut.

N'oublie pas de te protégé contre les injections
Proposition de correction:
<?php

$id_form            = mysql_real_escape_string($_POST['id_form']);
$references_form    = mysql_real_escape_string($_POST['references_form']);
$titre_form         = mysql_real_escape_string($_POST['titre_form']);
$description_form   = mysql_real_escape_string($_POST['description_form']);
$quantite_form      = mysql_real_escape_string($_POST['quantite_form']);
$prix1_form         = mysql_real_escape_string($_POST['prix1_form']);
$rabais_form        = mysql_real_escape_string($_POST['rabais_form']);


            $sql = " UPDATE docs_lignes
                            SET
                                references    = '".$references_form."',
                                titre         = '".$titre_form."',
                                description   = '".$description_form."',
                                quantite      = '".$quantite_form."',
                                prix1         = '".$prix1_form."',
                                rabais        = '".$rabais_form."'
                           WHERE
                                id            = '".$id_form."'";

                            $resultat = mysql_query($sql) or die('Erreur MySQL : ton message ici !<br>'.$sql.'<br>'.mysql_error());

?>

Posté : 18 juil. 2008, 13:30
par scadox
Voila que rien functionne encore :S c'est vraiment bizare toujour la memme erreur..

voici mon form :
$sql_docs_lignes = "SELECT * FROM docs_lignes WHERE id_docs=\"$id\" ORDER BY id ASC"; 
$req_docs_lignes = mysql_query($sql_docs_lignes) or die('Erreur !<br>'.$sql_docs_lignes.'<br>'.mysql_error()); 
while($data_docs_lignes = mysql_fetch_assoc($req_docs_lignes)) 
{
echo " 
<tr bgcolor=\""; echo switchcolortable(); echo "\">
<td>
<form action='?section=modererdoc&moderer=form&id=".$data_docs['id']."' method='POST' name='".$data_docs_lignes['id']."'>
<input type='hidden' name='id_form' size='8' value='".$data_docs_lignes['id']."'>
<center><input type='text' name='references_form' size='8' value='".$data_docs_lignes['references']."'>
<td><center><input type='text' name='titre_form' size='25' value='".$data_docs_lignes['titre']."'>
<td><center><textarea name='description_form' cols='45' rows='3'>".$data_docs_lignes['description']."</textarea>
<td><center><input type='text' name='quantite_form' size='5' value='".$data_docs_lignes['quantite']."'>
<td><center><input type='text' name='prix1_form' size='5' value='".$data_docs_lignes['prix1']."'>
<td><center><input type='text' name='rabais_form' size='5' value='".$data_docs_lignes['rabais']."'>

<td><center><br><input type='submit' name='submit' value='Save'> <a href=?section=modererdoc&supprimer=ligne&idligne=".$data_docs_lignes['id']."&id=$id><img border=0 src=img/delete.png alt='Supprimer cette ligne'></a> </form>
";
}
Image

Je vous remercie pour le temps que vous prenez pour esseyer de m'aider.

Posté : 18 juil. 2008, 13:50
par DrEAM's
$sql_docs_lignes = "SELECT * FROM docs_lignes WHERE id_docs=\"$id\" ORDER BY id ASC";  
remplace par:
$sql_docs_lignes = "SELECT * FROM docs_lignes WHERE id_docs='$id' ORDER BY id ASC";  
enjoy :mrgreen:

Posté : 18 juil. 2008, 14:29
par guilt92
$sql_docs_lignes = "SELECT * FROM docs_lignes WHERE id_docs="$id" ORDER BY id ASC";  
remplace par:
$sql_docs_lignes = "SELECT * FROM docs_lignes WHERE id_docs='$id' ORDER BY id ASC";  
enjoy :mrgreen:
:shock: :shock: :shock:
les deux syntaxes que tu proposes sont rigoureusement identiques... le \ permet d'échapper le " donc faire un
echo ""bonjour""; //affichera "bonjour";
echo "'bonjour'"; //affichera 'bonjour'; 
donc ca revient au même sauf que dans un cas c'est des simple quotes et dans l autre des doubles...

Sinon scadox tu as fais quoi exactement ? Toujours la meme erreur sur la même requete ou celle que tu montres par la suite ? montre nous ta requete qui marche pas et le code correspondant stp...

Posté : 18 juil. 2008, 14:38
par DrEAM's
oui mais je trouve cela plus simple a comprendre après quand il y a trop de \ partout on ne s'y retrouve plus(enfin pour moi^^)
Après je ne sais pas désoler j'ai bau chercher rien ne viens. :?

Posté : 18 juil. 2008, 15:26
par Patriboom
Il semble y avoir un problème de guillemets et apostrophes, c'est classique.
Pour le trouver, commence par sotir ton FORM de la zone <?PHP la coloration de ta syntaxe par ton éditeur te permettra de repérer les fautes de frappe, les " et ' en trop ou en manque dans ton FORM.
Quand tout cela sera correct, alors tu pourras le planter dans ton ECHO

Tu peux aussi, pour repérer une faute de " ou ', avec FireFox, faire "Afficher la source". FF colorera alors le texte selon la syntaxe HTML et tu pourras rapidement repérer ton erreur.

Posté : 18 juil. 2008, 15:53
par dunbar
Question stupide probablement :wink:
Mais ceci me semble bizarre :
<form action='?section=modererdoc&moderer=form&id
Ne manque t'il pas le fichier.php :?:

Posté : 18 juil. 2008, 16:06
par DrEAM's
tout dépend si cela redirige sur le même fichier ou pas ;)

Posté : 18 juil. 2008, 18:18
par chrislabricole
Voila que rien functionne encore :S c'est vraiment bizare toujour la memme erreur..
Et..... quelle est ton erreur ? :roll:

Posté : 18 juil. 2008, 18:27
par dunbar
Une question $id il correspond a quoi :?:

Posté : 18 juil. 2008, 18:34
par scadox
le href=?... sa functionne si tu reste dans le memme fichier .. comme moi je j'essey de faire le tout dans le memme fichier possible comme exemple config.php et index.php

Pour les \" \" au lieu de ' ' je fait ceci car si exemple le texte dans le input est [ j'aime les fruits ] .. il va seulement prendre le [ j ] et non le reste c'est pour sa que je met des \"

DrEAM's a écrit:
PHP:
$sql_docs_lignes = "SELECT * FROM docs_lignes WHERE id_docs=\"$id\" ORDER BY id ASC";

remplace par:
PHP:
$sql_docs_lignes = "SELECT * FROM docs_lignes WHERE id_docs='$id' ORDER BY id ASC";
j'ai pas de problème pour faire afficher les entrées de MySQL ... ces seulement lorsque je click sur le 'SUBMIT' du form qu'il ne veut pas UPDATE ..

dunbar lorsque j'insert ton code ... aucun erreur ne s'affiche ... comme si le UPDATE serais ok mais dans MySql rien ne change via phpmyadmin[/b]

a quoi sert le $id
Je vais expliquer..

La page présent .. es un Document ( devis ou facture)
donc exemple ?section=modererfacture&id=\"".$data_docs['id']."\"

dans chaques Document ( docs = mysql )
il a des lignes de codes ( docs_lignes = mysql )

dans chaques lignes : comme ci-dessous = 3
Image
les 3 docs_lignes s'affiche bien dans le tableaux

Mon lien [ ajouter une ligne de produit ] functionne tres bien ! =
echo "[ <a href=?section=modererdoc&ajouter=ligne&id=$id><b>Ajouter une ligne de produit</b></a> ]";
if($ajouter=$_GET['ajouter']=="ligne")
{
$id=$_GET['id'];
mysql_query(" INSERT INTO docs_lignes (id_docs) VALUES (\"$id\")") or die('Erreur !<br>'.$sql.'<br>'.mysql_error());
echo "<script type=\"text/javascript\">function redirection_js(){ x=setTimeout(\"window.location.href='?section=modererdoc&id=$id'\",1); }    </script><body onLoad=\"redirection_js();\">";
}
[/b]

c'est seulement mon UPDATE qu'il functionne pas avec mon form pour modifier la ligne de produit

Erreur MySQL :
UPDATE docs_lignes SET references = 'fh1', titre = 'Forfait No.1', description = '1 nom de domaine gratuit\r\n500 megs d\'espaces\r\n2 gig de bandes passantes\r\n5 courriers électroniques\r\n2 base de données', quantite = '12', prix1 = '4.95', rabais = '' WHERE id = '1'
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 'references = 'fh1', titre = 'Forfai' at line 3

Posté : 18 juil. 2008, 18:39
par dunbar
le href=?... sa functionne si tu reste dans le memme fichier .. comme moi je j'essey de faire le tout dans le memme fichier possible comme exemple config.php et index.php

Pour les " " au lieu de ' ' je fait ceci car si exemple le texte dans le input est [ j'aime les fruits ] .. il va seulement prendre le [ j ] et non le reste c'est pour sa que je met des "

DrEAM's a écrit:
PHP:
$sql_docs_lignes = "SELECT * FROM docs_lignes WHERE id_docs="$id" ORDER BY id ASC";

remplace par:
PHP:
$sql_docs_lignes = "SELECT * FROM docs_lignes WHERE id_docs='$id' ORDER BY id ASC";
j'ai pas de problème pour faire afficher les entrées de MySQL ... ces seulement lorsque je click sur le 'SUBMIT' du form qu'il ne veut pas UPDATE ..

dunbar lorsque j'insert ton code ... aucun erreur ne s'affiche ... comme si le UPDATE serais ok mais dans MySql rien ne change via phpmyadmin[/b]
et si tu affiche ta requete update cela donne quoi :?: