8791 sujets

Développement web côté serveur, CMS

Bonjour,

dans la partie admin de mon site web, sur un <textarea> lorsque j'emploie des textes qui comporte les balises < et > il se converti en &gt; et &lt; dans la base de donnée MySql.
quelqu'un peut m'expliquer comment éviter et résoudre ce problème car je ne peux pas créer des textes html pour un gestion de contenu ?

Cordialement.
Modifié par myphp_51 (19 Nov 2007 - 01:25)
bonjour,

Es tu à l'origine de la création de ton site?
Si ce dernier est en php, c'est certainement dû à une fonction à l'envoie des données...

++
Bonjour,

Comme l'indique MySharrascript, il y a surement un appel à la fonction htmlentities (si le site est en php) qui remplace les caractères spéciaux en entités HTML.

Pour la mise en forme du texte, peut-être que ton site gère les balises bbcode
(comme le forum sur lequel nous nous trouvons).
Bonjour,

Merci d'avoir donner intérêt à mon sujet, enfaite je suis à la création d'un site web en php, administrer par un formulaire qui gère le remplissage des tables dans la base de donnée MySql, mais lorsque je emploie des caractère comme les crochets "<" et ">" ils ne s'affiche pas dans la table nommé Resumer(type "text" avec encodage "latin1_general_ci"), j'ai besoin de savoir où se trouve le problème exactement, voici le code php:

<? 
include('config.php');
require_once('books_class.php');
$newBooks = new books();

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Books - <? echo $dConfig['titreAction']; ?></title>
<script language="javascript">
<!--
function isDataValid(theForm)
	{
	if(theForm.txt_titre.value == ""){
		alert("Titre invalide!");
		theForm.txt_titre.focus();
		return (false);
		}
	if(theForm.txt_infos.value == ""){
		alert("Infos invalide!");
		theForm.txt_infos.focus();
		return (false);
		}
	if(theForm.txt_images.value == ""){
		alert("Images invalide!");
		theForm.txt_images.focus();
		return (false);
		}
	if(theForm.txt_resumer.value == ""){
		alert("Resumer invalide!");
		theForm.txt_resumer.focus();
		return (false);
		}
	}
//-->
</script>
<style type="text/css">
<!--
BODY {
	BACKGROUND-COLOR: #ffffff;
	margin: 10px 10px 10px 10px;
}
INPUT, TEXTAREA, SELECT, FONT, TD, BODY, A, TH{
	FONT-FAMILY: verdana, "Verdana Ref";
	font-size:10px;
}

a
{color:#000000; font-weight:bold; text-decoration:none;}

a:hover
{color:#505050; text-decoration:underline;}

-->
</style>
</head>

<body style="font-family:Verdana ">
<table width="100%" height="100%" border="0" cellpadding="10" cellspacing="1" bgcolor="#CCCCCC">
  <tr>
    <th colspan="3" bgcolor="#EAEAEA"><div align="center"><strong>Back office : BASSAMAT</strong></div></th>
  </tr>
  <tr>
    <td height="100%" colspan="3" bgcolor="#FFFFFF"><div align="center">
      <table width="100%" height="100%" border="0" cellpadding="0" cellspacing="0">
        <tr>
          <td><a href="index.php">Administration</a> &gt; Books </td>
        </tr>
        <tr>
          <td height="100%"><div align="center">
            <table border="0" cellspacing="0" cellpadding="5">
                <tr valign="top">
                  <td><table border="0" cellpadding="3" cellspacing="1" bgcolor="#CCCCCC">
                      <tr>
                        <th bgcolor="#FFFFFF"><div align="left"><strong>Op&eacute;ration</strong></div></th>
                      </tr>
                      <tr>
                        <td nowrap bgcolor="#FFFFFF"><div align="left"><a href="?action=Modifier"><img src="edit_16.png" width="16" height="16" hspace="3" border="0" align="absmiddle">Modifier</a></div></td>
                      </tr>
                      <tr>
                        <td nowrap bgcolor="#FFFFFF"><div align="left"><a href="?action=Consulter"><img src="computer_16.png" width="16" height="16" hspace="3" border="0" align="absmiddle">Consulter</a></div></td>
                      </tr>
                  </table></td>
                  <td><table border="0" cellpadding="5" cellspacing="1" bgcolor="#CCCCCC">
                      <tr>
                        <th bgcolor="#FFFFFF"><div align="left"><strong>Books &raquo; <? echo $dConfig['titreAction']; ?> </strong></div></th>
                      </tr>
                      <form name="formBooks" onSubmit="return(isDataValid(this))" method="post" action="books_sql.php?action=<? echo $_REQUEST['action'];?>">
                        <tr>
                          <td nowrap bgcolor="#FFFFFF"><div align="left">
                              <?
if(($_REQUEST['action']=="Enregistrer")||($_REQUEST['id']))
	{
	if($_REQUEST['id'])
		{
		$newBooks->getBooks($_REQUEST['id']);
		}
	
?>
                              <input name="redirect" type="hidden" value="<? echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];?>">
                                <table width="100%" border="0" cellpadding="3" cellspacing="0">
                                  <tr>
                                    <td nowrap bgcolor="#FFFFFF"><input type="hidden" name="txt_id" value="<? if ($_REQUEST['id']){echo $_REQUEST['id'];} ?>">
                                        <table width="100%" border="0" cellpadding="3" cellspacing="0">                                           <tr valign="top">
                                            <td nowrap>Titre</td>
                                            <td><input type="text" name="txt_titre" maxlength="40" value="<? if ($_REQUEST['id']){echo $newBooks->titre;} ?>" <? if($_REQUEST['action']=="Supprimer"){?>readonly="1"<? }?>></td>
                                                                                     <tr valign="top">
                                            <td nowrap>Infos</td>
                                            <td><input type="text" name="txt_infos" maxlength="40" value="<? if ($_REQUEST['id']){echo $newBooks->infos;} ?>" <? if($_REQUEST['action']=="Supprimer"){?>readonly="1"<? }?>></td>
                                                                                     <tr valign="top">
                                            <td nowrap>Images</td>
                                            <td><input type="text" name="txt_images" maxlength="65535" value="<? if ($_REQUEST['id']){echo $newBooks->images;} ?>" <? if($_REQUEST['action']=="Supprimer"){?>readonly="1"<? }?>></td>
                                                                                     <tr valign="top">
                                            <td nowrap>Resumer</td>
                                            <td><p>
                                              <textarea name="txt_resumer" cols="60" rows="10" id="txt_resumer"><? if ($_REQUEST['id']){echo $newBooks->resumer;} ?>
                                              </textarea>
                                            </p>
                                              </td>
                                                                                </table>
                                        <div align="left"></div></td>
                                  </tr>
                                  <tr>
                                    <td nowrap bgcolor="#CCCCCC"><div align="left">
                                        <input type="submit" name="cmd_submit" value="<? echo $_REQUEST['action'];?>" <? if ($_REQUEST['action']=="Supprimer") {echo 'onClick="return(confirm(\'Voulez-vous r&eacute;ellement supprimer cet enregistrement?\'))"';}?>>
                                        <input type="reset" name="reset" value="R&eacute;tablir">
                                      </div></td>
                                  </tr>
                                </table>
                                <?
	}
else
	{
	if($_REQUEST['message']){echo '<strong  style="color:#FF0000; ">'.$_REQUEST['message'].'</strong>';}
?>
                                <table width="100%"  border="0" cellpadding="5" cellspacing="1" bgcolor="#F5F5F5">
                                  <tr bgcolor="#CCCCCC">
                                    <th nowrap><div align="left">N&deg;</div></th>                                     <th nowrap><div align="left">Titre</div></th>                                     <th nowrap><div align="left">Infos</div></th>                                     <th nowrap><div align="left">Images</div></th>                                     <th nowrap><div align="left">Resumer</div></th>                                    <? if($_REQUEST['action']!="Consulter"){?>
                                    <th nowrap><div align="left">Op&eacute;ration</div></th>
                                    <? }?>
                                  </tr>
                                  <?
	$array=$newBooks->getAllBooks('id>0','id');
	
	if (!empty($array))
		{
		$i=0; 
		while(!empty($array[$i]))
			{
	?>
                                  <tr valign="top">
                                    <td bgcolor="#FFFFFF"><? echo $i+1;?></td>                                    <td bgcolor="#FFFFFF"><? echo $array[$i]->titre;?></td>                                    <td bgcolor="#FFFFFF"><? echo $array[$i]->infos;?></td>                                    <td bgcolor="#FFFFFF"><? echo $array[$i]->images;?></td>                                    <td bgcolor="#FFFFFF"><? echo $array[$i]->resumer;?></td>                                    <? if($_REQUEST['action']!="Consulter")
			{?>
                                    <td bgcolor="#F7F7F7"><a href="?action=<? echo $_REQUEST['action'].'&id='.$array[$i]->id;?>">
                                      <? echo $_REQUEST['action'];?>
                                      </a></td>
                                  </tr>
                                  <? 	}?>
                                  <? 		$i++;} 
	}
else
	{?>
                                  <tr>
                                    <td colspan="30" bgcolor="#FFFFFF">Aucune information n'a &eacute;t&eacute; trouv&eacute;! </td>
                                  </tr>
                                  <?	}?>
                                  </table>
                                <?
	}	
?>
                          </div></td>
                        </tr>
                      </form>
                  </table></td>
                </tr>
                      </table>
          </div></td>
        </tr>
      </table>
      </div></td>
  </tr>
</table>
</body>

</html>


Merci d'avance et je compte sur vous!
Modifié par myphp_51 (18 Nov 2007 - 19:49)
Bonsoir,

a écrit :
Je pense que tout se passe sur la page books_sql.php et non sur celle ci


Ben je ne sais bcp sur le php, j'ai essayer de chercher dans books_sql.php, mais mon coup n'a pas eu de succès alors je vous laisse la commande Smiley cligne , voici le code :

<? 
require_once('books_class.php');
$newBooks = new books();

if(isset($_REQUEST['cmd_submit']))
	{
	//Choix de l'opération
	switch ($_REQUEST['action']) 
		{
		
		// Cas d'enregistrement
		case 'Enregistrer':
			$newBooks->titre = $_REQUEST['txt_titre'];
			$newBooks->infos = $_REQUEST['txt_infos'];
			$newBooks->images = $_REQUEST['txt_images'];
			$newBooks->resumer = $_REQUEST['txt_resumer'];
			$newBooks->setBooks();
			break;
		
		//Cas de modification
		case 'Modifier':
			$newBooks->titre = $_REQUEST['txt_titre'];
			$newBooks->infos = $_REQUEST['txt_infos'];
			$newBooks->images = $_REQUEST['txt_images'];
			$newBooks->resumer = $_REQUEST['txt_resumer'];
			$newBooks->updateBooks($_REQUEST['txt_id']);
			break;
		
		// Cas de suppression
		case 'Supprimer':
			$newBooks->deleteBooks($_REQUEST['txt_id']);
			break;
		}
	
	//Rédirection + résultat de l'exécution
	header('Location: '.$_REQUEST['redirect'].'?message='.$newBooks->message);
	}
?>


Cordialement.
Bonsoir,

Je pense que tu devrais plutôt regarder dans le fichier books_class.php.

C'est dans ce fichier que se trouve la déclaration de la class book et donc des fonctions qui effectuent les traitements.

Le contenu de la fonction setBooks ou updateBooks me semble le bon point de départ.

Petite remarque : ce topic me semble avoir plus sa place dans la rubrique "Standards web et langages serveurs" plutôt que dans la "Sémantique Web" Smiley cligne
Modifié par Cyril P. (18 Nov 2007 - 22:08)
Bonsoir,

C'est ok, voici le books_class.php :

<?
// Page créée le 18/05/2007 02:46:14 par myGenerator 2006
Class books
	{
	// variables correspondant aux champs de la table books
	var $id;
	var $titre;
	var $infos;
	var $images;
	var $resumer;
	// $message contient le resultat de l'exécution des operations
	var $message;
	
	function books()
		{
		$this->id = -1;
		// Informations de connexion de l'utilisateur
		$host = "localhost";
		$user = "root"; 
		$password = ""; 
		// Base des données utilisée
		$database_name = "cabinet_bassamat";
		// Connexion mysql
		$connexion = mysql_connect($host, $user, $password) or die (mysql_error());
		// Sélection de la base des données
		$db = mysql_select_db($database_name, $connexion) or die(mysql_error());
		}

	// Recherche par le champ identifiant d'un enregistrement 
	function getBooks($id)
		{
		// Requête
		$sql = "SELECT * ";
		$sql .= "FROM books ";
		$sql .= "WHERE id = '$id';"; 
		// Exécution
		$rsql = mysql_query($sql);
		// Résultats
		if (mysql_num_rows($rsql) == 0) 
			{
			// Cas d'échec
			$this->id = -1; 
			}
		else
			{ 
			// Cas de succès
			$this->id = mysql_result($rsql, 0, "id");
			$this->titre = mysql_result($rsql, 0, "titre");
			$this->infos = mysql_result($rsql, 0, "infos");
			$this->images = mysql_result($rsql, 0, "images");
			$this->resumer = mysql_result($rsql, 0, "resumer");
			}
		}

	// Affichage par critère spécifié de tous les enregistrements		
	
	// La forme du variable $whereCritere peut être la suivante :
	// critere1 AND (critere2 OR critere3)

	// La forme du variable $orderCritere peut être la suivante :
	// critere1, critere2, critere3
	
	function getAllBooks($whereCritere='', $orderCritere='')
		{
		// Requête
		$sql = "SELECT * ";
		$sql .= "FROM books ";
		if($whereCritere)
			{
			$sql .= "Where $whereCritere ";
			}
		if($orderCritere)
			{
			$sql .= "Order by $orderCritere ";
			}
		/*if($critere)
			{
			$sql .= "Where $critere ";
			}
		$sql .= "Order by id";*/
		// Exécution						
		$rsql = mysql_query($sql);
		// Résultats
		if (mysql_num_rows($rsql) == 0) 
			{
			// Cas d'échec
			$this->id = -1; 
			}
		else
			{ 
			// Cas de succès
			$ret = array();
			while($line=mysql_fetch_object($rsql))
				{
					$ret[] = $line;
				}
			return $ret;
			}
			
		}
		
	// Enregistrement d'un enregistrement
	function setBooks()
		{
		// Requête
		$sql = "INSERT INTO books (`titre`, `infos`, `images`, `resumer`, `id`) ";
		$sql .= "VALUES (
				'".$this->formatData($this->titre)."',
				'".$this->formatData($this->infos)."',
				'".$this->formatData($this->images)."',
				'".$this->formatData($this->resumer)."',
				'".$this->getNewId()."'); ";
		// Exécution et résultat
		if (mysql_query($sql))
			{
			$this->message = "Enregistrement effectué avec succès!";
			}
		else 
			{
			$this->message = "Un problème est survenu lors de l'enregistrement!";
			}
		}			

	// Modification d'un enregistrement
	function updateBooks($id)
		{
		$sql = "UPDATE books SET ";
		$sql .= "`titre` = '".$this->formatData($this->titre)."', ";
		$sql .= "`infos` = '".$this->formatData($this->infos)."', ";
		$sql .= "`images` = '".$this->formatData($this->images)."', ";
		$sql .= "`resumer` = '".$this->formatData($this->resumer)."', ";
		$sql .= "`id` = '$id' ";
		$sql .= "WHERE `id` = '$id';"; 
		// Exécution et résultat
		if(mysql_query($sql))
			{
			$this->message = "Modification effectué avec succès!";
			}
		else 
			{
			$this->message = "Un problème est survenu lors de la modification!";
			}
		}

	// Suppression d'un enregistrement
	function deleteBooks($id)
		{
		// Requête
		$sql = "DELETE FROM books WHERE id = '$id';"; 
		// Exécution et résultat	
		if (mysql_query($sql)) 
			{
			$this->message = "Suppression effectué avec succès!";
			}
		else
			{ 
			$this->message = "Un problème est survenu lors de la suppression!";
			}
		}

	// Création d'un nouveau id par incrémentation	
	function getNewId()
		{
		$sql = mysql_query(" select max(id) from books ");
		$line = mysql_fetch_row($sql);
		$newId = $line[0]+1;
		return $newId;
		}

	// Formattage des données pour éviter les éventuels problèmes qui peuvent être causés par les caractères interprétables par PHP, par Mysql ou par HTML (accentués ou spéciaux)
	function formatData($d)
		{
		return (htmlentities($d, ENT_QUOTES));
		}		
	}
?>


Cordialement.
myphp_51 a écrit :

C'est ok, voici le books_class.php :

     // Formattage des données pour éviter les éventuels problèmes qui peuvent être causés par les caractères interprétables par PHP, par Mysql ou par HTML (accentués ou spéciaux)
	function formatData($d)
		{
		return (htmlentities($d, ENT_QUOTES));
		}		
?>


Cordialement.


Bingo, c'est bien le htmlentities en dernière ligne qui transforme tes caractères.
http://fr.php.net/manual/fr/function.htmlentities.php
Bonsoir,

salut hitzerod, et merci pour le coup de main, c'est vraiment très intéressant d'apprendre à affronter ce genre de problème, mais il reste comme même tjr comment faire pour réparer et annuler cette fonction htmlentities?
Bonsoir,

d'après le lien donné par hitzerod, je me suis réussi à trouver la solution, il faut juste remplacer la fonction htmlentities par html_entity_decode, merci hitzerod et tous les autres qui ont données ces précieuses conseils pour y arrivé.

Un pour tous et tous pour un.

Cordialement.