5568 sujets

Sémantique web et HTML

Bonjour à tous et à toutes,

Je souhaiterais savoir si il existe une alternative à ce que je fais en ce moment.

Sur le site que je refais, je souhaite pouvoir modifier les contenu des pages en ligne.

J'ai donc insérer le contenu (tout le contenu centrale de mon site en code html) dans ma base de données.

Lorsque je souhaite modifier le contenu de ma page j'insère tout le code html dans le "textarea" qui me servira à récolter le nouveau code du contenu en html pour le renvoyer à ma base de donnée.

Mais le problème, comme mes données renvoyé dans le textarea est du code html, il est traité comme tel et me fausse toute ma mise en page (enfin juste le bas du textarea).

Pour éviter ce problème, j'ai pour l'instant mis les données retournées par ma base en commentaire html.

Mais le problème et que quand je vais renvoyer le code mis à jour, ma page sera entierement en commentaire html ce que je ne souhaite pas.

Voilà quelques bout de code (je ne peux vous donner de lien car il vous faudrais des droits administrateur).

Le textarea avec un des contenu avec les commentaire conditionnel :

<label for="le-sommaire">Sommaire de la page à modifier :</label><br />

<textarea name="som" rows="10" id="le-sommaire">

[#red]<!--[/#]<li><a href="#historique">Petit historique de l&rsquo;&eacute;quipe France</a></li>
<li><a href="#faire_partie_equipe">Pourquoi faire partie d&rsquo;une &eacute;quipe</a></li>
<li><a href="#interets_inscription">Les int&eacute;r&ecirc;ts d'une team</a></li>
<li><a href="#puis_je_faire_partie">Puis-je faire partie de l&rsquo;&eacute;quipe  France&nbsp;?</a></li>[#red]-->[/#]

</textarea>


J'ai mis en rouge les commentaire html qui me permette de ne pas traiter le contenu du textarea en tant qu'html

Merci pour vos propositions ou solutions
Modifié par Super_baloo8 (20 Dec 2006 - 22:45)
Je ne suis pas certain d'avoir saisi ton problème.

Si ton but est de pouvoir éditer ton code HTML dans une textarea, il faut bien entendu l'échapper, comme tu le ferais pour inclure du texte dans n'importe quel autre élément :
<p>&lt;strong&gt;Ceci est important&lt;/strong&gt;</p>

<textarea name="som" rows="10" id="le-sommaire">&lt;strong&gt;Ceci est important&lt;/strong&gt;</textarea>
Le validateur HTML le signale d'ailleurs à coup sûr.

Rien à voir avec le stockage de l'info donc, c'est au moment de l'affichage dans la textarea qu'il faut échapper le texte.
Modifié par Eldebaran (20 Dec 2006 - 22:21)
Vous ne m'avez pas compris loool (expression de je ne sais plus quel film)

Le but du jeu est simple.

J'ai du code html contenu en bdd.

Je souhaite modifier ce code html qui est contenu en bdd.

Je crée un formulaire qui contient un textarea qui contient le code html contenu en bdd.

Le problème est que si le code est sorti de but en blanc dans le textarea, le code contenu en bdd (html) et interprété par le navigateur ce que je ne souhaitent pas, puisque je souhaite le modifier dans le textarea (je souhaite changer le code html).

Voici le lien d'une page qui est concerné mais en ayant pas les droit d'accès il te sera impossible de voir le formulaire.

Voici le code qui génère le contenu d'un des textarea :

if(!empty($row[5]) and !empty($row[6]) )
		{		
		?>
			<label for="le-sommaire">Sommaire de la page à modifier :</label><br />
			<textarea name="som" rows="10" id="le-sommaire"><!--<?=$row[6]?>--></textarea><br />
		<?
		}


Si j'échappe le texte, il sera rendu échapper en BDD et donc échapper en ligne (mise à jour direct) voir code source php :

<?
include("var.php");
$host = "**";
$user = "***";
$password = "***";
$db = "***";
$connexion = mysql_connect($host,$user,$password) or die("Error while connecting to the database");
mysql_select_db($db) or die ("Impossible to use the database");

$req = "SELECT * FROM pages WHERE id=3";
$res = mysql_query($req);
$row = mysql_fetch_row($res);

$mot_cles=$row[1];
$bodyid=$row[2];
$local=$row[3];
$no_double_id=$row[4];
$sommaire=$row[5];
$som=$row[6];
$descriptif_de_la_page=$row[7];
$titre_h1=$row[8];
$titre_de_la_page=$row[9];

include("../../header.php");
if(empty($_SESSION['acces']))
{
}
elseif($_SESSION['acces'] == 1)
{
?>
<p><a href="?modifs=oui#formulaire"><img src="<?=$local?>style/defaut/modifier.jpg" alt="Modifier cette page" /></a></p>
<?
}
echo $row[10];
if($_SESSION['acces'] == 1 and $_GET['modifs'] == 'oui')
{
?>
<div id="formulaire">
	
	<form action="?modifs=maj" method="post">
	
		<fieldset class="must" title="OBLIGATOIRE">
	
		<legend>Modifications</legend>
		
			<label for="titre_de_la_page">Titre de la fenêtre :</label><br /><input type="text" size="65" name="titre_de_la_page" id="titre_de_la_page" value="<?=$row[9]?>" /><br />
			
			<label for="descriptif_de_la_page">Descriptif de la page :</label><br /><input type="nom" size="65" name="descriptif_de_la_page" id="descriptif_de_la_page" value="<?=$row[7]?>" /><br />
			
			<label for="titre_h1">Grand Titre sur la page :</label><br /><input type="text" size="65" name="titre_h1" id="titre_h1" value="<?=$row[8]?>" /><br />
		<?
		if(!empty($row[5]) and !empty($row[6]) )
		{		
		?>
			<label for="le-sommaire">Sommaire de la page à modifier :</label><br />
			<textarea name="som" rows="10" id="le-sommaire"><!--<?=$row[6]?>--></textarea><br />
		<?
		}
		?>
			<label for="le-contenu">Contenu de la page à modifier :</label><br />
			<textarea name="contenu" rows="10" id="le-contenu"><!--<?=$row[10]?>--></textarea><br /> 
							
		</fieldset>
					
		<p><input class="bouton" type="submit" value="Mettre à jour" /></p>
	
</form>

</div>
<?
}
include("../../footer.php");
?>

Modifié par Super_baloo8 (20 Dec 2006 - 22:30)
Heu non...

Il est bien évident que le code rentré échappé dans la textarea sera envoyé non échappé au serveur. Il faut bien que tu comprennes que le fait d'échapper ton texte est juste un moyen de faire comprendre au navigateur qu'il ne doit pas interpréter les caractères en question comme du balisage ou des entités. Une fois que c'est fait, le navigateur remplit la textarea avec le texte non échappé.
Si mon code (qui est écris automatiquement dans le textarea) est échappé donc le navigateur ne le vois pas. Ca veut dire qu'il faut le faire en amont, lorsque je rentre pour la première fois les donnée dans la bdd.

Etant donné que le code qui est dans la bdd est celui qui s'affiche à l'écran sur la page, je n'aurais plus rien.

Je vais essayer, dans l'envoie du formulaire, d'enlever le nombre de caractere necessaire en début et fin de contenu ainsi je n'aurai plus ce problème.
Je ne comprends pas.

Il suffit d'écrire
<textarea name="som" rows="10" id="le-sommaire"><?= htmlspecialchars($row[6], ENT_NOQUOTES) ?></texterea>
En tout cas, l'un de nous n'a rien compris. Smiley cligne
Modifié par Eldebaran (20 Dec 2006 - 22:45)
Moi aussi je ne comprennais pas. Maintenant impeccable, merci Eldebaran !

Edit: C'est moi qui n'ai rien compris à ce que tu me disais. Et là je comprends que le code est échapper pour l'affichage, mais en renvoie, il ne renverra que ce qui est contenu dans le textarea et donc c'est nikel Smiley cligne

Un GRAND MERCI !
Modifié par Super_baloo8 (20 Dec 2006 - 22:47)
Salut !
J'avais le même problème mais sauf que j'éditer mes fichiers PHP (en ligne, comme toi).
J'utiliser une fonction pour lire le fichier PHP mais ça bloquait au niveau des textareas, évidement Smiley smile

Mon frère m'a indiqué une autre solution avec un fopen() et une fonction str_replace() qui changerai juste les <textarea>.

Je reviendrais poster quand je recommencerais le developpement du site vistalive.fr.

Bonne continuation.

PS : Je rappelle que mettre le contenu de sa page dans une BDD est assez dangereux dans le cas de piratage de ta BDD ou de plantage du serveur Smiley smile Le fichiers sont plus sur Smiley cligne
E²xiT a écrit :
Mon frère m'a indiqué une autre solution avec un fopen() et une fonction str_replace() qui changerai juste les <textarea>.
Il est largement préférable d'utiliser htmlspecialchars plutôt que str_replace pour échapper du (X)HTML.

Quels sont tes arguments concernant le fait que les fichiers sont plus sûrs que la base de données ?
Modifié par Eldebaran (21 Dec 2006 - 08:40)
Pour la sécurité, déjà que c'est embetant chez mon hebergeur (1and1) pour allez sur la base de donnée, je pense que c'est quasiment impossible d'aller leur pirater leur bdd accessible uniquement depuis leur serveur.

Tout est possible, mais je ne verrais pas l'interet qu'un pirate aurais a venir pirater ce site là qui ne fait pas d'argent et au contraire se bas contre une cause, qui me semble t'il est noble.
bonjour.
pour ce genre de traitement, il est préférable d'utiliser un RTE (Rich Text Editor) comme TinyMCE ou FCKEditor.

Ca te permet d'éditer directement ton contenu (mettre du gras etc). Tu as aussi la possibilité d'attaquer le code HTML grâce à ces outils.

http://tinymce.moxiecode.com/

Selon moi, c'est la solution la plus pratique dans ton cas. Smiley cligne
Zeke a écrit :
Selon moi, c'est la solution la plus pratique dans ton cas. Smiley cligne
Bof... Si l'éditeur maîtrise le HTML, il est à mon avis largement préférable de lui laisser modifier le code. Comment croire que l'on peut obtenir du code propre avec un WYSIWYG ?
Zeke a écrit :
bonjour.
pour ce genre de traitement, il est préférable d'utiliser un RTE (Rich Text Editor) comme TinyMCE ou FCKEditor.

Ca te permet d'éditer directement ton contenu (mettre du gras etc). Tu as aussi la possibilité d'attaquer le code HTML grâce à ces outils.

http://tinymce.moxiecode.com/

Selon moi, c'est la solution la plus pratique dans ton cas. Smiley cligne


Très interressant comme solution Smiley cligne Merci pour le lien.

Personnellement, il n'y aurais que moi qui modifie ou crée des pages, je n'utiliserais pas d'éditeur WYSIWYG, mais comme c'est un futur site communautaire, je ne peux pas me le permettre malheureusement, ca serais tellement bien si tout le monde savais au moins les bases du html Smiley lol