eagledark
Messages postés18Date d'inscriptionmercredi 15 décembre 2010StatutMembreDernière intervention17 janvier 2013
-
16 janv. 2013 à 19:39
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
19 janv. 2013 à 00:21
Bonjour à tous,
Après quelques recherches sur Google, je n'ai pas trouvé de réponses à ma question.
Je m'explique :
Je voudrais récupérer la valeur d'un textarea afin d'insérer celle-ci dans ma base de donnée mysql.
La récupération se fait donc en JavaScript comme ceci :
//txtCtMsg étant l'id de mon textarea
var msg = document.getElementById("txtCtMsg").value;
Puis j'envoi msg vers une page .php (à l'aide d'AJAX) pour insérer cette valeur dans ma base de données, voci ce qui se passe dans cette page :
if (isset($_GET['msg'])){
mysql_query("INSERT INTO message (MSG) VALUES('".$_GET['msg']."')");
}
Le problème est que $_GET['msg'] ne contient pas les sauts de ligne effectués dans le textarea, même pas de \n...
Par exemple :
[i]Bonjour
Je m'appelle Philippe/i
Me retourne :
BonjourJe m'appelle Philippe
J'ai essayé d'utiliser nblr2($_GET['msg']) mais sans effet car la chaîne ne contient pas de \n
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 17 janv. 2013 à 00:00
Ce n'est pas plutôt la fonction nl2br() que tu utilises ? Où est-elle instanciée (pas vu) ?
Ca me semble bizarre qu'ils disparaissent ainsi...
Ce qui est plus probable, c'est que tu ne les voies pas à l'affichage (car l'HTML ignore les sauts de lignes).
[c'est l'erreur typique du débutant en développement Web qui ne s'y connait pas encore trop en HTML] Mais si tu as remplacé \n par [i]
/i, il ne devrait pas y avoir de problème...
Point de vue sécurité
Attention aux injections SQL ! Voici déjà une requête un peu moins risquée :
mysql_query("INSERT INTO message (MSG) VALUES('".mysql_real_escape($_GET['msg'])."')");
Ton script est aussi sensible aux XSS, càd la possibilité d'insérer par exemple une balise <SCRIPT>...
Tu peux par exemple utiliser htmlentities() pour éviter ces problèmes :
<?php
if (isset($_GET['msg'])){
$msg = htmlentities(mysql_real_escape($_GET['msg']));
mysql_query("INSERT INTO message(MSG) VALUES('$msg');");
}
?>
En espérant que ça t'aura aidé
VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
eagledark
Messages postés18Date d'inscriptionmercredi 15 décembre 2010StatutMembreDernière intervention17 janvier 20132 17 janv. 2013 à 00:16
Merci de ta réponse ghuysmans99.
Une erreur toute bête car je testais ma variable dans un alert() et du coup je ne voyais pas les \n...
Du coup avant d'envoyer sur la page php je fais un replace(/\n/g, "
") dans le js pour remplacer les \n par le
.
J'allais oublié l'injection SQL encore une fois, merci de me l'avoir rappelé, heureusement que pour l'instant je travaille en local.
Concrètement, la fonction htmlentities permet de remplacer les balises html par des caractères spéciaux du genre , mais du coup j'aurai des caractères de ce type dans ma BDD? Ca m'obligerai à faire un html_entity_decode() à chaque récupération de données?
TychoBrahe
Messages postés1309Date d'inscriptionsamedi 31 janvier 2009StatutMembreDernière intervention 5 juin 201312 18 janv. 2013 à 17:39
Salut,
Juste une petite intervention au sujet de l'utilisation des fonctions mysql_* : il ne faut pas les utiliser ! Elles sont obsolètes et seront supprimées dans le futur. Je vous laisse lire cet article expliquant plus en détail le pourquoi du comment : Arrêtez d'utiliser les fonctions mysql_*() ! Bref, songez à cela avant qu'il ne soit trop tard.
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 19 janv. 2013 à 00:21
Non, tu ne dois surtout pas faire ça : si tu le faisais, ça rendrait la sécurité inutile. Le but est de considérer tout ce que l'utilisateur entre comme du texte pur... Une fois codé, le symbole < ne sera pas interprété comme un début de balise.
VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question