$lieu = utf8_encode(htmlentities($affiche2['lieu']));
Il ne faut pas utiliser la fonction utf8_encode(), il ne faut pas encoder vu le but c'est de faire en sorte que toutes les données soient déjà en UTF-8.
Pour la fonction htmlentities() (idem pour htmlspecialchar), il est précisé ceci dans la doc Php :
htmlentities

Envoyé par
doc Php
Comme htmlspecialchars(), cette fonction prend un troisième argument optionnel charset qui définit le jeu de caractères utilisé durant la conversion. Actuellement, le jeu de caractères ISO-8859-1 est utilisé par défaut.
Donc par défaut c'est de l'ISO, il faut donc rajouter comme paramètre UTF-8 :
$lieu = htmlentities($affiche2['lieu'], ENT_COMPAT, 'UTF-8');
Petite parenthèse au passage concernant la requête.
Tu effectue ici une requête qui a pour but de récupérer un contenu à l'aide de son identifiant ($idc).
Et on sait ici qu'un contenu est unique, il ne peu pas en en avoir 2, ce n'est pas possible.
Il n'est donc pas utile de faire une boucle while, ça ne sert à rien 
Cependant, rien ne dit que le $idc correspond bien à un contenu, et si tel est le cas, la requête retournera aucune ressource, ce qui fait que l'appel à mysql_fetch_array() va faire "planter" le code.
Je te donne un gros comment je procède, ce n'est pas dit que c'est la meilleur, mais ça en est une néanmoins :
1 2 3 4 5 6 7 8 9 10 11 12
|
$requete2 = 'SELECT COUNT(*) AS total, id_contenu, photo_contenu, lieu, titre, dateetnbrepage, editeur, texte
FROM contenu
WHERE contenu.id_contenu = '.(int)$idc;
$reponse2 = mysql_query($requete2) or die ("impossible d'effectuer la requête");
$contenu = mysql_fetch_array($reponse2);
if ((int)$contenu['total'] > 0) {
echo '<div id="textDiv"><div class="texte_lieu">'.$contenu['lieu'].'</div>';
echo '<div class="texte_titre"><div class="texte_lieu">'.$contenu['titre'].'</div>';
... etc ...
} |
Le fait de mettre un COUNT() dans la requête fera quelle retournera automatiquement 1 ligne, le nombre de ligne trouvée, et selon le cas, ça sera 0 ou 1 (sauf si erreur de syntaxe).
Partager