Problème sur l'affichage de caractères
Posté : 12 nov. 2013, 00:28
Bonjour à tous !
Je rencontre un léger problème dans un script PHP d'ajout / modification d'article. Similaire à un blog, en quelques sortes.
L'utilisateur peut écrire un article, le formater en BBCode, et l'include dans une base de données SQL. Jusque là, rien de plus simple.
MAIS je rencontre des difficultés lorsqu'il s'agit d'écrire du texte dans MySQL et surtout de l'en extraire pour l'afficher en HTML, ou dans une textarea lorsqu'un article doit être modifié.
En fonction de ce que les articles contiennent comme caractères, le texte ne s'affiche tout simplement pas! Je suis sur à 99% que je m'y perd dans les fonctions sur les chaînes de caractères.
EXEMPLE: Lorsqu'un article doit être modifié, je le fais revenir dans une textarea, mais les < b r / > s'affichent. Or, j'aimerais bien que les retours à la ligne soient automatiquement traités.
EXEMPLE: En fonction des caractères présents dans mes articles (\/<> et autres), soit l'article ne s'enregistre pas, soit il ne s'affiche pas lorsque je fais une requête SQL pour que l'article s'affiche sur la page d'accueil.
Voici les morceaux de codes utiles, quelqu'un pourrait m'aider et me dire ce que j'ai fait "de travers"?
D'avance, un immense merci pour votre aide !
news_rediger.php
Voui, une grosse tartine de code! J'espère que vous vous y retrouverez... D'avance mille mercis pour votre aide
Je rencontre un léger problème dans un script PHP d'ajout / modification d'article. Similaire à un blog, en quelques sortes.
L'utilisateur peut écrire un article, le formater en BBCode, et l'include dans une base de données SQL. Jusque là, rien de plus simple.
MAIS je rencontre des difficultés lorsqu'il s'agit d'écrire du texte dans MySQL et surtout de l'en extraire pour l'afficher en HTML, ou dans une textarea lorsqu'un article doit être modifié.
En fonction de ce que les articles contiennent comme caractères, le texte ne s'affiche tout simplement pas! Je suis sur à 99% que je m'y perd dans les fonctions sur les chaînes de caractères.
EXEMPLE: Lorsqu'un article doit être modifié, je le fais revenir dans une textarea, mais les < b r / > s'affichent. Or, j'aimerais bien que les retours à la ligne soient automatiquement traités.
EXEMPLE: En fonction des caractères présents dans mes articles (\/<> et autres), soit l'article ne s'enregistre pas, soit il ne s'affiche pas lorsque je fais une requête SQL pour que l'article s'affiche sur la page d'accueil.
Voici les morceaux de codes utiles, quelqu'un pourrait m'aider et me dire ce que j'ai fait "de travers"?
D'avance, un immense merci pour votre aide !
news_rediger.php
if (isset($_GET['modifier_news'])) // Si on demande de modifier une news.
{
$_GET['modifier_news'] = mysql_real_escape_string(htmlspecialchars($_GET['modifier_news']));
$retour = mysql_query('SELECT * FROM aer_news WHERE id=\'' . $_GET['modifier_news'] . '\'');
$donnees = mysql_fetch_array($retour);
$statut = $donnees['statut'];
$titre = stripslashes($donnees['titre']);
$contenu = htmlspecialchars($donnees['contenu']);
$id_news = $donnees['id']; // Cette variable va servir pour se souvenir que c'est une modification.
}
else // C'est qu'on rédige une nouvelle news.
{
// Les variables $titre et $contenu sont vides, puisque c'est une nouvelle news.
$titre = '';
$contenu = '';
$date = date("d-m-Y");
$id_news = 0; // La variable vaut 0, donc on se souviendra que ce n'est pas une modification.
}
<input type="text" name="titre" placeholder="Le titre ici" value="<?php echo $titre; ?>">
<textarea name="contenu" placeholder="Le contenu du message et le BBCode ici."><?php echo htmlentities($contenu); ?>
<input id="submit" name="submit" type="submit" value="Sauvegarder">
news_ajout.php<?
include('sqlconnect.php');
if(isset($_POST['titre']) && isset($_POST['contenu']) && isset($_POST['statut'])){ //Si les variables sont déclarées
if($_POST['titre']!=NULL && $_POST['contenu']!=NULL && $_POST['statut']!=NULL){ //Si les variables ne sont pas vides
if ($_POST['id_news'] == 0){ //s'il s'agit d'une nouvelle news
$date=date("d-m-Y H:i:s");
$titre=addslashes($_POST['titre']);
$name="F.";
$contenu=addslashes($_POST['contenu']);
$statut=$_POST['statut'];
$inserer = mysql_query ("INSERT INTO aer_news VALUES ('', '$date', '$titre', '$name', '" . mysql_real_escape_string(nl2br(($_POST['contenu']))) . "', '$statut')");
if($statut=='1'){echo'news postee avec succes';}
else{echo'newe enregistree et a valider plus tard';}
}
else{ // Sinon, c'est une modification: on update
$_POST['id_news'] = addslashes($_POST['id_news']);
$inserer = mysql_query("UPDATE aer_news SET titre='" . $_POST['titre'] . "', contenu='" . mysql_real_escape_string($_POST['contenu']) . "' WHERE id='" . $_POST['id_news'] . "'");
echo'News mise à jour avec succès';
}
}
else{
echo'erreur';
}
}
else{
echo'erreur';
}
?>
news_view.php<?php
include('sqlconnect.php');
if (isset($_GET['news_id'])){
$reponse = mysql_query('SELECT * FROM aer_news WHERE id=' . $_GET['news_id']);
$donnees = mysql_fetch_array($reponse);
<div class="article">Article: <?php echo $donnees['auteur']; ?></div>
..Voui, une grosse tartine de code! J'espère que vous vous y retrouverez... D'avance mille mercis pour votre aide