[PHP] Apostrophe et addslashes

Fermé
Jo$$ - 28 juin 2009 à 19:35
 Jo$$ - 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
A voir également:

10 réponses

effectivement, htmlspecialchars et htmlentities t'empêchent d'insérer des codes html en transformant les < et > en & lt; et & gt; (sans les espaces)
1
Mimiste Messages postés 1149 Date d'inscription samedi 17 mai 2008 Statut Membre Dernière intervention 6 mars 2016 206
28 juin 2009 à 20:56
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.
0
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 ....
0
nEm3sis Messages postés 710 Date d'inscription lundi 20 août 2007 Statut Membre Dernière intervention 9 avril 2012 113
29 juin 2009 à 10:40
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
0
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
0
nEm3sis Messages postés 710 Date d'inscription lundi 20 août 2007 Statut Membre Dernière intervention 9 avril 2012 113
29 juin 2009 à 11:48
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 =)
0
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 ?
0
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.
0
Très bien, Merci a tous pour votre aide =)
________________
je peut plus mettre mon poste en résolut ...

0