Page 1 sur 1

"c'est" ce verbe avec l'accent ne fonctionne pas d

Posté : 03 déc. 2006, 19:32
par alaingpl
Bonjour à tous,

Lorsque je tape un message dans mon formulaire et que j'utilise le verbe "c'est" j'ai le message d'erreur suivant :

Erreur SQL !INSERT INTO table_actus (id, titre, article, dater) VALUES('', '1ère journée','Il y a de la neige est le temps est splendide. Soleil, neige et farniente. Les vacances se passent très bien et les enfants sont ravis. Ce soir, c'est raclette au restaurant.','mardi 9 janvier')
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 'est raclette au restaurant.','mardi 9 janvier')' at line 2

Comment dois je faire pour que cela n'arive pas ?

Ci - dessous le fichier qui traite le formulaire .
<?php
 require('config.php'); 
/* on récupére les formulaire */
if(isset ($_POST['titre']))  $titre=$_POST['titre'];
else       $titre=""; 
 
if(isset ($_POST['article']))  $article=$_POST['article'];
else       $article="";
 
if(isset ($_POST['date']))  $date=$_POST['date'];
else       $date="";
 
 /* on vérifie s'ils sont vide */
 {
if (empty($titre) OR empty($article) OR empty($date))
 {
 echo ' tous les champs doivent être renseignés ';
 }
else 
 {/* connection */
mysql_connect($localhost,$login,$mot) OR die("Erreur !<br/ >" .mysql_error());  
mysql_select_db($dbName) OR die("Erreur !<br />" .mysql_error()); 

/* on insére dans la table, puis les champs les variables */
$sql = "INSERT INTO table_actus (id, titre, article, dater)
VALUES('', '$titre','$article','$date')";
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
{
echo "<p align=\"center\"> <a href=\"javascript:history.go(-1);\">Entrez un nouvel article</a></p>";
}
mysql_close();// on ferme la connexion
}
}
?>
Merci d'avance de m'aider.

Posté : 03 déc. 2006, 19:35
par Invité
splendide. Soleil, neige et farniente. Les vacances se passent très bien et les enfants sont ravis. Ce soir, c\'est raclette au

Posté : 03 déc. 2006, 19:38
par jojolapine
Euh... essaye d'utiliser un autre verbe, du style:
"ce soir il y a de la raclette au restaurant"


:langue:
Sinon plus sérieusement, tu dois "échapper" tes apostrophes, qu'elle viennent du verbe être ou d'ailleurs...
Pour ce faire, tu peux utiliser addslashes, ou mieux:
mysql_real_escape_string, qui protègera également les commentaires, et d'autres trucs que je ne connais pas... mais tout cela en fonction de base de donnée, donc toujours pile juste :wink:

Posté : 03 déc. 2006, 19:46
par Ajoloca
Bonsoir,

Le caractère apostrophe est un caractère "délimiteur de chaine" tout comme le guillemet.

Pour pouvoir les insérer dans une requête il faut les "protéger".
Tu as plusieurs façons de faire :

- Dobler le caractère 'c''est un message';
- Utiliser l'antislash 'c\'est un message';
- Changer le délimiteur "c'est un message";
- Utiliser les fonctions fournies par PHP comme
- mysql_real_escape_string();
- addslashes();

Posté : 03 déc. 2006, 20:47
par DocType
+1 à mysql_real_escape_string() , à mettre sur chaque variable php qui correspond avec la requête sql :wink:

Posté : 04 déc. 2006, 00:19
par alaingpl
euh... tout compte fait je vais prendre une fondue...


Merci à tous de l'aide.

Posté : 04 déc. 2006, 00:49
par jojolapine
ben eux pourquoi? t'aime pas la raclette...?
faut persévérer!!!
montre nous ce que t'a essayer et dis nous ce qui ne marhce pas!!

Posté : 04 déc. 2006, 00:55
par Ajoloca
ben eux pourquoi? t'aime pas la raclette...?
faut persévérer!!!
montre nous ce que t'a essayer et dis nous ce qui ne marhce pas!!
Il a marqué le sujet comme résolu, je suppose que c'est réglé.

Posté : 04 déc. 2006, 19:42
par Invité
Bonsoir à tous,

J'ai réglé mon problème de la façon suivante :
<?php
 require('config.php'); 
/* on récupére les formulaire */
if(isset ($_POST['titre']))  $titre=addslashes($_POST['titre']);
else       $titre=""; 
 
if(isset ($_POST['article']))  $article=addslashes($_POST['article']);
else       $article="";
 
if(isset ($_POST['date']))  $date=addslashes($_POST['date']);
else       $date="";
J'aurai bien aimé utiliser :
mysql_real_escape_string();
mais je n'ai compris où l'écrire malgré mes recherches dans le manuel de référence.

Encore merci à tous de l'aide et du temps que vous passez pour nous amateurs et débutants.

Posté : 04 déc. 2006, 21:00
par Truc
J'aurai bien aimé utiliser :
mysql_real_escape_string();
mais je n'ai compris où l'écrire malgré mes recherches dans le manuel de référence.
suffit de passer la variable POST en paramètre de la fonction :
$titre = mysql_real_escape_string($_POST['titre']);
tu peux donc faire :
$titre = (isset ($_POST['titre']))  ? mysql_real_escape_string($_POST['titre']) : "";
Pour la syntaxe regarde CECI