Page 1 sur 1

PHP/HTML - Interpréter les balises HTML d'un textarea

Posté : 14 mars 2007, 16:55
par Coula
Bonjour,

Voila j'ai un petit probleme.
J'ai un formulaire avec un textarea, et du javascript qui me permet d'ajouter des balises type <i></i> , <b></b>
Ensuite j'enregistre le contenu du textarea dans ma BD
A la fin j'ai une derniere page dynamique qui m'affiche le contenu de ma BD, principalement le contenu du textarea du formulaire. Seulement, quand j'affiche le texte venant de ma BD, les balises ne sont pas interprétées, elles restent telles quelles et s'affichent comme du texte normal...

Comment pourrais-je remédier à ce probleme ?

Voila le code du textarea du formulaire :

Code : Tout sélectionner

<form method="post" action="page.php" name="formulaire"> Pour ajouter du contenu a votre page : <br><br><br> <input type="button" value="Lien" onClick="insertion('<link>', '</link>')"> <input type="button" value="Gras" onClick="insertion('<s>', '</s>')"> <input type="button" value="Italique" onClick="insertion('<i>', '</i>')"> <input type="button" value="Souligner" onClick="insertion('<u>', '</u>')"> <br> <label>Contenu<br /><textarea rows="10" cols="70" name="contenu"></textarea></label><br>
Voila le traitement du formulaire en PHP :
if(isset($_POST['contenu']))      $contenu=htmlentities(addslashes($_POST['contenu']));
else      $contenu="";

if(isset($_POST['alignement']))      $alignement=$_POST['alignement'];
else      $alignement="";

if(isset($_POST['position']))      $position=$_POST['position'];
else      $position="";

if(isset($_POST['positionref']))      $positionref=$_POST['positionref'];
else      $positionref="";

if(isset($_POST['type']))      $type=$_POST['type'];
else      $type="";

$sql = "INSERT INTO page(position, contenu, type, alignement, nompage)  
			VALUES('$position','".$contenu."','$type','$alignement','$page')";
			mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
			mysql_close();
			echo'<a href="select.php">Retour au formulaire</a>';
Et enfin la page qui affiche tout ca :
<?php
				include 'config.php';
				$para=mysql_query("SELECT * FROM page WHERE nompage='$page' ORDER BY position");		
				while ($par = mysql_fetch_array($para))
				{
					switch ($par['type'])
					{
						
						case "paragraphe" : echo'<div align='.$par['alignement'].' class="para">'; echo stripslashes(nl2br($par['contenu'])); echo '</div>'; break;
						case "soustitre" : echo'<div align='.$par['alignement'].' class="soustit">'; echo stripslashes(nl2br($par['contenu'])); echo '</div>'; break;
						case "titre" : echo'<div align='.$par['alignement'].' class="tit">'; echo stripslashes(nl2br($par['contenu'])); echo '</div>'; break;
						
					}
				}
				
				
?>

</body>
Merci d'avance

Posté : 14 mars 2007, 16:58
par jojolapine
l'erreur est là:
if(isset($_POST['contenu']))      $contenu=htmlentities(addslashes($_POST['contenu'])); 
tu transformes les < et > (notamment) en < et >, ce qui empèche leur interprétation par le navigateur...

Posté : 14 mars 2007, 17:01
par Coula
Ok merci, donc c'est le htmlentities ou le addslashes qu'il faut que j'enleve ?

Et ca ne genera pas pour la conservations des apostrophes, quote, sauts de page etc ?

Ou alors il faut peut etre rajouter la commande inverse dans le code qui affiche le contenu ?

Posté : 14 mars 2007, 17:07
par Crapaud
C'est le htmlentities qu'il faut que tu retires.

L'addslashes permettra d'échapper les caractères comme les apostrophes, tout ça, tout ça.

Par contre, fais bien attention à ne garder que les balises que tu veux. (avec la commande strip_tags().

Après avoir retirer le htmlentities, n'importe quel posteur pourrait insérer les balises <script></script> <iframe></iframe> et j'en passe :)

Ça pourrait devenir assez dérangeant.

Posté : 14 mars 2007, 18:02
par Coula
Merci ca marche niquel =)

Derniere question, connaissez vous un script pour un textarea, dans le meme principe que celui qui ajoute des balises <b></b> autour du texte sélectionner, mais qui crérait un lien dynamiquement avec <a href= ></a>

Par exemple, dans mon textarea je tape www.phpfrance.com, je le selectionne, j'appuie sur un bouton lien, et ca me le transforme en :

<a href="www.phpfrance.com">www.phpfrance.com</a>

Merci ;)

Posté : 14 mars 2007, 18:10
par Crapaud
En javascript, je crois que c'est la commande :
document.execCommand("CreateLink");

à tester ^^