PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 11-08-2010 14:52:13

phpdos
Membre
Inscription : 22-12-2009
Messages : 72

Les accents sous PHP et dans MySql

Bonjour,

J'ai un formulaire en PHP...

Au début de mon formulaire, j'ai mis header en utf 8


<?php
header('Content-Type: text/html; charset=UTF-8');
?>

En suite dans l’Head de la partie HTML, j'ai fait la même chose :


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Je passe les variables ENT-QUOTES
Exemple :

           

$var_pomme_nomme=$_POST["pomme_nomme"];
      $var_pomme_nomme= htmlspecialchars($var_pomme_nomme, ENT_QUOTES);

Dans le champ de mon mySql (sous phpMyAdmin) :

Type : TEXT
Interclassement : utf8_general_ci


Lorsque l’utilisateur remplit "textarea" avec les accents, l'enregistrement dans le bd n'est pas bon. Voici l'exemple :

l'utilisateur remplit le "textarea" comme cela: je m'appelle luc côté Montréal

Mais dans bd ce que je vois : je m'appelle luc côté Montréal

Comment je peux remédier mon problème ?

Merci


Brave autiste
Cl... clown
Cl ? Cl ? Est-ce que j'ai une gueule de clowns ?
                  @*|*@

Hors ligne

#2 11-08-2010 16:20:03

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Les accents sous PHP et dans MySql

Bonjour,

Sache que de déclarer un entête de fichier en UTF8 n'est pas une condition suffisante pour qu'il le soit. Il faut en effet que le fichier concerné soit enregistré au même format. Ensuite, vu ton problème, tu n'utilises pas apparemment la bibliothèque PDO pour te connecter à la base de données. Donc saches que le module MySQL de PHP passe par l'interpréteur PHP pour envoyer les infos au serveur DB. Il faut donc aussi que ton PHP sur ton serveur soit configuré en UTF8 et ce, en deux endroits : via .htaccess sur la racine de ton site et via ton PHP.ini

++

EDIT/PS: Sinon tu as la possibilité de passer par UTF8_encode() et UTF8_decode() de PHP.

Dernière modification par Jc (11-08-2010 17:06:24)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 12-08-2010 10:22:04

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Les accents sous PHP et dans MySql

Salut,

Tu peu en plus préciser que l'encodge dans le champ textarea si tu veut être complet (tu ne sais pas quel est l'encodage du client au final).

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#4 18-08-2010 21:08:40

chassdo
Membre
Inscription : 18-08-2010
Messages : 6

Re : Les accents sous PHP et dans MySql

Pour moi un encodage en latin1 a résolu mon problème d'accent ...

Hors ligne

#5 19-08-2010 08:31:44

moijhd
Membre
Inscription : 13-06-2009
Messages : 167

Re : Les accents sous PHP et dans MySql

Hey !

Tu peux aussi essayer d'ajouter le code suivant (lors de la connexion) :

[code php]
<?php
/*
        $DB = mysql_connect(self::HOST, self::LOGIN, self::PASS);
        mysql_select_db(self::DATA_BASE_NAME, $DB);
*/
        mysql_query('SET NAMES utf8');
?>
[/code]

Hors ligne

#6 19-08-2010 17:54:53

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Les accents sous PHP et dans MySql


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#7 19-08-2010 18:50:25

phpdos
Membre
Inscription : 22-12-2009
Messages : 72

Re : Les accents sous PHP et dans MySql

Merci à vous,

Suite vos explication j'ai réglé une grande partie de mon problème

Voici la solution

En fait je ne devrais pas faire htmlspecialchars avant l'insertion de mes données dans la BD mais simplement lors de l'affichage donc ici c'est inutile


Ensuite avant la requête d'insertion il faut faire

moijhd a écrit :

Hey !

Tu peux aussi essayer d'ajouter le code suivant (lors de la connexion) :


<?php
/*
    $DB = mysql_connect(self::HOST, self::LOGIN, self::PASS);
    mysql_select_db(self::DATA_BASE_NAME, $DB);
*/

    mysql_query('SET NAMES utf8');
?>
 

Avec le code suivant tout va bien...

<?php //Récupération des input ( champ)  $_POST
  $var_ville = isset($_POST["ville"]) ? trim($_POST["ville"]) : '';
 
  $var_code_postal = isset($_POST["code_postal"]) ? trim($_POST["code_postal"]) : '';


    // Insertion en bdd si les variables (exemple [$var_ville] non vide
    if(!empty($var_ville))
      {
 
        //connection au serveur
        include"bd_db/connection.php";
        //sélection de la base de données et table
        include"bd_db/selection.php";
 
        //juste après la connexion encodage
        mysql_query("SET NAMES 'utf8'");
 
//------...............---ecriture cvs debut

// va voir plus bas

//------...............---ecriture cvs FIN

 

          //écriture de la requête d'insertion
        //$query = "INSERT INTO matable (champ_ville) VALUE ('" .mysql_real_escape_string($var_ville). "' )";

        $var_query = "INSERT INTO $table_db (bd_ville,bd_code_postal)";
   
        $var_query .= "VALUE ('" .mysql_real_escape_string($var_ville). "','" .mysql_real_escape_string($var_code_postal). "')";
       
        $result = mysql_query($var_query, $cnx) or die (mysql_error());
      }
?>

Ça marche avec MySql et PhpMyAdmin...

Par contre j'ai un souci dans un autre niveau...

Je écris aussi les donnés dans un fichier csv...

Lorsque j'ouvre mon fichier sous NotePad++, tout va bien...



Alors, l'utilisateur écrit dans le champ "ville" [ll'assomption côté] et je peux l'afficher correctement le résultat dans une page PHP et aussi dans phpMyMyAdmin
: [l'assomption côté]. C'est la même chose lorsque j'ouvre mon fichier csv sous NodePad++... Super content...

Par contre, lorsque j'ouvre le même fichier sous Excel, il y a un pépin :

je vois comme cela : [l'assomption  çôté] :oops:   :cry:


Comment je peux corriger mon histoire sous excel ?;)

voici mon code ....


<?php
// va voir plus haut
//------...............---ecriture cvs debut
            // Définit le fuseau horaire par défaut à utiliser.
              //voir [url]http://php.net/manual/fr/function.date.php[/url]
                // [url]http://www.php.net/manual/fr/timezones.america.php[/url]
        date_default_timezone_set('America/Montreal');

       
          // formatage du date avec fonction 'date'            
            //$var_date = date('d_m_Y--H_i_s_');       
         $var_date = date('d/m/Y');

         
         
               //Définir le fichier qui nous intéresse
               //$fichier_data_FD = "data/" . date("Ymd").".csv";
                  //                    . date('dmY') . '
                  //              ('Y-m-d\TH:i:s:u')
         $fichier_data_FD = "data/envoie.csv";
            //ou en mode "ajouter" à la fin d'info existant
            //créé si inexistant
        $ouvrir_FD = fopen($fichier_data_FD,"a");


       
       

          //La position du pointeur est dans le file   
        $pointeur_adresse_memoire = ftell($ouvrir_FD);


       
       
       
       
          //et est modifiable
        $pointeur_adresse_memoire = fseek($ouvrir_FD,$pointeur_adresse_memoire-10);
 

          //pour passer à la ligne, écrire \n  
        fputs($ouvrir_FD, $var_ville.';'.$var_code_postal.';'."\n");

       
       
       
          //Enfin fermer le fichier
        fclose($ouvrir_FD);
 

//------...............---ecriture cvs FIN
?>

Alors est-ce que vous avez des idées ?

Merci encore:)


Brave autiste
Cl... clown
Cl ? Cl ? Est-ce que j'ai une gueule de clowns ?
                  @*|*@

Hors ligne

#8 19-08-2010 19:51:13

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Les accents sous PHP et dans MySql

Excel ne travaille pas en utf8 tout simplement.
Il travaille en iso à la vue des caractères que tu obtiens.
Il te faudra donc enregistrer un fichier en iso pour les beaux yeux d'excel.

Hors ligne

#9 19-08-2010 21:40:54

phpdos
Membre
Inscription : 22-12-2009
Messages : 72

Re : Les accents sous PHP et dans MySql

j'ai trouve

Il fallait

utf8_decode()

fputs($ouvrir_FD, utf8_decode($var_ville).';'.utf8_decode($var_code_postal).';'."\n");

Merci

Bonsoir...

Dernière modification par phpdos (19-08-2010 21:41:37)


Brave autiste
Cl... clown
Cl ? Cl ? Est-ce que j'ai une gueule de clowns ?
                  @*|*@

Hors ligne

Pied de page des forums