[MySQL] Erreur de syntaxe que je ne comprend pas ! (aléatoire en plus)

Erreur de syntaxe que je ne comprend pas ! (aléatoire en plus) [MySQL] - PHP - Programmation

Marsh Posté le 21-11-2003 à 20:53:37    

Code :
  1. Erreur SQL !INSERT INTO sys_news (id,titre,auteur,contenu,date) values ('','ah mais ca marche ??','kaos','Faudrait savoir !!
  2. 3 fois d'affilé que ca marche la....','21/11/2003')
  3. 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 'affilé que ca marche la....','21/11/2003')' at line 1


 
Voila l'erreur que je rencontre... de temps en temps ! J'ai mis au point un systeme de news, et de temps en temps il me dit 'news postée avec succes', et defois je rencontre cette erreur, je ne comprend pas cet état aléatoire ! D'autant plus que le spages de codes marchent bien car une copie sert depuis plus d'un an sur un autre site sans pb !
 
Quelqu'un aurait t'il une idée ? Pour info, je le met quand, meme, voila le code de news_post.php :
 

Code :
  1. <?
  2. require("config.php" );
  3. $date=date("d/m/Y" );
  4. $contenu = nl2br($contenu);
  5. $insert = "INSERT INTO sys_news (id,titre,auteur,contenu,date) values ('','$titre','$auteur','$contenu','$date')";
  6. mysql_query($insert) or die('Erreur SQL !'.$insert.'<br>'.mysql_error());
  7. echo "
  8. News postée avec succès... <br><br>
  9. <center><a href='adminsite.php'>Administration</a> &nbsp;&nbsp; <a href='index.php'>Home du site</a></center></font>";
  10. mysql_close();
  11. ?>

Reply

Marsh Posté le 21-11-2003 à 20:53:37   

Reply

Marsh Posté le 21-11-2003 à 20:58:01    

ca te donne une erreur quand tu essayes d'ajouter une news avec des apostrophes (genre "3 fois d'affilé" ) ?
ca te donne une erreur quand tu essayes d'ajouter une news ne contenant pas d'apostrophe ?
 
si la reponse est "oui" et "non", jette un oeil sur http://www.php.net/fr/addslashes
 


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 21-11-2003 à 20:58:04    

Ah ! Je viens de voir que ce n'est pas si aléatoire ! enfait, c'est a partir du moment ou il y a un apostrophe ' dans un des champs que ca merde !

Reply

Marsh Posté le 21-11-2003 à 20:58:42    

grilled ^^
 
merci pour le liens, jvé jeter un oeil

Reply

Marsh Posté le 21-11-2003 à 21:02:35    

Chaque fois que l'on utilise une chaîne de caractère dans une requête, il faut la protéger avec addslashes(). Toujours :)


Message édité par mrbebert le 21-11-2003 à 21:02:41
Reply

Marsh Posté le 21-11-2003 à 21:06:45    

Je comprend pas...
 
Encoire un phénomene aléatoire !
J'ai rajouter o code de news_post.php cette ligne :
$contenu = addslashes($contenu);
 
Premeir test avec ' : Ca amrche, new spostée avec succès, mais le ' a disparu de la news !
 
Autres tests : La meme erreur ! non stop !

Reply

Marsh Posté le 21-11-2003 à 21:13:46    

ah non c bon ! dsl, pb de serveur enfait ! Tout ets rentré dans l'ordre merci a vous pour cette focntion primordiale :)
 
(je me demande quand meme pq j'avais aps ce probleme sur un autre serveur alors que j'entré des ' et des " dans els champs ! enfin bon ^^)

Reply

Marsh Posté le 21-11-2003 à 22:09:49    


pas de beaucoup en plus ;)
 
 
 
Il est possible que l'autre serveur soit configuré avec les "magic quotes" activées (cf http://www.php.net/manual/fr/ref.i [...] quotes-gpc )


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 24-11-2003 à 21:58:12    

Oui c'est ce que je me disais...
 
Sinon une deriere question, si j'instaure la ligne $contenu2 = addslashes($contenu); j'ai l'impression que la ligne du dessus : $contenu2 = nl2br($contenu); qui 'est plus pris en compte... Est ce normal ?  

Reply

Marsh Posté le 24-11-2003 à 22:21:34    

si tu as:

Code :
  1. 1:  $contenu2 = nl2br($contenu);
  2. 2:  $contenu2 = addslashes($contenu);


oui c'est normal : la ligne 1 ne sert a rien puisque de toute facon dans la ligne 2, le contenu de $contenu2 sera écrasé par  $contenu addslashé
 
tu peux faire

Code :
  1. 1:  $contenu2 = nl2br($contenu);
  2. 2:  $contenu2 = addslashes($contenu2);


 
ou bien  directement

Code :
  1. 1:  $contenu2 = nl2br(addslashes($contenu));


 


---------------
www.alliancefrancophone.org ... Home is where the heart is
Reply

Marsh Posté le 24-11-2003 à 22:21:34   

Reply

Marsh Posté le 24-11-2003 à 23:58:36    

mrBebert a écrit :

Chaque fois que l'on utilise une chaîne de caractère dans une requête, il faut la protéger avec addslashes(). Toujours :)


ou alors faire ça proprament en utilisant des paramètres.
 
en C# ça donne ça par exemple :
 


sql = "select news_id from news where title = @title";
cmd = cnx.CreateCommand();
cmd.CommandType = System.Data.CommandType.Text;
cmd.CommandText = sql;
param = cmd.CreateParameter();
param.ParameterName = "@title";
param.SqlDbType = System.Data.SqlDbType.Varchar;
param.Direction = System.Data.ParameterDirection.Input;
param.Value = title;
cmd.Parameters.Add(param);
rs = cmd.ExecuteReader(System.Data.CommandBehavior.Default);


 
Il y a l'équivalent en PHP (ou alors y'a vraiment un problème)
 
Niveau performance, c'est du simple au centuple. (le SGBD conserve la requête en mémoire d'une fois à l'autre, elle se comporte alors comme une procédure stockée)


Message édité par MagicBuzz le 24-11-2003 à 23:59:38
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed