DarkStar Posté 26 Novembre 2006 Posté 26 Novembre 2006 (modifié) Bonjour à tous, j'ai programmé un Livre d'Or Mais je rencontre plein de soucis ! Lorsque que je laisse un message, le formulaire est soumis et ajoute une ligne dans une table mySQL parmi ses colonnes, celle du message, format text (65535). Mais pour éviter les injections SQL et les balises html j'ai voulu remplacer < par <, < par &qt; et " par ". Comment remplacer aussi l'apostrophe ' car il n'y a pas d'équivalent en codage utf-8, et les retours à la ligne par le clavier (touche entrée ) peuvent pas êttre remplacés par <br />. Je me suis emmêlé les pinceaux dans ce script et qqn pourrait-il m'éclairer pour faire toutes ces fonctions à la fois sans aucun conflit ? Voilà mon script, vous pouvez le tester et reporter les failles que vous trouvez sur ce forum http://ados-life.titi-serveur.net/01/index...ESC&start=0 les messages présents sont des tests lol Modifié 26 Novembre 2006 par DarkStar
Harry_20 Posté 26 Novembre 2006 Posté 26 Novembre 2006 Bonjour, Personnellement, j'utiliserai l'instruction PHP striptags() qui permet de nettoyer le code HTML dans le texte renvoyé par le formulaire et j'encoderais le texte tel qu'encodé au clavier dans la base de données. Ensuite, lors de l'affichage de la page, j'utiliserais l'instruction htmlentities() pour adapter le texte en code HTML. Bonne continuation
Bourinho Posté 26 Novembre 2006 Posté 26 Novembre 2006 Salut, Sinon, il existe aussi une fonction appelée "mysql_real_escape_string"...
DarkStar Posté 27 Novembre 2006 Auteur Posté 27 Novembre 2006 (modifié) Merci de votra aide Finalement j'ai opté pour la fonction str_replace. Comme ca je maitrise bien les transformations (j'ai fait plusieurs essais et j'ai vérifié le contenu de ma table pour vérifier que la fonction transforme correctement le texte posté par le formulaire.) Donc grâce à str_replace, j'ai fait les transformations suivantes : POST du formulaire (je poste ceci) Votre texte <texte> "texte" 'texte' Votre texte ENREGISTREMENT mySQL (ça écrit ceci dans la base de données) Votre texte <texte> "texte" 'texte' Votre texte Renvoi des données sur la page du Livre d'Or (HTML 4.01 Transitional, encodage ISO 8859-1) On voit ça (source html): Votre texte <texte> "texte" 'texte' <br><br>Votre texte On voit ça (visible): Votre texte <texte> "texte" 'texte'Votre texte Voilà, j'espère que ca servira pour d'autres qui veulent faire un formulaire Modifié 27 Novembre 2006 par DarkStar
petit-ourson Posté 27 Novembre 2006 Posté 27 Novembre 2006 J'ai horreur d'avoir des données dans ma base de données qui contiennent des entités html comme ", > < etc etc. Ca pose toujours des soucis quand on veut faire un autre affichage que du html. Enfin voilà je voulais vous le dire ;o)
DarkStar Posté 27 Novembre 2006 Auteur Posté 27 Novembre 2006 (modifié) j'ai pas trouvé d'autres moyens pour éviter les injctions sql. Les fonctions add_shashes() ou mysql_real_escape_string() je les maitrise mal et après j'arrive pas à faire afficher correctement "mon texte" au lieu de \"mon texte\" lorsque je consulte le livre d'or À moins que j'ai pas trouvé l'astuce Modifié 27 Novembre 2006 par DarkStar
baboon Posté 27 Novembre 2006 Posté 27 Novembre 2006 Tout à fait d'accord avec Petit Ourson.... Tu dois utiliser addslashes() pour echapper tous les caractères comme les guillemets simples ('), guillemets doubles ("), anti-slash (\). //récupération des post ou get formulairesif (!get_magic_quotes_gpc()) // si les magicquotes ne sont pas activées sur le serveur { $id = addslashes($_POST['id']); $texte1 = addslashes($_POST['texte1']); $texte2 = addslashes($_POST['texte2']); }else { $id = $_POST['id']; $texte1 = $_POST['texte1']; $texte2 = $_POST['texte2'];} // inserer ici la requete d'ecriture dans la base : exemple avec insert$query = "insert into ma_table values('$id','$texte1','$texte2')";$db_link = mysql_connect("$machine","$user","$password");$result = mysql_db_query("$base","$query",$db_link) or die ("erreur insertion dans ma_table");mysql_close($db_link);
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant