Problème sur l'affichage de caractères

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème sur l'affichage de caractères

Re: Problème sur l'affichage de caractères

par moogli » 12 nov. 2013, 14:17

Salut,

Je n'ai pas regardé ton code trop long. ;()

Çe que je peux te dire :
- il faut insérer les données brutes en base (pas de transformation bbcode)
- a l'affichage html tu fait la transformation bbcode => html
- pour la modification un simple écho entre les balise textarea ;)

D'après les symptôme tu fait bbcode => html avant insertion et du coup ça déconne.
Le nl2br ne se fait aussi qu'a l'affichage.

@+

Re: Problème sur l'affichage de caractères

par Seymon » 12 nov. 2013, 13:51

A mon avis oui, c'est dans ces lignes que je me trompe. Je ne sais pas trop quelles formules appliquer à mes variables, tant en les insérant dans MySQL qu'en les prenant de MYSQL pour les afficher dans / et hors Textarea.

Re: Problème sur l'affichage de caractères

par Mazarini » 12 nov. 2013, 09:54

C'est la ligne :
$contenu = htmlspecialchars($donnees['contenu']);
qui transforme les caractères < et > "en & l t" ; et "& l t ;" et qui rend les <br /> visible. Verifie en regardant dans le source de la page.

Problème sur l'affichage de caractères

par Seymon » 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
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 :)