Php problème d'encodage ?

Résolu/Fermé
lucas - 12 oct. 2011 à 13:18
 lucas - 12 oct. 2011 à 14:45
Bonjour,

Voila je suis actuellement en train de travailler sur un projet php avec une bdd phpmyadmin et il se trouve que j'ai un problème lors de l'insertion de données, je vous met le code de ma page entier afin que l'on puisse parler des mêmes lignes sachant que les intéressantes sont à partir de 125 .
Donc mon problème est que lorsque je met des phrases contenant des accents dans $event ma bdd ne les prend pas et je me retrouve avec des caractères du style 'évè'

Je précise que l'interclassement pour ce champ est latin1 sweedish ci et le Jeu de caractères pour MySQL: UTF-8 Unicode (utf8) .

Voila je vous remerci d'avance .

<?php session_start();?>
<?php
include('class.auth.php');
if(empty($_SESSION['Auth'])) // Si l'utilisateur n'est pas connecté.
{
	header('location: forbidden.php');
	exit();
}

?>
<?php $prenom = $Auth->user('prenom');
	    $id_user =$Auth->user('id_user'); ?>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>formulaire</title>
       <link rel="stylesheet" href="theme/menu.css" type="text/css" media="screen" />
         <script type="text/javascript" src="js/jquery.js"></script>
         <script type="text/javascript" src="js/menu.js"></script>
        <link rel="stylesheet" type="text/css" href="style.css" />
       <tbody>
	 <div id="conteneur">
     <ul class="menu menu-1">
	<li><a href="logout.php">Sortir</a></li>
      	<li><a href="#">Visualiser</a></li>
	<li><a href="formulaire.php">Ajouter</a></li>
     </ul>
   
  </div>
	
	<!-- Début des différents formulaire permettant la saisie de l'évent, la date et de l'horaire-->
	
       <form method="post" action="formulaire.php">
        
    <fieldset title='Ajouter un evenement'>
<label for='event'>Entrer votre evenement</label>
<input type='text' name='event' /><br>
            
             
    <label for='jour'> Date : </label> <select name="jour">
    <option value="#"/>Jour</option>
    <?php
      $i=1;
        while($i<=31)
        {
            if($i<10)
                {
                    $i='0'.$i;
                }
                ?>
        <option value="<?php echo $i;?>"/><?php echo $i?></option>
        <?php
        $i++;
        }
        ?></select>

<select name='mois'>
    <option value="#"/>Mois</option>
    <option value="01"/>Janvier</option>
    <option value="02"/>Fevrier</option>
    <option value="03"/>Mars</option>
    <option value="04"/>Avril </option>
    <option value="05"/>Mail</option>
    <option value="06"/>Juin</option>
    <option value="07"/>Juillet</option>
    <option value="08"/>Aout</option>
    <option value="09"/>Septembre</option>
    <option value="10"/>Octobre</option>
    <option value="11"/>Novembre</option>
    <option value="12"/>Decembre</option>
</select>
    <?php
    $annee = date( 'Y'); ?>
   <select name='annee'>
	<option value="#"/>Annee</option>
	<option value="<?php echo $annee;?>"/><?php echo $annee;?></option>
	<option value="<?php echo $annee+1;?>"/><?php echo $annee+1;?></option>
   </select><br>
   
   
 <label for='heure'>Horaire de debut : </label>
   
<select name='heure'>
    <option value="#"/>Heure</option>
	<?php
	    $h=1;
	    while($h<=24)
	    {
		if($h<10)
		    {
			$h='0'.$h;
		    }
	    ?>
	    <option value="<?php echo $h;?>"/><?php echo $h?></option>
<?php
	    $h++;
	    }
?>
</select>
   
<select name='minute'>
	<option value="#"/>Min</option>
	<?php
	    $m=1;
	    while($m<=60)
	    {
		if($m<10)
		    {
			$m='0'.$m;
		    }
	    ?>
		   <option value="<?php echo $m;?>"/><?php echo $m?></option>
<?php
	   $m++;
	    }
?>
</select>
    
   <br> <input type ="submit" value="envoyer" name="envoyer" ><br>
           
           
          
       </form>
       
<!-- Début des différents traitement (collecte, concaténation ...)-->

<?php
           if(isset($_POST["envoyer"]))
	{
	    $event = $_POST['event'];
	    $jour = $_POST['jour'];
	    $mois = $_POST['mois'];
	    $annee = $_POST['annee'];
	    $heure = $_POST['heure'];
	    $min = $_POST['minute'];
	    $date = $annee.'-'.$mois.'-'.$jour;
	    $horaire = $heure.'H'.$min;
	    $event = $horaire.' - '.$event.' - '.$prenom;
?><br>
		
<!--  Insertion dans la base de donnée-->

                <?php
                    try
                    {			 
			$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
			$bdd = new PDO('mysql:host=localhost;dbname=tuto', 'root', '', $pdo_options);
			$req = $bdd->prepare('INSERT INTO events (id_event, title, date, id_user) VALUES (\'\',:event, :date, :id_user)');
			$req->execute(array(
							'event'=>$event,
							'date' => $date,
							'id_user'=> $id_user
							));
			 echo 'l evenement '.$event.' à bien été ajouté';
                    }
                    catch(exception $e)
			{
			    die ('erreur : '.$e->getMessage());
			}
        }
           ?>
	</fieldset>
       
        </tbody>
    </head>
</html>


A voir également:

3 réponses

jojo673 Messages postés 210 Date d'inscription lundi 19 septembre 2011 Statut Membre Dernière intervention 9 avril 2014 44
12 oct. 2011 à 13:51
Bonjour,
Il faut tout d'abord que la page soit encodé en UTF8, le meilleur moyen de le savoir est d'ouvrir le fichier avec notepad++ onglet encodage, sinon les convertir en UTF8.
Ensuite il faut que la bdd soit également en UTF8, pour cela on peut par exemple utiliser cette manip :
$bdd= new PDO('mysql:host=localhost;dbname=test', 'root', '', array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'));
0
Bonjour,
Alors pour répondre à tes questions dans l'ordre :
Page encodé en UTF8 : j'ai cette ligne qui le fait <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
et pour la bdd voila ce qui y est écrit : MySQL

Serveur: localhost (localhost via TCP/IP)
Version du serveur: 5.1.53-community-log
Version du protocole: 10
Utilisateur: root@localhost
Jeu de caractères pour MySQL: UTF-8 Unicode (utf8)
0
jojo673 Messages postés 210 Date d'inscription lundi 19 septembre 2011 Statut Membre Dernière intervention 9 avril 2014 44
12 oct. 2011 à 14:30
La ligne
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
permet de dire que les caractères affichés sont en UTF8, mais si le fichier n'est pas encodé en UTF8 il y aura des problèmes d'affichage.
0
j'alimente un peu mon post, je me suis rendu compte que le véritable problème n'étais pas vraiment comment été stocké les caractères dans la bdd mais plutot la facon de les sortir .
Donc est ce que lorque je fait mon echo je dois mettre la fonction utf8_encode puis decode ? ou autre chose ? afin de rendre lisible mon extraction ?
0
J'ai trouvé les réponses à mes questions, donc pour ceux qui aurai le même problème allez faire un tour sur ce sujet http://www.commentcamarche.net/forum/affich-7000255-probleme-utf-8-php-phpmyadmin

j'ai mis au bon format ma table avec les alter table et j'ai utilisé la fonction
utf8_decode($mavariable) .
0