Jump to content
Sign in to follow this  
DarkStar

Confusion avec mySQL

Rate this topic

Recommended Posts

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

Edited by DarkStar

Share this post


Link to post
Share on other sites

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

Salut,

Sinon, il existe aussi une fonction appelée "mysql_real_escape_string"...

Share this post


Link to post
Share on other sites

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 by DarkStar

Share this post


Link to post
Share on other sites

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)

Share this post


Link to post
Share on other sites

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 by DarkStar

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×
×
  • Create New...