[RESOLU] enregistrement du code html

Eléphanteau du PHP | 38 Messages

13 mai 2015, 13:46

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!

Avatar du membre
Mammouth du PHP | 1609 Messages

13 mai 2015, 14:29

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.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 38 Messages

13 mai 2015, 14:57

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!

Avatar du membre
Mammouth du PHP | 1609 Messages

13 mai 2015, 15:11

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
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 38 Messages

13 mai 2015, 15:26

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?

Avatar du membre
Mammouth du PHP | 1609 Messages

13 mai 2015, 15:30

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.
Développeur web depuis + de 20 ans

Eléphanteau du PHP | 38 Messages

13 mai 2015, 15:40

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!

Eléphanteau du PHP | 38 Messages

13 mai 2015, 15:40

J'ai utilisé ceci:

$textarea = str_replace("'", "''", $_POST[TexteContacts]);

ça marche :-)

Avatar du membre
Mammouth du PHP | 1609 Messages

13 mai 2015, 15:47

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.
Développeur web depuis + de 20 ans

Mammouth du PHP | 688 Messages

13 mai 2015, 15:52

c'est http://php.net/manual/fr/mysqli.real-escape-string.php
qu'il faut utiliser pour se protéger complétement.

Eléphanteau du PHP | 38 Messages

13 mai 2015, 16:43

Si j'ai bien compris je dois utiliser:

real_escape_string($textarea); avec du code mysql....

J'ai pas encore trouvé la bonne synthaxe.

Eléphanteau du PHP | 38 Messages

15 mai 2015, 08:03

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