Insertion image texarea => problème output

Eléphant du PHP | 428 Messages

06 avr. 2010, 15:51

Bonjour,

J'ai réalisé un textarea avec tinyMCE.
Quand j'insère une image dans le textarea puis que je soumet le formulaire, je récupère les données textarea via un simple $_POST['description'].

Le problème est là... l'image ne s'affiche pas à cause d'un ajout de " et de \ dans le code.

Voici le code source que me donne tinyMCE lors de l'insertion d'une image :

Code : Tout sélectionner

<p><img src="medias/mes_medias/screenshot_login.jpg" alt="TEST" width="218" height="216" /></p>
Le code est BON.

Maintenant voici le code source de l'output que me donne un echo de $_POST['description'] :

Code : Tout sélectionner

<p><img src="%5C%22medias/mes_medias/screenshot_login.jpg%5C%22" alt="\"TEST\"" height="\"216\"" width="\"218\""></p>
Vous remarquerez qu'il y a ajout de " et de \ en surplus et de ce fait, l'image ne s'affiche pas.
Pourquoi cela fait il ça ? et comment résoudre ce petit problème ?


NB: Pour afficher le textarea dans le formulaire je le fais par le biais de echo :
echo '<textarea name="description" id="textarea" cols="55" rows="10"></textarea>';
Il se peut que je rencontre le même problème avec autre chose que l'insertion d'une image (pas testé).


Merci pour vos réponses,
raph

Eléphant du PHP | 428 Messages

06 avr. 2010, 16:14

Formulaire :
...

echo '<textarea name="page_descr" id="textarea" cols="55" rows="10"></textarea>';

...

Récupération formulaire :
$description = $_POST['page_descr'];

J'utilise TinyMCE comme plugin pour les texarea.
Mais le problème ne semble pas venir de là étant donné que le code source que tinyMCE me fournis pour l'insertion et l'affichage de l'image est correct.

Ce serait apparemment lors de la soumission du formulaire que ça déconne ...


Sinon, je n'utilise pas de frameworks ni javascript ni php.
J'ai par précaution désactive TOUS les javascript (sauf tinyMCE) au sein de mon site pour tester et le problème est identique.

Je ne comprends pas ...

J'ai la dernière version de tinyMCE.
Modifié en dernier par visualight le 06 avr. 2010, 16:21, modifié 1 fois.

Eléphant du PHP | 428 Messages

06 avr. 2010, 16:16

Chose bizzare ... on m'a répondu (2 réponses - entre autre developnet m'a répondu) à mon POST et maintenant PLUS RIEN ???! ?
Ou sont passé les messages ?

ViPHP
ViPHP | 2287 Messages

06 avr. 2010, 16:27

Sinon, je n'utilise pas de frameworks ni javascript ni php.
J'ai par précaution désactive TOUS les javascript (sauf tinyMCE) au sein de mon site pour tester et le problème est identique.
Je pense qu'il ne te reste plus qu'un seul test à faire.

TinyMCE, comme tous les wysiwygs, est un bel habillage en javascript construit par dessus un banal textarea.

Que se passe t-il lorsque tu injectes directement des données bien formatées dans ce textarea (avec le JS complètement désactivé donc) ? C'est ça qui est intéressant et la réponse te donnera, de manière incontestable, l'origine du problème (serveur si le même problème survient, JS TinyMCE si non).
if(!@work()){ Nespresso(); } else { what(); }
______________________________

devlop78
Invité n'ayant pas de compte PHPfrance

06 avr. 2010, 16:34

C'était mes messages. J'avais lu comme souvent ton post en diagonal et je t'avais orienté sur htmlentities et urlencode et stripslashes. Mais vu le truc, ça me dépasse alors j'ai préféré me taire. Moi quand je reçois des données de formulaires, j'ai les sales protections de php que j'enlève avec stripslahes. Mais là ça n'a rien à voir ... J'approuve le conseil précédent qui est de désactiver ton code JS pour voir.

Eléphant du PHP | 428 Messages

06 avr. 2010, 16:35

Merci Calimero,

J'ai désactiver tinyMCE et TOUS les javascripts et j'ai inséré une image manuellement.
Le problème est identique => l'image ne s'affiche pas.

le code source de ma page me donne :
<img src="%5C%22medias/mes_medias/screenshot_login.jpg%5C%22">
à la place de :
<img src="medias/mes_medias/screenshot_login.jpg">
Bizzare hein ?

Eléphant du PHP | 428 Messages

06 avr. 2010, 16:37

C'était mes messages. J'avais lu comme souvent ton post en diagonal et je t'avais orienté sur htmlentities et urlencode et stripslashes. Mais vu le truc, ça me dépasse alors j'ai préféré me taire. Moi quand je reçois des données de formulaires, j'ai les sales protections de php que j'enlève avec stripslahes. Mais là ça n'a rien à voir ... J'approuve le conseil précédent qui est de désactiver ton code JS pour voir.

OK, merci de m'avoir fait croire à un bug du forum ^^ :D
Tiens je savais pas qu'on savais supprimer ses messages du forum ... tu as un haut niveau d'accréditation ou quoi ;) ?
Modifié en dernier par visualight le 06 avr. 2010, 16:43, modifié 1 fois.

devlop78
Invité n'ayant pas de compte PHPfrance

06 avr. 2010, 16:38

%5C%22 est \"

Peux tu donner ton code entier de la page, j'ai l'impression qu'il y a une fonction bizarre qui traine.

Eléphant du PHP | 428 Messages

06 avr. 2010, 16:40

Voici le code complet de la page concernée :
	 // On définis le titre interne pour le quickNav
	 $title = 'Webmin - Page-Add';

	 // On inclus la navigation QuickNav
	 include ('.dirsys/inc/quickNav.inc.php');

	 // Titre de la page
	 echo '<h2 class="galleryFullTitle">Webmin - Ajout d\'une page</h2>';
	 
	 // On inclus le menu administrateur
	 include ('.dirsys/inc/webmin_menu.inc.php');
	 
	 echo '<script type="text/javascript">
	 
	 function CheckRadio_HideShowDiv (check_id, id_hide, id_show) {
	
	  if(id_hide) {
	  var baliseHide = document.getElementById(id_hide);
	  
	  if (baliseHide.style.display == "block" && document.getElementById(check_id).checked == true) {
	  baliseHide.style.display = "none";
	 }
	 }
	 
	 if(id_show) {	
	 var baliseShow = document.getElementById(id_show);
	
	 if (baliseShow.style.display == "none" && document.getElementById(check_id).checked == true) {
	 baliseShow.style.display = "block";
	 } else if (baliseShow.style.display == "block" && document.getElementById(check_id).checked == false) {
	 baliseShow.style.display = "none";
	 }
	 }
	 }
	 </script>';
	 
	 // Début de la mise en page de gauche
	 echo '<div id="pageadd">';
	 
	 echo '<form name="pageadd" action="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=page_add" method="POST" target="_self">
	 
	 <div class="pageadd_left">
	 <label>Type de page :</label>
	 <select name="page_type">
	 <option selected="selected">Choisissez ...</option>
	 <option value="admin">admin</option>
	 <option value="ecran">ecran</option>
	 <option value="gerant">gerant</option>
	 <option value="patron">patron</option>
	 <option value="production">production</option>
	 <option value="technique">technique</option>
	 </select>
	 </div>
	 
	 <div class="pageadd_right">
	 <p>Veuillez choisir le type de page de vous souhaitez créer</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>
	 
	 <div class="pageadd_left">
	 <div id="pageadd_calendar-left">
	 <a name="date"></a>
	 <label>Date de création :</label>
	 <input class="border" type="text" size="10" maxlength="10" readonly name="page_date">
	 </div>
	 <div id="pageadd_calendar-left">
	 <a href="#date" onclick="displayCalendar(document.forms[0].page_date,\'yyyy/mm/dd\',this)" target="_self"><img src="medias/images/icon-calendar.png" /></a>
	 </div>
	 </div>
	 
	 <div class="pageadd_right">
	 <p>Veuillez Indiquez la date de création de la page</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>
	 
	 <div class="pageadd_left">
	 <label>Titre de la page :</label>
	 <input class="border" type="text" size="50" maxlength="50" name="page_title" />
	 </div>
	 
	 <div class="pageadd_right">
	 <p>Veuillez Indiquer le titre de la page (50 caractères max).<br />
	 Le titre apparait en haut de la page.</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>

	 <div class="pageadd_left">
	 <label>Titre interne :</label>
	 <input class="border" type="text" size="23" maxlength="50" name="page_int_title" />
	 </div>
	 
	 <div class="pageadd_right">
	 <p>Veuillez Indiquer le titre interne de la page (50 caractères max).<br />
	 Ce titre n\'apparait pas. Il sert au classement interne</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>

	 <div class="pageadd_left">
	 <label>Lieu :</label>
	 <input class="border" type="text" size="30" maxlength="100" name="page_place">
	 </div>

	 <div class="pageadd_right">
	 <p>Veuillez Indiquer le lieu où se trouve le type de la page (100 caractères max).<br />
	 (ex.: si un type "ecran" se situe à liege, le lieux est liege)</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>	 
	 
	 <div class="pageadd_left">
	 <label>Activer la description :</label>
	 <input type="checkbox" name="descr_active" id="descr_active" onClick="javascript:CheckRadio_HideShowDiv(this.id,\'\',\'page_descr\')" />
	 
	 <div id="page_descr" style="display:none;">
	 <textarea name="page_descr" id="textarea" cols="55" rows="10"></textarea>
	 </div>
	 </div>
	 
	 <div class="pageadd_right">
	 <p>Veuillez cocher pour activer la description de la page</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>	 
	 
	 <div class="pageadd_left">
	 <label>Activer la galerie video :</label>
	 <input type="checkbox" name="video_active" id="video_active" onClick="javascript:CheckRadio_HideShowDiv(this.id,\'\',\'videotools\')" />
	 
	 <div id="videotools" style="display:none;">
 	 <label>Activer le partage de video :</label>
	 <input type="checkbox" name="video_share_active" id="video_share_active" />
	 </div>
	 </div>

	 <div class="pageadd_right">
	 <p>Veuillez cocher pour activer la galerie video de la page.<br />
	 Si vous le désirez, vous pouvez cocher ensuite le partage de video</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>	 	 
	 
	 
	 <div class="pageadd_left">
 	 <label>Activer la galerie photo</label>
	 <input type="checkbox" name="photo_active" id="photo_active" onClick="javascript:CheckRadio_HideShowDiv(this.id,\'\',\'phototools\')" />
	 
	 <div id="phototools" style="display:none;">
  	 <label>Galerie photo locale</label>
  	 <input type="radio" name="photo_local" value="true" id="photolocal_0" onClick="javascript:CheckRadio_HideShowDiv(this.id,\'flickr\',\'watermark\')" />
  	 
	 <label>Galerie photo Flickr</label>
	 <input type="radio" name="photo_local" value="false" id="photolocal_1" onClick="javascript:CheckRadio_HideShowDiv(this.id,\'watermark\',\'flickr\')" />

  	 <div id="watermark" style="display:none;">
  	 <label>Activer le watermark</label>
	 <input type="checkbox" name="watermark" id="watermark" />
  	 </div>
	 	 
	 <div id="flickr" style="display:none;">
	 <label>Lien de la galerie flickr :</label>
	 <input type="text" size="30" maxlength="255" name="page_flickr_url">
	 </div>
	 </div>
	 </div>

	 <div class="pageadd_right">
	 <p>Veuillez cocher pour activer la galerie photo de la page.<br />
	 Choisissez ensuite entre galerie photo locale ou flickr.<br />
	 Si vous choisissez flickr comme galerie indiquez le lien flickr.<br />
	 Sinon, choisissez si le watermark doit etre actif.</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>
	 
	 <div class="pageadd_left">	 
	 <label>Activer le porte documents :</label>
	 <input type="checkbox" name="docu_active" id="docu_active" />
	 </div>
	 
	 <div class="pageadd_right">
	 <p>Veuillez cocher pour activer le porte document de la page.</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>
	 
	 
	 
	 <div class="pageadd_left">
	 <label>Activer les options liées :</label>
	 <input type="checkbox" name="options_active" id="options_active" />
	 </div>
	 
	 <div class="pageadd_right">
	 <p>Veuillez cocher pour activer les options liées de la page.</p>
	 </div>
	 
	 <div class="pageadd_border"><img src="medias/images/hr-dotted.png" /></div>
	 
	 <div class="pageadd_right">
	 <input type="submit" value="Créer la nouvelle page" />
	 </div>
	 
	 <br class="spacer" />

	 </form>';
	 
	 // Fin du div pageadd
	 echo '</div>';
	 
	function setValue ($checkbox) {
	 
		if (isset ($checkbox) AND !empty ($checkbox) AND $checkbox == 'on') {
		return 'true';
		} else {
		return 'false';
		}
	}
	 
	 
	if ((isset ($_POST['page_type']) AND !empty ($_POST['page_type'])) AND (isset ($_POST['page_date']) AND !empty ($_POST['page_date']))
	AND (isset ($_POST['page_title']) AND !empty ($_POST['page_title'])) AND (isset ($_POST['page_int_title']) AND !empty ($_POST['page_int_title']))
	AND (isset ($_POST['page_place']) AND !empty ($_POST['page_place'])))
	{
	
	 $page_type = $_POST['page_type'];
	 $page_date = $_POST['page_date'];
	 $page_title = $_POST['page_title'];
	 $page_int_title = $_POST['page_int_title'];
	 $page_place = $_POST['page_place'];
	 $description_active = setValue ($_POST['descr_active']);
	 $description = $_POST['page_descr'];
	 $video_active = setValue ($_POST['video_active']);
	 $videoshare_active = setValue ($_POST['video_share_active']);
	 $photo_active = setValue ($_POST['photo_active']);
	 $photolocal_active = $_POST['photo_local'];
	 $watermark_active = setValue ($_POST['watermark']);
	 $photoflickr_url = $_POST['page_flickr_url'];
	 $document_active = setValue ($_POST['docu_active']);
	 $options_active = setValue ($_POST['options_active']);
	 
	
	echo 'page_type : '.$page_type.'<br />';
	echo 'page_date : '.$page_date.'<br />';
	echo 'page_title : '.$page_title.'<br />';
	echo 'page_int_title : '.$page_int_title.'<br />';
	echo 'page_place : '.$page_place.'<br />';
	
	echo 'descr_active : '.$description_active.'<br />';
	echo 'description : '.$description.'<br />';
	
	echo 'video_active : '.$video_active.'<br />';
	echo 'video_share_active : '.$videoshare_active.'<br />';
	
	echo 'photo_active : '.$photo_active.'<br />';
	echo 'photo_local : '. $photolocal_active.'<br />';
	echo 'watermark : '.$watermark_active.'<br />';
	echo 'flickr_url : '.$photoflickr_url.'<br />';
	
	echo 'docu_active : '.$document_active.'<br />';
	echo 'options_active : '.$options_active.'<br />';
	
	} 

devlop78
Invité n'ayant pas de compte PHPfrance

06 avr. 2010, 16:44

Dans

include ('.dirsys/inc/quickNav.inc.php');

include ('.dirsys/inc/webmin_menu.inc.php');


il y a quoi ?

Eléphant du PHP | 428 Messages

06 avr. 2010, 16:48

QuickNav :
<?php
	// QUICK-NAV TOOLS
	if (!isset ($_SESSION ['quicknav'])){
	 $_SESSION ['quicknav'] = array();
	}
	
	if (isset ($_GET['p']) AND $_GET['p'] == 'galleryDetails') {
			 
		if (empty ($_SESSION ['quicknav'])) {
		 array_push($_SESSION ['quicknav'], array($title, $galid));
		}
			 
		if (!in_array (array ($title, $galid), $_SESSION ['quicknav'])) {
		 array_push($_SESSION ['quicknav'], array($title, $galid));
		}
				
	} elseif (isset ($_GET['p']) AND $_GET['p'] == 'webministration') {
		
		if (!isset ($_GET['wm']) AND empty ($_GET['wm'])) {
		 $wm = 'dashboard';
		} else {
		 $wm = $_GET['wm'];
		}
		
		if (empty ($_SESSION ['quicknav'])) {
		 array_push($_SESSION ['quicknav'], array($title, $wm));
		}
	
		if (!in_array (array ($title, $wm), $_SESSION ['quicknav'])) {
		 array_push($_SESSION ['quicknav'], array($title, $wm));
		}
	}
		
	 // On Teste l'index parent de l'array par rapport à un titre donné et on rajoute 1 puis on supprime.
	 $CurrentID = recursive_array_search($title,$_SESSION ['quicknav']) +1;
	 array_splice($_SESSION ['quicknav'], $CurrentID);

	 
	 // On implémente la navigation QuickNav
	 echo '<div id="quickNav">Quick Nav : ';
			 
	for ( $i = 0; $i <= count($_SESSION ['quicknav'])-1; $i++ ) {
	
		if (is_numeric ($_SESSION ['quicknav'][$i][1])) {
		 echo '<a href="'.$_SERVER['PHP_SELF'].'?p=galleryDetails&galid='.$_SESSION ['quicknav'][$i][1].'" target="_self">'.$_SESSION ['quicknav'][$i][0].'</a> / ';
		} else {
		 echo '<a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm='.$_SESSION ['quicknav'][$i][1].'" target="_self">'.$_SESSION ['quicknav'][$i][0].'</a> / ';
		}
	}
	
	echo '</div>';
	
?>

Webmin_Menu :
<?php

	 echo '<div class="container4">
	 <div class="menu4">
	 <ul>';
			 
	 echo '<li class="assistant"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=assistant">Assistant</a></li>';
			
	 echo '<li class="page"><a href="#">Gestion Pages</a>
	 
	 <ul>
	 <li class="add"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=page_add">Ajouter Page</a></li>
	 <li class="edit"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=page_editdel">Editer Page</a></li>
	 <li class="del"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=page_editdel">Supprimer Page</a></li>
	 </ul></li>';
			
	 echo '<li class="objets"><a href="#">Gestion Objets</a>
	 
	 <ul>
	 <li class="add"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=objet_add">Ajouter Objet</a></li>
	 <li class="edit"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=objet_editdel">Editer Objet</a></li>
	 <li class="del"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=objet_editdel">Supprimer Objet</a></li>
	 
	 </ul></li>';
			
	 echo '<li class="users"><a href="#">Gestion Utilisateurs</a>
	 
	 <ul>
	 <li class="add"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=user_add">Ajouter User</a></li>
	 <li class="edit"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=user_editdel">Editer User</a></li>
	 <li class="del"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=user_editdel">Supprimer User</a></li>
	 
	 </ul></li>';

	 echo '<li class="ip"><a href="#">Gestion IP</a>
	 
	 <ul>
	 <li class="edit"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=ip_editdel">Voir/Editer IP</a></li>
	 <li class="del"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=ip_editdel">Supprimer IP</a></li>
	 <li class="delall"><a href="'.$_SERVER['PHP_SELF'].'?p=webministration&wm=ip_empty">Vider Tout</a></li>
	 
	 
	 </li>';	 
			 
	 echo '</ul>
	 </div></div>';
?>

Eléphant du PHP | 428 Messages

06 avr. 2010, 16:50

Et voici mon doctype :

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1" /> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7"> ...

devlop78
Invité n'ayant pas de compte PHPfrance

06 avr. 2010, 16:51

Ouaip ... je vois pas. Soit tu n'as pas mis tout le code, soit ... franchement j'en sais rien !

Eléphant du PHP | 428 Messages

06 avr. 2010, 16:52

J'appelle ma page d'administration comme ceci :
<?php
echo '<div id="body"><div id="full"><p class="fullTop"></p>';

// Définition du tableau pour les pages
	 define('PATH_WBM', './'.$CfgDirSys.'/'.$CfgDir_Pages.'/'.$CfgDir_wbm.'/');
	 $tableau = glob(PATH_WBM . '*.wbm.php');

		if (isset($_GET['wm']) AND in_array(PATH_WBM . $_GET['wm'] . ".wbm.php", $tableau)) {
		 $wbm_pageInclude = PATH_WBM . $_GET['wm'] . '.wbm.php';
		} else {
		 $wbm_pageInclude = PATH_WBM .  'dashboard.wbm.php';
		}
		 include ($wbm_pageInclude);



echo '<p class="fullBottom"></p></div><br class="spacer" /></div>';


?>

C'est franchement bizzare comme truc ...

devlop78
Invité n'ayant pas de compte PHPfrance

06 avr. 2010, 16:57

Ouai mais j'ai au moins appris l'existence de glob() ;)