DarkStar 0 Report post Posted November 26, 2006 (edited) 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 Edited November 26, 2006 by DarkStar Share this post Link to post Share on other sites
Harry_20 0 Report post Posted November 26, 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 Share this post Link to post Share on other sites
Bourinho 0 Report post Posted November 26, 2006 Salut, Sinon, il existe aussi une fonction appelée "mysql_real_escape_string"... Share this post Link to post Share on other sites
DarkStar 0 Report post Posted November 27, 2006 (edited) 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 Edited November 27, 2006 by DarkStar Share this post Link to post Share on other sites
petit-ourson 0 Report post Posted November 27, 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) Share this post Link to post Share on other sites
DarkStar 0 Report post Posted November 27, 2006 (edited) 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 Edited November 27, 2006 by DarkStar Share this post Link to post Share on other sites
baboon 0 Report post Posted November 27, 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); Share this post Link to post Share on other sites