Addslashes et stripslashes..???
Résolu
pnichols
-
pnichols -
pnichols -
A voir également:
- Addslashes php
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Retour a la ligne php - Forum Webmastering
- Alert php - Forum PHP
- Retour a la ligne php ✓ - Forum PHP
2 réponses
"échapper" les caractères spéciaux des chaînes n'est nécessaire que pour les requêtes qui contiennent directement ta chaîne elle-même ( la variable PHP, donc par exemple à l'insertion ou à la modification de données). c'est là qu'elles peuvent interférer avec la requête (par exemple en la fermant plus tôt à cause de quotes dans la chaîne).
les backslashes ne sont donc plus nécessaires une fois tes données dans la base, et d'ailleurs MySQL repasse une fois sur ta chaîne pour enlever les caractères d'échappement des caractères qui ont été échappés : maintenant que tes données sont en base, elles peuvent être stockées telles quelles, prêtes à être rappelées.
quand tu les rappelles, par exemple avec un select, tu n'as donc pas besoin de renlever les slashes, mysql s'en est déjà occupé.
par contre je n'ai pas très bien compris ta dernière question,, mais je vais quand même essayer : mysql ne traite que les backslashes servant à échapper un caractère, donc " L\'ordinateur " devient " L'ordinateur" en SQL mais " L\\\'ordinateur " devient " L\\'ordinateur ", seul le backslash servant à l'échappement est "nettoyé"
enfin la meilleure pratique pour échapper tes chaînes en vue de leur insertion en base est d'utiliser plutôt la fonction mysql_real_escape_string (voir la doc ici : https://www.php.net/manual/fr/function.mysql-real-escape-string.php à la place de addslashes
addslashes est en fait une méthode limitée pour échapper les chaînes, et ne prend en compte que les spécificités du langage PHP, pas celles de ta base, et laisse donc ta chaîne vulnérable à certaines attaques (par exemple, addslashes n'échappe pas les caractères \n et \r ...)
les backslashes ne sont donc plus nécessaires une fois tes données dans la base, et d'ailleurs MySQL repasse une fois sur ta chaîne pour enlever les caractères d'échappement des caractères qui ont été échappés : maintenant que tes données sont en base, elles peuvent être stockées telles quelles, prêtes à être rappelées.
quand tu les rappelles, par exemple avec un select, tu n'as donc pas besoin de renlever les slashes, mysql s'en est déjà occupé.
par contre je n'ai pas très bien compris ta dernière question,, mais je vais quand même essayer : mysql ne traite que les backslashes servant à échapper un caractère, donc " L\'ordinateur " devient " L'ordinateur" en SQL mais " L\\\'ordinateur " devient " L\\'ordinateur ", seul le backslash servant à l'échappement est "nettoyé"
enfin la meilleure pratique pour échapper tes chaînes en vue de leur insertion en base est d'utiliser plutôt la fonction mysql_real_escape_string (voir la doc ici : https://www.php.net/manual/fr/function.mysql-real-escape-string.php à la place de addslashes
addslashes est en fait une méthode limitée pour échapper les chaînes, et ne prend en compte que les spécificités du langage PHP, pas celles de ta base, et laisse donc ta chaîne vulnérable à certaines attaques (par exemple, addslashes n'échappe pas les caractères \n et \r ...)
Bon bien merci, ça m'éclaire pas mal sur le sujet...
J'avoue que même après relecture, ma dernière question est pas très clair, mais c'est pas grave.
Merci, pis à l'avenir je vais regarder comment implémenter mysql_real_escape_string parce qu'effectivement, ça semble faire unanimité sur le web quant à sa supériorité à addslashes...
J'avoue que même après relecture, ma dernière question est pas très clair, mais c'est pas grave.
Merci, pis à l'avenir je vais regarder comment implémenter mysql_real_escape_string parce qu'effectivement, ça semble faire unanimité sur le web quant à sa supériorité à addslashes...