Bonjour,
J'ai un formulaire avec un champ <textarea name="description"... et j'ai remarqué que lorsque l'utilisateur utilise les guillemets : "". le formulaire n'est pas enregistré dans la bdd. Que dois je faire.
Merci d'avance
Version imprimable
Bonjour,
J'ai un formulaire avec un champ <textarea name="description"... et j'ai remarqué que lorsque l'utilisateur utilise les guillemets : "". le formulaire n'est pas enregistré dans la bdd. Que dois je faire.
Merci d'avance
Nous montrer ton code :)
ouCode:addslashes($description) ; // puis stripslashes() pour l'affichage
ouCode:htmlspecialchars($description, ENT_QUOTES);
Code:htmlentities($description, ENT_QUOTES);
Code:<textarea name="description" cols=45 rows=5></textarea>
as tu essayé les fonction que je t'ai mis plus haut.
il faut les appeler avant d'envoyer à la DB.
exemple avec addslashes() :
Code:
1
2
3 $x_description = addslashes($description); $sql = "INSERT INTO tatable (champ_description) VALUES ('$x_description')";
Utilise htmlspecialchars($description) au lieu de htmlspecialchars($description, ENT_QUOTE)
Cela te protègera des attaques XSS du genre
<script> .... </script> qu'un utilisateur mal intentionné pourrait saisir dans ton textarea
J'ai une question:Citation:
Envoyé par N1bus
Si je mets juste
est-ce que ca marche?Code:
1
2
3 $description = addslashes($description); $sql = "INSERT INTO tatable (description) VALUES ('$description')";
Je n'ai pas encore essayer ta solution
Pareil .Citation:
est-ce que ca marche?
(moi, je mets toujours des noms de variables avec des préfixes lorsque l'original a été modifié.
ça me permet de savoir où j'en suis si la variable réapparait plus tard dans le code- surtout si elle réapparait 200 lignes plus loin ....)
Quel est le SGBD ? MySQL ?
MySQLCitation:
Envoyé par Mr N.
Alors il ne faut pas utiliser addslashes mais http://mysql_real_escape_string
et ne pas utiliser htmlentities/htmlspecialchars avant d'inserer en bd. htmlentities/htmlspecialchars sont destiné à l'affichage, pas au stockage.
Donc dans mon cas pour enregistrer dans la base je dois faire ca ???Citation:
Envoyé par Mr N.
Code:
1
2 $description = mysql_real_escape_string($description);
oui
Merci beaucoup. Est ce que je dois faire ca pour tous les champs de mon formulaire ou bien juste les champs du type textearea?
tous les champs. le mieux est d'utiliser l'exemple 3 de la doc officielle :
http://php.net/mysql_real_escape_string#AEN116943
Je pense avoir oublié de préciser un truc important. Mon formulaire est en plusieurs pages et je transmet les info par la méthode POST d'une page à l'autre.
En page 1 j'ai le champ description et d'autres champ. Voici le code du champ description:
En page2 je transmet les info comme ceci:Code:
1
2 <textarea name="description" cols=45 rows=5 ></textarea>
En page 3 je transmet les infos et j'enregistre dans la baseCode:$description=""; if(!empty($_POST["description"])) $description=$_POST["description"];
J'ai essayé d'ajouter mysql_real_escape_string dans le code comme ceciCode:$description=""; if(!empty($_POST["description"])) $description=$_POST["description"];
mais ca n'enregitre pas toutes les infos dans la base.Code:$description=""; if(!empty($_POST["description"])) $description=mysql_real_escape_string($_POST["description"]);
Par exemple pour la phrase :
Ca enregistreCitation:
Vds "superbe" voiture noire/bleu
Que dois je faire???Citation:
Vds \\\
quelqu'un pourrais m'aider svp?
Merci d'avance
Car ta variable $description dans ta deuxième page n'a pas une portée indéfinie. Elle est limitée à l'exécution du script. Pour la transporter vers la troisième page tu dois l'insérer dans le formulaire de la deuxième page dans un champ hidden:
Puis en cliquant sur le bouton submit du formulaire cela augmentera la portée de la variable $description au script de la page suivante.Code:<input type="hidden" name="description" value="<?php echo $description ?>" />
Ou alors tu utilises les sessions.
C'est exactement ce que je fais. Je passe les variables sur la page 2 avec ce codeCitation:
Envoyé par zyongh
et ensuite je les enregistre. Mon problème est de traiter les caractères spéciaux du style "", ', /.Code:<input type="hidden" name="description" value="<?php echo $description ?>" />