Page 1 sur 1

Problèmes encodage ...

Posté : 26 mai 2013, 20:19
par Grepher76380
Bonjour,

Voici mon problèmes :

Après avoir lu un tuto sur comment ajouté un systèmes de commentaire, je suis arrivée à le faire et même modifier pour un truck plus jolie. Mais j'ai un soucis d'encodage, mes "é" devienne des "é".

Voici mes code:

page addcom.php
<?php
if(!empty($_POST['pseudo']) and isset($_POST['mail']) and isset($_POST['contenu'])){

	require "news/config.php";
	mysql_connect($adresse, $nom, $motdepasse);
	mysql_select_db($database);
	$pseudo = mysql_real_escape_string(htmlspecialchars($_POST["pseudo"]));
	$contenu = htmlspecialchars($_POST['contenu']);
	$contenu = nl2br($contenu);
	$contenu = mysql_escape_string($contenu);
	$mail = mysql_real_escape_string(htmlspecialchars($_POST["mail"]));
	$url = mysql_real_escape_string(htmlspecialchars($_POST["url"]));
	$id_news = $_POST["id_news"];
	$sql="INSERT INTO commentaires (pseudo,url,mail,contenu,id_news) VALUES ('$pseudo','$url','$mail','$contenu','$id_news')";
	$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
	echo "votre commentaire à était posté.";
	header("refresh:5;url=services.php");
	}else{
		echo "Les champs obligatoire ne sont pas remplis ...<br />";
		echo "Vous allez être redirigé vers la page news dans 5 secondes.";
		header("refresh:5;url=services.php");
	}
?>
et voici ma page news :
<?php
	
	/*
	Connexion �  la BDD
	*/
	require "news/config.php";
	mysql_connect($adresse, $nom, $motdepasse);
	mysql_select_db($database);
	mysql_query("SET NAMES UTF8");
	/*
	Affichage d'une news en particulier
	*/

	if(isset($_GET['id'])){
	
		$id =$_GET['id'];
		/*
		Si l'id !=0, intval renvoie quelque chose de bon
		*/
		if($id != 0){
			
			$sql = 'SELECT * FROM news WHERE id='.$id.'';
			$req = mysql_query($sql) or die(mysql_error());
			$data = mysql_fetch_assoc($req);?>
			
			<table border="1" width="100%" bordercolorlight="#000000" bordercolordark="#000000" style="border-collapse: collapse" bgcolor="#E6E6E6" cellpadding="0" cellspacing="0">
 
<tr><td style='text-align:left;'><h6><a><?php echo stripslashes($data['titre']);?></a></h6></td><td style='text-align:right;'><h7><b>écrit le : <?php echo date("d/m/Y à G:i", strtotime($data['date'])); ?>, Par : Grepher76</b></h7></td></tr> 
</table><hr />
		<p><b><?php echo stripslashes($data['contenu']); ?></b></p><br /><hr />
					<h2><center>Commentaire :</center></h2>
		<?php
			$sql = 'SELECT * FROM commentaires WHERE id_news='.$id.' ORDER BY id ASC';
			$req = mysql_query($sql) or die(mysql_error());
			while($data2=mysql_fetch_assoc($req)){
				echo "<img src=\"images/commentaire.png\" width=\"25\" hight=\"25\"><b> Posté par ".stripslashes($data2['pseudo'])." :</b>";
				echo "<p>".stripslashes($data2['contenu'])."</p>";
				echo "<hr />";
				}
				?>
				<u><center><h2>Ajouter un commentaire :</u></h2><br />

				<form action="addcom.php" method="post">
					Pseudo : *<br /><input type="text" name="pseudo" /><br />
					URL : <br /><input type="text" name="url" /><br />
					E-mail : *<br /><input type="text" name="mail" /><br /><br />
					Commentaire : *<br /><textarea name="contenu" style="width:500px; height:200px;"></textarea><br /><br />
					<input type="submit" name="envoyer" value="Envoyer" />
					<input type="hidden" name="id_news" value="<?php echo $data['id']; ?>" /></center><br /><br />
					* champs obligatoire
				</form><hr />
        <div align="center"><a href="http://miki-heberg.com/">Retour au Site</a></div>
			
		<?php	
		}
		/*
		id ==0, intval renvoie certainement qqch de faux
		*/
		else
		{
			echo "Erreur";
		}
	
	}
	/*
	Listage des 5 derni�¨res news
	*/
	else
	{
	
	$sql = "SELECT COUNT(id) as nbArt FROM news";
	$req = mysql_query($sql) or die(mysql_error());
	$data = mysql_fetch_assoc($req);
	
	$nbArt = $data['nbArt'];
	$perPage = 5;
	$nbPage = ceil($nbArt/$perPage);
	
	if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p']<=$nbPage){
		$cPage = $_GET['p'];
	}
	else{
		$cPage =1;
	}
	$sql = "SELECT * FROM news ORDER BY date DESC LIMIT ".(($cPage-1)*$perPage).",$perPage";
	$req = mysql_query($sql) or die(mysql_error());
	
		echo '<center><h1>Les dernières news !</h1></center><br /><br /><hr />';
	
	while($data = mysql_fetch_assoc($req)) { ?>
    	<table border="1" width="100%" bordercolorlight="#000000" bordercolordark="#000000" style="border-collapse: collapse" bgcolor="#E6E6E6" cellpadding="0" cellspacing="0">
 
<tr><td style='text-align:left;'><h6><a href="services.php?id=<?php echo $data['id']; ?>"><?php echo stripslashes($data['titre']);?></a></h6></td><td style='text-align:right;'><h7><b>écrit le : <?php echo date("d/m/Y à G:i", strtotime($data['date'])); ?>, Par : Grepher76</b></h7></td></tr> 
</table><hr />
		<p><b><?php echo stripslashes($data['description']); ?></b></p><br />
		<b><p style='text-align:right;'><a href="services.php?id=<?php echo $data['id']; ?>"><span><span>Lire La suite ...</span></span></a></b></p><hr /><br />
        
<?php		
	}
	echo '<center><p>[ Page :';
// Boucle sur les pages
for ($i = 1 ; $i <= $nbPage ; $i++) {
	if ($i == $cPage ){
		echo " $i ";
		}
	else{
		echo " <a href=\"?p=$i\">$i</a> ";
}
}
echo ' ]</center></p>';
	}
	
	?>
Mes base de donnée sont en "utf8_general_ci".
mon site en utf-8.

Je c'est pas d'ou cela provient pouvez vous m'aider ?

Cordialement Grepher76380

Re: Problèmes encodage ...

Posté : 26 mai 2013, 20:46
par J-oxi
Salut,
tu peux utilisé
print_r(iconv_get_encoding ()); 
pour vérifier si tes pages sont bien encodé.

au pire utilisé sur tes variable.
utf8_decode($var)

Re: Problèmes encodage ...

Posté : 26 mai 2013, 21:16
par Grepher76380
Bonjour,

Merci de ta réponse,
print_r(iconv_get_encoding ()); revois = Array ( [input_encoding] => ISO-8859-1 [output_encoding] => ISO-8859-1 [internal_encoding] => ISO-8859-1 ).

Alors pour mon problèmes j'ai trouvée cette solution
	mysql_query("SET NAMES UTF8");
Sa fonctionne plus de problèmes d'encodage,

Je voudrait s'avoir si pour vous mon code a l'air correct et sécuriser contre les fail ?

Cordialement grepher76

Re: Problèmes encodage ...

Posté : 26 mai 2013, 21:35
par J-oxi
Je ne suis pas un spécialiste des relations entre php et les bases de données. Et j'utilise PDO ( ou du moins essaye.. ) donc je ne pourrai te dire vraiment.

Re: [RESOLU] Problèmes encodage ...

Posté : 27 mai 2013, 12:32
par ...
Bonjour,

J'ai le même problème... et je voulais te demander où est-ce que tu met ce code ?
mysql_query("SET NAMES UTF8");
Merci.

Re: [RESOLU] Problèmes encodage ...

Posté : 28 mai 2013, 00:29
par Grepher76380
Bonjour,

Tu place se code juste après la connexion mysql ...

Le SET NAMES indique avec quel jeu de caractères on envoie les données à MySQL, quel que soit le jeu utilisé dans la colonne cible.

Autrement dit, si j'envoie à MySQL des données UTF8 dans une table latin1, il fait automatiquement la conversion. Par contre, si je lui envoie des données UTF8 en faisant un SET NAMES latin1, je lui fais croire que mes données sont en latin1, donc il ne convertit plus et on se retrouve avec n'importe quoi...

Je te montre :
	mysql_connect($adresse, $nom, $motdepasse); //connexion a la base de donée
	mysql_select_db($database); //connexion a la base de donée
	mysql_query("SET NAMES UTF8"); // le "SET NAMES"
Voilà désoler du retard je vient juste de rentré.

Cordialement Grepher76380.