Problème de backslash (encore...)

Eléphant du PHP | 50 Messages

28 mai 2009, 18:55

Bonjour,

J'ai encore un problème de débutant :roll:

En fait, quand je récupère une donnée en POST d'un input text où je met des "\" le serveur php me rajoute un "\" ce qui donne : "\\" (une sécurité je suppose). J'ai trouvé dans le php.ini la ligne qui gère ca, mais en fait j'en ai besoin dans d'autres pages et puis le serveur final où il y aura les page ne permet pas de changer ca.

Donc je suis résigné à le faire dans le script.

Donc j'ai eu l'idée de faire un stripslahes() de ma donnée ce qui enregistre la bonne valeur.
Sauf que, si par exemple j'en met deux dans mon input : "\\" , le serveur va m'en faire quatres "\\\\" et avec le stripslashes en aurait deux "\\" que j'enrengistre dans un fichier .ini.
Mais juste après je relis la donnée pour la mettre en value de mon input et là j'en ai plus qu'un, logique me direz vous, mais moi j'en veux deux ^^

Donc j'ai eu l'idée d'utiliser addslashes dans le echo de mon value.
Sauf que, ca marche quand y en a deux des "\", mais quand y'en a trois "\\\" bin il m'en affiche deux...
Bref, je me suis pris la tête pendant quelques heures avec ca..

Et là je crois que je n'ai plus assez de recul pour trouver une logique...

Je voulais donc savoir s'il existe d'autres fonctions de addslashes ou stripslashes pour faire ca mieux? ou d'autres techniques? si possible sans toucher au fichiers de config du serveur.

Dites moi si vous voulez un code pour expliquer car j'explique mal en général.

Merci si vous avez essayé de me comprendre et merci encore plus si vous essayez de me répondre!

Bonne soirée

ViPHP
ViPHP | 2287 Messages

28 mai 2009, 22:08

Salut,

une petite lecture qui me semble très adaptée pour toi : http://www.php.net/manual/fr/info.confi ... quotes-gpc

même si la configuration de php ne te séduit pas, désactiver cette directive dans ton php.ini serait une excellente idée, pour ton problème actuel autant que pour l'évolutivité de tes scripts. Tu y seras de toute façon contraint un jour prochain par l'évolution de php...
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 50 Messages

28 mai 2009, 22:25

Bonsoir et merci de votre réponse :)

C'est en effet cette ligne que j'avais mis à "Off" dans le php.ini.
Si c'est le seul moyen, j'essayerais de la couper sur le serveur final mais je ne vois pas du tout où sont les fichiers de config :s

C'est bizarre je croyais justement que c'était tout nouveau et que c'était pour remplacer les addslashes.
Du coup c'est l'inverse si j'ai bien compris c'est remplacé par des fonctions php?

Merci en tout cas :)

Bonne soirée

ViPHP
ViPHP | 2287 Messages

28 mai 2009, 23:14

Si c'est le seul moyen, j'essayerais de la couper sur le serveur final mais je ne vois pas du tout où sont les fichiers de config :s
Une petite commande bien utile pour trouver le fichier perdu, si ton serveur est sous Gnu/Linux :

Code : Tout sélectionner

$ locate php.ini
Ce n'est pas la seule façon de régler ton problème, mais vu le mal que tu te donnes à le décrire, je pense que tu as bien mérité de te simplifier la vie... non ? :D La désactivation de cette directive te permettra de stopper net ces \ qui sortent de partout. D'autant plus que le manuel php signale ce comportement comme obsolète et qu'il sera tout simplement absent des prochaines versions du langage... Tu n'es donc pas obligé de le gérer, tant bien que mal et avec de gros risques de migraine ( j'en ai attrapé une en te lisant ! :lol: )
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphant du PHP | 50 Messages

30 mai 2009, 10:03

Bonjour!

Alors merci de votre aide, je n'ai pas pu trouver le php.ini car c'est un Linux bizarre pour client léger donc les fichiers sont difficilement accessible, en lecture seule,la commande locate n'est pas installée, ni find etc. J'ai demander au monsieur qui gère ca de me le changer, j'espère qu'il n'oubliera pas.

En attendant j'ai rajouter ceci à mon fichier de mes fonctions:
http://postit.petitchevalroux.net/php/d ... hp.26.html
(merci google)

Je n'ai pas de serveur mutualisé mais je n'ai pas acces au php.ini donc c'est pareil.
Vous pensez que c'est une bonne méthode?

Et donc ca fonctionne, la donnée enregistrée est bien celle saisie (ce qui est la partie la plus importante) mais le problème c'est que après je la remet dans le value de mon champ texte avec un echo.
Et du coup s'il y a un slash "\" il ne l'affiche pas, s'il y en a deux, il en affiche un, s'il y'en a trois il en affiche deux, ...
J'ai donc mis un addslashes autour de ma variable pour l'affichage et ca marche bien quand je saisi un nombre de slash pair mais si c'est impair soit il affiche rien soit il en affiche deux :(

Vu que c'est la saisie d'un chemin windows pour un partage, en général on va en saisir deux et donc ca passe mais bon j'aimerais vraiment arriver à gérer tout les cas si c'est possible?


Merci de votre aide c'est vraiment gentil

(Désolé pour les migraines :lol: )