A voir également:
- Remplacer caracteres dans une boucle
- Caractères ascii - Guide
- Remplacer disque dur par ssd - Guide
- Remplacer dans word - Guide
- Caractères spéciaux clavier azerty - Guide
- Caractères spéciaux - Guide
2 réponses
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
Modifié par gravgun le 20/09/2014 à 10:14
Modifié par gravgun le 20/09/2014 à 10:14
'lut, arrrrrrrrgh le massacre...
Les fonctions mysql_* n'existent plus. Elles sont obsolètes dans PHP5.5 et supprimées dans PHP5.6, pour des raisons de sécurité et de design, qui avaient tendance a engendrer de très mauvais codes et de mauvaises pratiques. Surtout, l'injection SQL y était très propice si on ne faisait pas attention.
Par mauvaises pratiques, j'entends l'utilisation de mysql_real_escape_string qui finit par être confuse dans certains cas, ton utilisation de
Pour les injections SQL, c'est ton cas, donc potentiellement n'importe qui peut détruire ta base de donnée en visitant une de tes pages. Regarde ceci:
En soi la requête est bonne, mais tu insères
Faire des replace sur les résultats d'une requête ou avant de la faire n'est pas une solution. Si certains caractères t'embêtent, il y a de très fortes chances que plein d'autres te causent des ennuis du même genre, il faut donc résoudre ça, pas le cacher.
Pour cela, bien tu va devoir tout refaire... Nan je plaisante, mais prend le temps avant de continuer ton projet d'apprendre a te servir de PDO ou de mysqli (syntaxiquement plus proche de mysql_*), et particulièrement des requêtes préparées (tuto PDO, tuto mysqli), qui non seulement t'évitera des injections SQL mais t'évitera de vérifier/modifier l'entrée utilisateur dans tous les sens avant de faire ta requête.
Une fois ça fait, remplace-moi tout ce bazar de mysql_* obsolète.
Autrement, ton remplacement ne marche pas pour 2 raisons:
- tu ne te sers pas de str_replace comme il faut, je t'invite a relire sa page de doc (particulièrement l'utilisation des 2 premiers paramètres)
- ton titre avec les apostrophes supposément remplacés se nomme
from human import idiocy
del idiocy
Les fonctions mysql_* n'existent plus. Elles sont obsolètes dans PHP5.5 et supprimées dans PHP5.6, pour des raisons de sécurité et de design, qui avaient tendance a engendrer de très mauvais codes et de mauvaises pratiques. Surtout, l'injection SQL y était très propice si on ne faisait pas attention.
Par mauvaises pratiques, j'entends l'utilisation de mysql_real_escape_string qui finit par être confuse dans certains cas, ton utilisation de
die()qui est juste une pratique atroce, etc...
Pour les injections SQL, c'est ton cas, donc potentiellement n'importe qui peut détruire ta base de donnée en visitant une de tes pages. Regarde ceci:
mysql_query("select * from manga where type LIKE '$categorie' or cat like '%$categorie%' order by title")
En soi la requête est bonne, mais tu insères
$categoriedans la requête sans aucune vérification de format autre que son existence (
isset($categorie)).
Faire des replace sur les résultats d'une requête ou avant de la faire n'est pas une solution. Si certains caractères t'embêtent, il y a de très fortes chances que plein d'autres te causent des ennuis du même genre, il faut donc résoudre ça, pas le cacher.
Pour cela, bien tu va devoir tout refaire... Nan je plaisante, mais prend le temps avant de continuer ton projet d'apprendre a te servir de PDO ou de mysqli (syntaxiquement plus proche de mysql_*), et particulièrement des requêtes préparées (tuto PDO, tuto mysqli), qui non seulement t'évitera des injections SQL mais t'évitera de vérifier/modifier l'entrée utilisateur dans tous les sens avant de faire ta requête.
Une fois ça fait, remplace-moi tout ce bazar de mysql_* obsolète.
Autrement, ton remplacement ne marche pas pour 2 raisons:
- tu ne te sers pas de str_replace comme il faut, je t'invite a relire sa page de doc (particulièrement l'utilisation des 2 premiers paramètres)
- ton titre avec les apostrophes supposément remplacés se nomme
$titreclean, mais tu ne t'en sers pas dans ton echo.
from human import idiocy
del idiocy
mon serveur est sous php 4
Et pour la variable titreclean la elle n'est pas placee parce que je sais pas comment la placer
ou comme ca
ou comme ca
Et pour la variable titreclean la elle n'est pas placee parce que je sais pas comment la placer
ou comme ca
<a href='manga2.php?id2=$row[id]&$row[titreclean]'>$row[title]</b></a>
ou comme ca
<a href='manga2.php?id2=$row[id]&$titreclean'>$row[title]</b></a>
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
20 sept. 2014 à 23:55
20 sept. 2014 à 23:55
2e solution ;)
ElementW
Messages postés
4816
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 228
22 sept. 2014 à 21:53
22 sept. 2014 à 21:53
Désolé j'ai répondu un peu vite la dernière fois...
Je dit que tu te sers mal de
J'ai relu vite fait ton code, si je comprend bien tu veux juste faire en sorte que l'apostrophe ne gêne pas le morceau de balise HTML? Si c'est le cas il existe
Je dit que tu te sers mal de
str_replace, car vu que tes 2 tableaux de trouvaille/remplacement sont identiques, la fonction ne fait... rien. Si tu veux remplacer les apostrophes par des espaces, tu fais juste
str_replace("'", " ", $title).
J'ai relu vite fait ton code, si je comprend bien tu veux juste faire en sorte que l'apostrophe ne gêne pas le morceau de balise HTML? Si c'est le cas il existe
urlencodequi est la spécifiquement pour ça:
$titreclean = urlencode($title);; et le tour est joué ;)
Ca fonctionne mais pas en l'ecrivant comme toi, mais en l'ecrivant
Ps : dans mon str_replace je ne desirais pas seulement remplacer les apostrophe mais aussi remplacer les espaces d'ou la maniere dont je l'avait ecrit.
$titreclean = urlencode($row[title]);. Par contre ca remplace les espaces par des + c'est normal? Sinon tu as raison sur le fait que plutot que de cacher le probleme je devrais le traiter a la source. Je vais donc modifier l'insertion dans la base des infos. Je peut utiliser urlencode pour traiter mes variables avant l'envoi a la base ou je doit plutot utiliser htmlentities ou str_replace?
Ps : dans mon str_replace je ne desirais pas seulement remplacer les apostrophe mais aussi remplacer les espaces d'ou la maniere dont je l'avait ecrit.