Page 1 sur 1
enregistrement du code html
Posté : 13 mai 2015, 13:46
par surfeur2
Bonjour,
J'ai des difficultés à enregistrer du code html dans une base de donnée.
je suis hébergé chez kreativemedia, ils mettent à disposition dans leur hébergement du php et une intergace graphique pour gérer une base de donnée drupal.
J'ai créer une table [
Contact] et un champ [
TexteContact]
Pour la mise à jour des données j'utilise ce code:
Code : Tout sélectionner
$textarea = $_POST[TexteContacts];
$requete = "UPDATE Contact SET TexteContact = '$textarea'";
$mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());
Si j'ajoute du texte cela fonctionne mais si je mets du code html alors
seluement une petite partie est enregistrée!!!!!
Le champ dans ma table est de type:
Longtext
merci d'avance pour vos réponses!
Re: enregistrement du code html
Posté : 13 mai 2015, 14:29
par Saian
Salut c'est bizarre, on aurait tendance à penser que le texte doit être trop long avec le code HTML et qu'il est donc tronqué, mais avec un longtext il devrait y avoir de la marge...
As tu essayé un echo $textarea pour t'assurer que tout le contenu est bien présent ?
Tu peux aussi faire un echo de la requête et la tester directement avec phpmyadmin.
Re: enregistrement du code html
Posté : 13 mai 2015, 14:57
par surfeur2
Je crois que j'ai trouvé si dans le texte ou dans le code il y a un " ' ", je sais plus comme ça s'appelle..., par exemple: l'insertion, là j'ai des problèmes, par contre si j'écris linsertion, là l'enregistrement se fait!
Re: enregistrement du code html
Posté : 13 mai 2015, 15:11
par Saian
Tu peux échapper les apostrophes avec addslashes ou tu peux les doubler avec un str_replace ' par '' (2 apostrophes et non pas un guillemet).
EDIT
Le problème vient du fait que dans la requête la valeur est délimitée par des apostrophes et donc quand un apostrophe est présent dans le contenu ça ferme la valeur.
SET field = 'L'insertion' // en principe provoque une erreur
SET field = 'L\'insertion' // ok
SET field = 'L''insertion' // ok, sera enregistré avec un seul apostrophe
Re: enregistrement du code html
Posté : 13 mai 2015, 15:26
par surfeur2
j'ai essayé avec : l \' insertion.
ça fonctionne une fois mais si on refait un update le problème revient.
Le texte html qui doit être modifié est inséré en html dans un textarea (formulaire) je sais pas trop comment m'y prendre: mettre une fonction php dans le textarea?
Re: enregistrement du code html
Posté : 13 mai 2015, 15:30
par Saian
Sur insert et update :
$textarea = str_replace("'", "''", $_POST[TexteContacts]);
Sinon tu peux utiliser la fonction mysql_real_escape_string.
http://php.net/manual/fr/function.mysql ... string.php
Je ne sais pas quelle librairie tu utilises pour faire les requêtes mais généralement elles proposent une méthodologie bien précise pour palier à ce genre de problème.
Re: enregistrement du code html
Posté : 13 mai 2015, 15:40
par surfeur2
Oui c'était la meilleure solution, ça fonctionne, merci beaucoup!!!
PS. s'il y a d'autres modif de remplacement utile à cause d'autres caractères à "problèmes" merci de me communiquer!
Re: enregistrement du code html
Posté : 13 mai 2015, 15:40
par surfeur2
J'ai utilisé ceci:
$textarea = str_replace("'", "''", $_POST[TexteContacts]);
ça marche

Re: enregistrement du code html
Posté : 13 mai 2015, 15:47
par Saian
Yes, après je suis pas sur que ce simple replace protège bien tes requêtes de toute forme d'injection SQL.
Mais je préfère laisser ça aux experts en la matière.
Re: enregistrement du code html
Posté : 13 mai 2015, 15:52
par tof73
c'est
http://php.net/manual/fr/mysqli.real-escape-string.php
qu'il faut utiliser pour se protéger complétement.
Re: enregistrement du code html
Posté : 13 mai 2015, 16:43
par surfeur2
Si j'ai bien compris je dois utiliser:
real_escape_string($textarea); avec du code mysql....
J'ai pas encore trouvé la bonne synthaxe.
Re: [RESOLU] enregistrement du code html
Posté : 15 mai 2015, 08:03
par surfeur2
ok, j'ai réussi!
$textarea = $_POST[TexteContacts];
$textarea = mysqli_real_escape_string($mysqli, $textarea);
$requete = "UPDATE Menu2 SET TexteContact = '$textarea'";
$mysqli->query($requete) or die ('Erreur '.$requete.' '.$mysqli->error());