Problème accents

omlaly - 16 févr. 2013 à 20:30
 omlaly - 17 févr. 2013 à 10:50
Bonjour,

Après avoir réussi à insérer les articles dans la base de données dont voici le code :

$villages=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST["villages"])));
$categorie=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['categorie'])));
$titre_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['titre_article'])));
$texte_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['texte_article'])));
$auteur_article=mysql_real_escape_string(htmlspecialchars(stripcslashes($_POST['auteur_article'])));

// Insertion de l'article dans la base de données
$req_insertion_articles = "INSERT INTO articles (nom_village,nom_categorie, date_depot, titre_article, texte_article, auteur_article) VALUES ('$villages','$categorie', now(), '$titre_article', '$texte_article', '$auteur_article')";
$query_insertion_articles = mysql_query($req_insertion_articles) or die ('Erreur sur la requête SQL concernant l\'insertion des articles'.mysql_error()); // Envoie une requête à un serveur MySQL


J'aimerais les afficher (selon deux conditions), ça ça marche. Seul problème, les accents, j'aimerais que lorsqu'il y a des accents, qu'ils s'affichent correctement. Je vous mets le code (j'ai mis comme titre : Mon premier article titre et comme contenu de l'article : Contenu Article) :

$messagesParPage=5; // Nombre de messages affichés par pages

$retour_total=mysql_query('SELECT COUNT(*) AS id_article FROM articles WHERE nom_categorie = "categorie" AND nom_village	= "village"')  or die ('Erreur sur la requête SQL concernant le calcul du nombre d\'articles concernant'.mysql_error()); // Envoie une requête à un serveur MySQL -  Récupération du contenu de la requête dans $retour_total
$donnees_total=mysql_fetch_assoc($retour_total); // Rangement de $retour_total sous la forme d'un tableau
$total=$donnees_total['total']; // Récupération du total pour le placer dans la variable $total

// Comptage du nombre de pages
$nombreDePages=ceil($total/$messagesParPage);

if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
     $pageActuelle=intval($_GET['page']);
     
     if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
     {
          $pageActuelle=$nombreDePages;
     }
}
else
{
     $pageActuelle=1; // La page actuelle est la n°1    
}

$premiereEntree=($pageActuelle-1)*$messagesParPage; // Calculer la première entrée à lire

// La requête SQL pour récupérer les messages de la page actuelle

$retour_messages=mysql_query('SELECT * FROM articles WHERE nom_categorie = "categorie" AND nom_village = "village" ORDER BY id_article DESC LIMIT '.$premiereEntree.', '.$messagesParPage.'') or die ('Erreur sur la requête SQL concernant le nombre d\'articles concernant le village et la catégorie'.mysql_error()); // Envoie une requête à un serveur MySQL

while($donnees_messages=mysql_fetch_assoc($retour_messages)) { // Lecture des entrées une à une grâce à une boucle

     // Affichage des messages avec le design
     // nl2br : Insère un retour à la ligne HTML à chaque nouvelle ligne - pour prendre en compte les sauts de ligne dans le message.
     echo ''.nl2br(mysql_real_escape_string(htmlspecialchars(stripslashes($donnees_messages['titre_article'])))).',

----

'.nl2br(mysql_real_escape_string(htmlspecialchars(stripslashes($donnees_messages['texte_article']))).',

----

Posté par : '.(stripslashes(mysql_real_escape_string(htmlspecialchars($donnees_messages['auteur_article']))))).' le '.mysql_real_escape_string(htmlspecialchars(stripslashes($donnees_messages['date_depot']))).'

';
    // Ajout des sauts de ligne pour espacer les messages (
)   
}

echo 'Page : '; // Centrer la liste des pages pour l'affichage
for($i=1; $i<=$nombreDePages; $i++) // Boucle
{
     // Condition
     if($i==$pageActuelle) // S'il s'agit de la page actuelle
     {
         echo ' [ '.$i.' ] '; 
     }	
     else
     {
          echo ' [page.php?page='.$i.' '.$i.'] ';
     }
}
echo '

';
}


Voici le résultat affiché sur la page :
Mon premier article titre

Contenu Article



Posté par : auteur le 2013-02-16 11:36:30


A noter que j'utilise un éditeur TINYMCE pour poster le contenu de l'article. Donc, quand j'en écrit un, ça met automatiquement des balises HTML telles que

ou
.

Lorsque je vais sur PHPMyAdmin, je vois le contenu de l'article avec les balises HTML (qui permettent la mise en page).

Est-ce qu'il faut que je fasse quelque chose dans la requête SQL pour ne pas qu'il enregistre la mise en page (je ne crois pas mais je pose quand même la question) ? Ou lors de l'affichage du message ?

En gros, j'aimerais que les articles s'affichent sans balises HTML de sorte à qu'ils soient lisibles tout simplement...

En attendant vos réponses, je continue mes recherches...
Cordialement

4 réponses

cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
17 févr. 2013 à 00:18
Bonsoir,

Je crois que l'on ne code plus comme tu le fais depuis quelque années.
Pourquoi je dit cela, il est là le problème que tu rencontres.
Tu dois traiter tes données avec un casse tête chinois alors que PDO fait tout pour toi.
Donc, tu supprimes le tout, et je te propose de faire ceci et tu verras que le traitement de caractères spéciaux sera très simple.

Je te propose de coder en PDO.

Donc, voici la connexion à la db d'une façon très rudimentaire. Si tu maitrises l'objet, je te propose de créer une classe.
<?php
$dbname= 'test';
$user = 'user@user.fr';
$password = 'mot de passe';
$host = 'localhost';

try {
    $dbh = new PDO('mysql:host='.$host .';dbname='.$dbname, $user, $password );
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->exec("SET CHARACTER SET utf8");
} catch (PDOException $e) {
    echo "Erreur : " . $e->getMessage() . "

";
    exit();
}


Voici une méthode intéressante pour exécuter un insert mais toujours très simple car dans cet exemple, on ne gère pas de transaction et non plus les Exception
<?php
$stmt = $dbh->prepare("INSERT INTO articles (nom_village, nom_categorie, date_depot, titre_article, texte_article, auteur_article) VALUES (:villages, :categorie, :titre_article, :texte_article, :auteur_article)");
$stmt->bindParam(':villages', $_POST['villages']);
$stmt->bindParam(':categorie', $_POST['categorie']);
$stmt->bindParam(':titre_article', $_POST['titre_article']);
$stmt->bindParam(':texte_article', $_POST['texte_article']);
$stmt->bindParam(':auteur_article', $_POST['auteur_article']);  
$stmt->execute();


Pour le SELECT, voici un exemple car je ne suis pas adepte du mélange PHP/HTML.
Pour finir, ajoute le méta tag pour le charset dans header HTML
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


J'attends un retour positif :)

stéph
0
Mais, c'est quoi ce PDO ?
C'est un nouveau language ?
Comme PHP ou SQL ?

Désolé mais j'ai jamais entendu de ce truc sauf avec toi (ça fait la deuxième fois que tu m'en parles).

Cordialement
0
cs_stay Messages postés 493 Date d'inscription jeudi 7 juillet 2005 Statut Membre Dernière intervention 24 mai 2017 4
17 févr. 2013 à 10:39
Salut, j'imagine que tu n'as pas cliqué sur les liens que je t'ai proposé ?
PDO est un api que PHP propose. Toi même, tu utilises une api, l'api mysql_.

Pour plus d'explication, tu peux lire également ceci "quel est le rôle de PDO, en comparaison à mysql_ et mysqli_".

stéph
0
Ok merci.

Cordialement
0
Rejoignez-nous