Posez votre question Signaler

[PHP] Apostrophe et addslashes

Jo$$ - Dernière réponse le 29 juin 2009 à 12:21
Bonjour,
J'ai du mal a gerer les apostrophe avec php dans mon formulaire ... je sais qu'il faut utiliser addslashes mais je sais pas vraiment ou ...
J'ai :



<?php
if (isset($_POST['titre'])  ) // Si les variables existent
{

        // D'abord, on se connecte à MySQL
		include("connexion.php"); 
 
       

        $titre = mysql_real_escape_string(htmlspecialchars($_POST['titre']));
    
        // Ensuite on enregistre le message
        mysql_query("INSERT INTO moi VALUES('', '$titre' )");
 
        // On se déconnecte de MySQL
        mysql_close();


et donc mon probleme est que je ne sais pas ou mettre precisement le addslashes car pour l'instant, le rendu des apostrophes est : \'
Merci de m'aider
Lire la suite 
Réponse
+2
moins plus
Bonjour

Il ne faut pas utiliser addslashes pour insérer tes données dans la base, ni stripslahes pour les afficher.
Il faut peut-être utiliser stripslashes pour récupérer les informations par POST ou GET, ça dépend de la configuration de ton serveur.
Il faut utiliser mysql_real_escape_string pour enregistrer les informations dans la base
Il faut utiliser (si tu ne l'as pas fait à l'enregistrement) htmlspecialchars ou htmlentities pour les afficher

Lis la doc de ces fonctions dans le manuel PHP, c'est beaucoup plus fiable que les conseils qu'on trouve sur ce forum
Ajouter un commentaire
Réponse
+1
moins plus
effectivement, htmlspecialchars et htmlentities t'empêchent d'insérer des codes html en transformant les < et > en & lt; et & gt; (sans les espaces)
Ajouter un commentaire
Réponse
+0
moins plus
Salut

Je pense que t'a pas bien saisi l'interet de addslashes

Cette fonction permet d'ajouter un \ devant les caracteres speciaux, pas de l'enlever ! Mais tu utilise mysql_real_escape_string donc tu n'a pas besoin d'un addslashes, ce serai redondant...

Ton code la est tout a fais correct
Ce que tu doit faire c'est lors de l'affichage des données, supprimer le \ grace a la fonction stripslashes.
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Merci de ta réponse mais , maintenant , quand je rentre un titre avec une apostrophe, ça n'eregistre pas ...

J'ai peut etre pas mis au bon endroit le "stripslashes"

j'ai :


<?php
if (isset($_POST['titre'])  ) // Si les variables existent
{

        // D'abord, on se connecte à MySQL
		include("connexion.php"); 
 
       

        $titre =  stripslashes($_POST['titre']);
    
        // Ensuite on enregistre le message
        mysql_query("INSERT INTO moi VALUES('', '$titre' )");
 
        // On se déconnecte de MySQL
        mysql_close();





merci de m'ader a trouver une solution ....
Ajouter un commentaire
Réponse
+0
moins plus
lis bien ce qu'il a dit avant ...
Ton code la est tout a fais correct
Ce que tu doit faire c'est lors de l'affichage des données, supprimer le \ grace a la fonction stripslashes. 

donc ton code était correct avant que tu mette stripslashes

il faut que tu utilise stripslashes quand tu lis le message dans la base et non quand tu l'ecris
Ajouter un commentaire
Réponse
+0
moins plus
il n'y aurait pas une autre solution ? parce que la vous voulez que je change l'affichage sur toutes mes pages !
je n'ai pourtant pas de problème avec les apostrophes quand j'écris directement dans phpmyadmin .... le problème doit certainement venir du formulaire ....

si y'a pas d'autres solution que celle que vous me proposé , j'ai fait ça :

  <?php  $reponse = mysql_query("SELECT * FROM moi WHERE id='".$_GET['var']."'"); $donnees = mysql_fetch_array($reponse)  ?>
		

<?php echo stripslashes($donnees['titre'] ); ?>



et en effet ça marche bien, MERCI :) , mais si je doit me le taper sur toute mes pages Oo
Ajouter un commentaire
Réponse
+0
moins plus
ben le fait d'échapper les caractère c'est pour la sécurité
pour éviter les injections sql par exemple

donc question sécurité mieux vaut l'écrire sur chaque page plutôt que de risquer que quelqu'un prenne le contrôle du site

après peut être qu'en utilisant dans include tu pourrais éviter de l'écrire à chaque fois non ?
enfin ça dépend de pourquoi tu t'en sert aussi

tu peux aussi faire une fonction ( ou une classe ) qui te servirai a récupérer les info de la bdd et de les échapper
comme ça tu a juste la fonction à appeler et hop =)
Ajouter un commentaire
Réponse
+0
moins plus
ok nEm3sis , mais ce que tu me raconte a l'air un peut trop dur pour moi ^^.
De toute façon mon formulaire est dans un dossier protégé par htaccess (ya que moi qui utilise le formulaire)

donc finallement j'ai fait :

¤ page formulaire :
$titre = mysql_real_escape_string(htmlspecialchars($_POST['titre']));

¤ page d'affichage :
<?php echo stripslashes($donnees['titre']) ?>



et ça marche bien :)
_________________________________
et j'ai une autre p'tite question concernant mon formulaire :
c'est le "htmlspecialchars" qui m'empêche de mettre des codes html ?
Ajouter un commentaire
Réponse
+0
moins plus
je n'ai pourtant pas de problème avec les apostrophes quand j'écris directement dans phpmyadmin C'est parce que phpmyadmin fait tout le boulot à ta place. Mais il le faite

Si ton script marche tel quel, c'est que la configuration de ton serveur s'y prête : si tu peux enregistrer les données en mettant directement $_GET['var'] dans une requête, c'est que magic_quotes_gpc est actif, mais tu peux être sûr que tu auras de mauvaises surprises en changeant de serveur.
Ajouter un commentaire
Réponse
+0
moins plus
Très bien, Merci a tous pour votre aide =)
________________
je peut plus mettre mon poste en résolut ...

Ajouter un commentaire
Ce document intitulé «  [PHP] Apostrophe et addslashes  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.