Page 1 sur 1

Problème avec formulaire et slashes

Posté : 04 juin 2011, 20:19
par morrissfr
Bonjour à tous,
J'ai un formulaire avec une entrée "text" : <input type="text" name="nom" size="20">
je récupère "nom" à la page php suivante par $nom = $_POST['nom']; Évidemment mon texte est plein de slashes (les ' et " etc), ça, ça ne me pose pas problème je peux les enlever avec stripslashes, mais je suis obligé d'envoyer à la page suivante ce $nom (avec ou sans ses slashes) avec un autre formulaire : <input type='hidden' name='nom' value='$nom'> et là commence le pb, à la page suivante récupération avec encore $nom = $_POST['nom']; pour le récupérer et l'affichage s'arrête au premier double slash. J'ai essayer d'enlever les slashes à toutes las pages mais rien n'y fait.... Je ne comprends pas .... je suis trop vieux peut-être...
Ou alors peut-on envoyer le tableau $_POST à la page suivante directement?
merci de votre réponse!
Morriss

Re: Problème avec formulaire et slashes

Posté : 04 juin 2011, 20:44
par Ryle
Le plus facile pour conserver des données d'une page à une autre, c'est de les mettre en session :)

Re: Problème avec formulaire et slashes

Posté : 04 juin 2011, 22:08
par morrissfr
Salut Ryle! Mouais... je suis en train de lorgner sur les session, ça ne semble pas trop compliqué sauf que dans mon cas il y a 2 upload d'image au milieu. Comme je peux pas tout apprendre à la fois et que le temps me manque un peu je vais quand même essayer de régler ce pb de slashes, ne serait-ce que pour comprendre.... As-tu, hors sessions, une quelconque idée?
merci
Morris

Re: Problème avec formulaire et slashes

Posté : 05 juin 2011, 01:40
par Ryle
En fait, ton problème de slash vient très probablement de la directive magic_quotes qui doit être active sur ton serveur. Cette directive indique à php d'ajouter un slash aux apostrophes, guillemets et slash de toutes les données qui sont envoyées en get ou en post...

Ca te permet d'insérer directement tes variables dans une requête mysql, mais c'est pas toujours terrible... donc tu peux soit modifier ce paramètre dans le php.ini (attention par contre, il faudra du coup t'assurer que tes variables sont bien protégées si tu les utilises dans tes requêtes sql) ou utiliser un stripslashes() pour retirer les slash que php ajoute (tu peux le faire sur tout le tableau $_POST avec un array_map() par exemple)

Re: Problème avec formulaire et slashes

Posté : 05 juin 2011, 08:49
par morrissfr
c'est ce que j'ai fait...
si $nom contient : avec "ça" je m'emmerde :
<input type="text" name="nom" value="$nom"> me donne à la page suivante:
avec \"ça\" je m\'emmerde
puis je fais, pour aller à l'autre page
$nom=stripslashes($nom) et c'est bon les slashes sont enlevés puis:
<input type='hidden' name='nom' value='$nom'>"; et j'obtiens : au final : avec \\\"ça\\\" je m\\ Y a un sérieux problème avec l'apostrophe que je ne comprends pas....

J'ai même essayé de mettre en début de page : ini_set('magic_quotes_gpc', 0); sans résultat
Voilà! Résumé:
$nom => avec "ça" je m'emmerde
<input type="text" name="nom" value="$nom"> => $nom = $_POST['nom']; => avec \"ça\" je m\'emmerde
$nom=stripslashes($nom) => avec \"ça\" je m\'emmerde
<input type='hidden' name='nom' value='$nom'> => $nom = $_POST['nom']; => avec \"ça\" je m\

Re: Problème avec formulaire et slashes

Posté : 05 juin 2011, 10:51
par moogli
salut,

ton second affichage m'indique que php protège et le guillemet et le \ devant d'ou les 3 au finale (\" devient \\ + \" => \\\").

Je te donnerais le même conseil que ryle utilise les sessions pour garder les infos de ton formulaire d'une page a l'autre tu t'affranchira de se soucis et tu sera certain que les données ne seront pas modifié ;)

un p'tit extrait de la doc
La directive magic_quotes_gpc ne peut être désactivée qu'au niveau du système, et non pas à l'exécution. En d'autres termes, utiliser ini_set() n'est pas possible.
(ce qui explique que les magic_quote fonctionne toujours ;) )

une solution "à l'execution" est indiquée la => http://www.php.net/manual/fr/security.m ... abling.php (c'est globalement la même chose que ce qu'indique ryle).

d'après la doc (plus ce bout la) la directive magic_quote_GPc à une "porté" PHP_INI_PERDIR ce qui signifique :
PHP_INI_SYSTEM 4 La directive peut être modifiée dans les fichiers php.ini ou httpd.conf
donc toujours d'après la doc avec un .htaccess avec dedans
php_flag magic_quote_gpc off

tu peux désactiver les magic quote, si bien entendu php est utilisé en tant que module d'apache et que tu les privilèges "AllowOverride Options" ou "AllowOverride All"....

un peu de lecture sur le sujet http://www.php.net/manual/fr/security.magicquotes.php

Fait attention aussi au paramètre magic_quote_runtime qui fait la même chose mais avec les données issue de base, fichier etc.

@+

Re: Problème avec formulaire et slashes

Posté : 05 juin 2011, 11:59
par Ryle
Il y a deux choses à prendre en compte : ton problème de slashes (qui devrait être résolu en faisant un stripslashes), et le fait de repasser la chaine en html dans un input.

En effet, si ta chaine contient des apostrophes ou des guillemets, il faut les protéger dans ton formulaire. Cependant, on ne protège pas en html comme on protège en php ou en javascript. Pour protéger une chaine en html il faut convertir les éléments qu'elle contient en entités html ( la guillemet devient ", etc.). Pour cela tu peux utiliser htmlentities()

En gros, ton traitement devrait être :

Code : Tout sélectionner

Récupération de la variable SI magic quotes activés sur le serveur Supprimer les slashes ajoutés (stripslashes) FIN SI Converti la valeur en entité html (htmlentities)

Re: Problème avec formulaire et slashes

Posté : 06 juin 2011, 10:34
par morrissfr
Merci moogli pour ce long et brillant exposé! J'abandonne l'idée du magic_quote vu qu'elle semble inopérante chez moi. Je vais suivre la deuxième idée de Kyle: l'emploi de htmlentities() en attendant d'apprendre la manipulation des cessions
Merci à tous deux pour votre patience et votre clarté surtout!
Amicalement