Aller au contenu

Confusion avec mySQL


Sujets conseillés

Posté (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 &lt;, < par &qt; et " par &quot;.

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é par DarkStar
Posté

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 ;)

Posté (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é par DarkStar
Posté

J'ai horreur d'avoir des données dans ma base de données qui contiennent des entités html comme &quot, > < 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)

Posté (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é par DarkStar
Posté

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 formulaires
if (!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);

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...