Créer un compte
Connexion

Gestion contenu texte via formulaire php/mysql

Pour créer et répondre aux sujets, vous devez être connecté.
Pages: 1
Auteur Message
Gringorojo
06/03/2012 à 03:20:01
Gringorojo
Membre
Bonjour à tous,

Je profite de l'occasion, vu que nouvellement inscrit aussi sur le site, pour souhaiter une bonne et
heureuse année 2012, qu'elle vous apporte SANTE, REUSSITE, PROSPERITE et beaucoup d'INGENIOSITE.

J'ai créer un espace admnistration de mon site qui marche impeccable sauf pour ce qui est de la modification
du contenu texte. (J'ai pas d'image à insérer.)

Je viens vers vous car j'ai besoin d'aide sur la manière de gérer mon contenu texte via un formulaire
(une des pages de mon espace administration de site) PHP/MYSQL.

Voici la table contenant mes les infos à manipuler depuis mon formulaire:

CREATE TABLE `contenupage` (
  `id` int(11) NOT NULL auto_increment,
  `langue` text NOT NULL,
  `titrecolonne1` text NOT NULL,
  `contenucolonne1` text NOT NULL,
  `titrecolonne2` text NOT NULL,
  `contenucolonne2` text NOT NULL,
  `titrecolonne3` text NOT NULL,
  `contenucolonne3` text NOT NULL,
  `titrepage` text NOT NULL,
  `lienpage` text NOT NULL,
  PRIMARY KEY  (`id`)
) ;

Les infos contenus dans les champs "contenucolonne1","contenucolonne2","contenucolonne3" sont des textes
avec des apostrophes ou des caractères accentués (exple: L'article posté préseantait d'énormes fautes.).

Dans mon formuaires je fait apparaitre pour modifications ces champs dans un <textarea></textarea>.

Voici aperçu du script affichant ce contenu:


$sql1WX = "SELECT id, langue, titrecolonne1, contenucolonne1,titrecolonne2, contenucolonne2, titrecolonne3, contenucolonne3, titrepage, lienpage FROM contenupage";
   
// on exécute la requête
$req1WX = mysql_query($sql1WX) or die('Erreur SQL !<br />'.$sql1WX.'<br />'.mysql_error());

echo"<form method='POST' action='validation_modif_contenupage.php'>
     <table width='744' border='0' align='center'>
     <tr>
     <td width='744' height='32' align='center' ><input type='submit' name='ok' value='ENREGISTREMENT MODIFICATION'><br><br></td>
     </tr>
     </table>";
   
// on va scanner tous les tuples un par un                            
while ($dataWX1 = mysql_fetch_array($req1WX)) {
               
echo "
<table width='744' border='0' cellpadding='0'>
<tr>
<td width='744' height='15'>
Id : ",$dataWX1['0']," -  Langue <input type='text' name='langue' value='",$dataWX1['1'],"' size='15'><br><br>
</td>
</tr>
<tr>
<td width='744' height='15'>
Titre Colonne 1 : <input type='text' name='titrecolonne1' value='",$dataWX1['2'],"' size='15'>    Contenu colonne 1:<br>
<textarea id='textarea1' name='contenucolonne1' rows='3' cols='130'>".stripslashes(html_entity_decode($dataWX1['3']))."</textarea><br><br>
</td>
</tr>
<tr>
<td width='744' height='15'>
Titre Colonne 2 : <input type='text' name='titrecolonne2' value='",$dataWX1['4'],"' size='15'>     Contenu colonne 2:<br>
<textarea id='textarea2' name='contenucolonne2' rows='3' cols='130'>".stripslashes(html_entity_decode($dataWX1['5']))."</textarea><br><br>
</td>
</tr>
<tr>
<td width='744' height='15'>
Titre Colonne 3 : <input type='text' name='titrecolonne3' value='",$dataWX1['6'],"' size='15'>     Contenu colonne 3:<br>
<textarea id='textarea3' name='contenucolonne3' rows='3' cols='130'>".stripslashes(html_entity_decode($dataWX1['7']))."</textarea><br><br>
</td>
</tr>
<tr>
<td width='744' height='15'>
Titre page : <br>
<textarea id='textarea4' name='titrepage' rows='3' cols='130'>".stripslashes(html_entity_decode($dataWX1['8']))."</textarea><br><br>
Lien page : <input type='text' name='lienpage' value='",$dataWX1['9'],"' size='20'>
</td>
</tr>
</table>
<table width='744' border='0'>
<tr>
<td><input name='id' value='",$dataWX1['0'],"' type='hidden'>
</td>
</tr></table></form>
";
}
    // on libère l'espace mémoire alloué pour cette requête
    mysql_free_result ($req1WX);
}

// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($resultatWX);
// on ferme la connexion à la base de données.
mysql_close ();

 
Dans ce formulaire le contenu de la table s'affiche sans soucis en codage HTML, c'est à dire que j'ai des balises <br> qui s'affiche si j'ai fait
un renvoie à la ligne, si j'ai écrit dans la table "é" (il apparait tel quel) ou si j'ai dans la table "&eacute;" (il apparait tel quel).

Jusque là pas de soucis.

Là où le problème survient c'est quand je fait une modification en ajoutant du texte, j'appelle la page validation_modif_contenupage.php dont
voici le une partie du code:

$id=$_POST['id'];
$langue=$_POST['langue'];
$titrecolonne1=$_POST['titrecolonne1'];
$contenucolonne1=$_POST['contenucolonne1'];
$titrecolonne2=$_POST['titrecolonne2'];
$contenucolonne2=$_POST['contenucolonne2'];
$titrecolonne3=$_POST['titrecolonne3'];
$contenucolonne3=$_POST['contenucolonne3'];
$titrepage=$_POST['titrepage'];
$lienpage=$_POST['lienpage'];

$contenucolonne1=addslashes(htmlentities($contenucolonne1));
$contenucolonne2=addslashes(htmlentities($contenucolonne2));
$contenucolonne3=addslashes(htmlentities($contenucolonne3));
$titrepage=addslashes(htmlentities($titrepage));
....

<?

$db=mysql_connect($mysql_host, $mysql_user, $mysql_password) or die ('IMPOSSIBLE DE SE CONNECTER');
        mysql_select_db($mysql_base, $db) or die ('BASE DE DONNEE INCONNU');

// on prépare une requête
$sqluW="UPDATE contenupage set langue='$langue', titrecolonne1='$titrecolonne1', contenucolonne1='$contenucolonne1', titrecolonne2='$titrecolonne2',
contenucolonne2='$contenucolonne2', titrecolonne3='$titrecolonne3', contenucolonne3='$contenucolonne3', titrepage='$titrepage', lienpage='$lienpage' WHERE id='$id'";

// on exécute cette requête
$resultatuW = mysql_query($sqluW) or die('Erreur SQL !<br />'.$sqluW.'<br />'.mysql_error());

// on ferme la connexion à la base de données.
mysql_close ();

echo '<br><br><center><font color ="red">LE CONTENU A ETE MODIFIE</font>';

?>

Une fois la le update fini ... c'est la catastrophe sur la page modifié car tout apparait avec <br> (s'il y en avait dedans) ... bref c'est tout si le code HTML contenu
dans la table n'était plus interprété correctement et apparaît brut tel quel!!

Je précise que l'emploi des stripslashes ou addslashes est semble t'il recommandé lors de restitution depuis bd ou d'injection de données dans la bd.
L'emploi de htmlentities ou html_entity_decode est là encore recommandé pour la conversion en injection ou restituion dans ou depuis bd mysql des caractéres
accentués.

Donc voilà résumé, mon soucis. je vous remercie de vos conseils et suggestions pour que mon espace administration soit vraiment complet.

Merci à tous d'avance pour toute contribution.

A bientôt.

ybouane
06/03/2012 à 03:21:25
ybouane
Admin
Bonjour,
j'ai mis tes code dans la balise < code > pour plus de lisibilité. Pour ton problème, essaye en faisant un stripslashes avant html_entity_decode:
html_entity_decode(stripslashes($dataWX1['3']))
Cordialement :)

Image
Gringorojo
06/03/2012 à 17:36:04
Gringorojo
Membre
Bonjour,

Merci , je fais le test et je reviens.
A bientôt.

Pages: 1