stripslashes probleme

Petit nouveau ! | 4 Messages

05 janv. 2010, 23:32

Salut,

j'utilise le stripslashes dans mon script php et les slash apparaisent quand meme a l'affichage de la page web, quelqun a une idée de la cause?

Code : Tout sélectionner

$query = "SELECT TexteQspt FROM TexteEntete"; $result = mysql_query($query) or die(mysql_error()); while ($row = mysql_fetch_assoc($result)) { $texte1 = "". $row['TexteQspt'] .""; $texte = stripslashes($texte1); echo "<table border=0 width=510 height=10 >"; echo "<tr>"; echo "<td><span class=style1>$texte<br><br></span></td>"; echo "</tr>"; echo "</table>"; }


Merci
Modifié en dernier par therio7 le 06 janv. 2010, 04:38, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

05 janv. 2010, 23:56

tu ne devrais pas a avoir utilisé stripslash, regarde dans ta base de données voir comment sont les valeurs,
ta surement une directive GPC d'activé et tu as du faire un addslash qui doublera le tout a un moment

Petit nouveau ! | 4 Messages

06 janv. 2010, 00:06

C'est un site développé avec panneau de controle, j'ai utilisé le mysql_real_escape_string dans les formulaire d'entré de donnée. Est ce que je doit faire stripslashes lorsque je veut sortir l'info de la DB pour l'afficher le contenu a l'ecran?

ViPHP
ViPHP | 5462 Messages

06 janv. 2010, 00:10

ca depend si les magic_quote son activé ou pas, regarde dans ta base tu verras si tu te retrouve avec des : aujourd\\'hui c'est que ca vient de la, sinon ca viendra d'autre chose

fait un phpinfo(); et regarde si magic_quotes_gpc est sur On ou Off, (il devrait etre sur Off normalement)

Petit nouveau ! | 4 Messages

06 janv. 2010, 00:22

Ils sont a On sur le serveur.

Ce qui est contenu dans la base de donnée présentement est:
Veuillez prendre note qu\\\'il y aura une danse pour les élèves de la maternelle à la 8ème années, ce vendredi 8 janvier.

Et le output a l'ecran est
Veuillez prendre note qu\'il y aura une danse pour les élèves de la maternelle à la 8ème années, ce vendredi 8 janvier.

Pourquoi mon stripslashes enleve 2 slash et non les 3.

Ce que j'ai aussi remarquer c'Est que lorsque j'entre les donnée a partir de mon ordi, ca fonctionne bien... et quand j'utilise un autre ordi (portable), c'est a ce moment que les ' me donne des problemes. Est ce a cause des différences d'apostrophe?
Modifié en dernier par therio7 le 06 janv. 2010, 04:38, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

06 janv. 2010, 00:51

parce que stripslash ne suprimer pas les slash il surpimer le slash d'echapement

par exemple : aujourd'hui -> addslashes aujourd\'hui -> addslashes aujourd\\\'hui

si tu fais 2 fois, va falloir suprimer 2 fois


le probleme je te l'ai dis plus eux viens du magic_quote, qui fait un addslashes automatiquement, et toi par dessus tu rajoute mysql_real_escape_string

met la directive sur Off, soit dans le php.ini, sois par htaccess, soit avec ini_set

Petit nouveau ! | 4 Messages

06 janv. 2010, 00:58

Ok, merci beaucoup, ça m'éclaire mieux. Je vais vérifier tout ca.

ViPHP
AB
ViPHP | 5818 Messages

06 janv. 2010, 01:36

Oui ce sont tes données qui sont mal formatées dans ta bdd.
Cela vient de ton système d'enregistrement qui n'a pas vérifié si get_magic_quotes_gpc était activé ou non.

En fait la bonne méthode est d'appliquer la fonction stripslashes à la réception de ton formulaire si et uniquement si get_magic_quotes_gpc est activé et ensuite tu rentre les données protégées avec mysql_real_escape_string dans ta bdd.

La solution la plus portable - qui fonctionne quelque soit la configuration du serveur - est comme ci-dessous.
Exemple décomposé avec deux variables
function Verif_magicquotes ($chaine)
{
if (get_magic_quotes_gpc()) $chaine = stripslashes($chaine);

return $chaine;
}


if (isset($_POST))
{
    // Supprime les slashes uniquement en cas de besoin (si la config serveur get_magic_quotes_gpc est sur on)
    $pseudo = isset($_POST['pseudo']) ? Verif_magicquotes($_POST['pseudo']) : null;
    $pass = isset($_POST['pass']) ? Verif_magicquotes($_POST['pass']) : null;

    // Si $pseudo et $pass différents de null
    if(isset($pseudo,$pass))
    {
        // Connexion au serveur
        // ...
        // Connexion à la base
        // ...
   
         // Préparation des données pour les requêtes à l'aide de la fonction mysql_real_escape_string
         $nom = mysql_real_escape_string($pseudo);
         $password = mysql_real_escape_string($pass);
   
         // Requête 
         $insertion = "INSERT INTO matable(pseudo,pass) VALUES('".$nom."', '".$password."')";
        // suite code
    }
}
Exemple tiré de ce tuto

De cette façon, tu n'auras pas à te préocupper de la configuration get_magic_quotes_gpc du serveur.

ViPHP
ViPHP | 5462 Messages

06 janv. 2010, 01:50

dans le principe je suis d'accord avec toi AB, sauf que tout ca c'est un peu vieux, la bonne pratique voudrais que par default on deactive les magic_quote (qui sont d'ailleur en depreciate maintenant),
et surtout l'utiliser PDO, qui est bien plus facil d'acces au debutant que la vielles mysql (mysqli etant encore plus ignorer), la faute a tout les sites de debutant qui sont pas mis a jour depuis des années :(

sinon ton isset($_POST) sert a rien puisque POST est dans le GLOBAL par default (meme en CLI) ta valeur est toujour sur true,
plutot utilisé !empty($_POST)

ViPHP
AB
ViPHP | 5818 Messages

06 janv. 2010, 02:57

dans le principe je suis d'accord avec toi AB, sauf que tout ca c'est un peu vieux, la bonne pratique voudrais que par default on deactive les magic_quote (qui sont d'ailleur en depreciate maintenant),
et surtout l'utiliser PDO, qui est bien plus facil d'acces au debutant que la vielles mysql (mysqli etant encore plus ignorer), la faute a tout les sites de debutant qui sont pas mis a jour depuis des années :(
PDO plus facile d'accès au débutant ? Hum pas certain... C'est à conseillé bien entendu, mais changer le code d'un site existant et fonctionnel uniquement pour ça, c'est du grand luxe.

Pour le reste il faut bien assurer une compatibilité avec les anciens sites quels qu'ils soient (fait par des débutants ou non).
Il n'y a que les grosses structures qui emploient un informaticien à plein temps et peuvent mettre leur site aux dernière normes en "temps réel". Les autres n'en ont pas les moyens et pour eux le meilleur informaticien et le meilleur hébergeur sont ceux qui leur assure un bon fonctionnement sans besoin de fréquents réinvestissements. Donc fatalement tu trouveras de vieux codes sur le web et le fait qu'ils fonctionnent encore est bien la preuve que les responsables des normes et autres hébergeurs et informaticiens qui prévoient des éventuels changements de config du serveur, font leur travail correctement. Cela n'a rien à voir avec site de débutant ou non.
sinon ton isset($_POST) sert a rien puisque POST est dans le GLOBAL par default (meme en CLI) ta valeur est toujour sur true,
plutot utilisé !empty($_POST)
Oui je sais, j'ai hésité pour choisir un index puis oublié.