[INSERTION CARACTÈRES SPÉCIAUX BDD]

Eléphant du PHP | 160 Messages

20 mars 2017, 15:04

Bonjour à tous,

J'aimerais enregistrer des balises <b><u> et <i> dans une base de données mais je n'y parviens pas..

En effet, dans l'élaboration de mon éditeur wysiwyg, lorsque je choisi de mettre mon texte en gras par exemple, il me suffit d'appuyer sur un span adéquat pour voir mon code se transformer -et ce, même dans la console (on peut y apercevoir les balises <b></b> qui entourent mon texte, et ces dernières disparaissent lorsque je re-clique sur le même span).

Le problème est que je n'arrive pas à enregistrer ces balises dans ma bdd... J'avais pensé l'enregistrer dans une variable et appliquer une propriété style de type font-weight (pour l'exemple avec bold) prenant justement pour valeur, la variable définie à l'effet prévu, mais cela me semble moins dynamique de sorte que mon client pourrait ne vouloir que sélectionner une bride de texte et non pas le texte entièrement.

Code : Tout sélectionner

<?php if(isset($_POST['fipublier'])){ //VARIABLES $lien = mysqli_connect('localhost','*******','********','*******'); mysqli_set_charset($lien,"utf8"); $fiTitreItem = trim(htmlentities(mysqli_real_escape_string($lien,$_POST['titreItem']))); $fiAuteurItem = "Lorie"; $fiSlugItem = str_replace(' ', '-', mb_strtolower($fiTitreItem)); $fiSizePara = $_POST['sizePara']; $fiColorPara = $_POST['colorPara']; $fiAlignPara = $_POST['alignPara']; $array_1 = array("'",'"'); $array_2 = array("\'",'\"'); $contenu = strip_tags($_POST['contenuItem'],'<b><i><u>'); $contenuReplace = str_replace($array_1, $array_2, $contenu); $fiContenuItem = "<p style=\"text-align:$fiAlignPara; color:$fiColorPara; font-size:$fiSizePara; \">$contenuReplace</p>"; $fiTypeItem = $_POST['typePara']; $fiCreated = date('Y-m-d h:i:s'); $req = "INSERT INTO ls_posts VALUES(NULL,'$fiTitreItem','$fiAuteurItem','$fiSlugItem','$fiContenuItem','$fiTypeItem','$fiCreated');"; $res = mysqli_query($lien,$req); if(!$res){ echo "Erreur SQL : $req <br>".mysqli_error($lien); } else{ echo "Ajout réussi"; } mysqli_close($lien); } ?>
Le soucis se pose au niveau de la fonction strip_tags().
Pourtant je récupère bien le html dans un input hidden, et non pas le texte seulement :

Code : Tout sélectionner

<script> $('document').ready(function(){ $('#btnPublier').click(function(){ var contenu = $(".editor").html(); $("#recupText").val(contenu); }); }); </script>
Pouvez-vous m'aider s'il vous plaît ?

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

20 mars 2017, 17:13

salut,

strip_tag semble correctement utilisée.

tu as quoi dans $_POST['contenuItem'] ? (var_dump($_POST); )
$array_1 = array("'",'"');
        $array_2 = array("\'",'\"');
        $contenuReplace = str_replace($array_1, $array_2, $contenu);
c'est inutile, utilise mysqli_real_escape_string (comme pour le titre).

Ceci ne devrait pas être mis en base mais fait à l'affichage
$fiContenuItem = "<p style=\"text-align:$fiAlignPara; color:$fiColorPara; font-size:$fiSizePara; \">$contenuReplace</p>";

(imagine le bordel quand tu va vouloir modifier ta charte graphique et que tu auras 200 lignes dans cette table, ou beaucoup plus).

@+
Il en faut peu pour être heureux ......