Auteur Sujet: Les accents sous PHP et dans MySql  (Lu 7802 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne aspkiddy

  • Débutant
  • *
  • Messages: 18
Les accents sous PHP et dans MySql
« le: 11 Août 2010 à 15:56:00 »
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&#039;appelle luc côté Montréal

Comment je peux remédier mon problème ?

Merci

Hors ligne bruno58

  • Habitué
  • **
  • Messages: 109
Re : Les accents sous PHP et dans MySql
« Réponse #1 le: 11 Août 2010 à 16:02:49 »
Salut

Essaye en utilisant utf8_encode() et utf8_decode()

http://php.net/manual/fr/function.utf8-encode.php
http://www.php.net/manual/fr/function.utf8-decode.php

>Ton utilisateur renseigne ton textarea
>utf8_encode();
>t'enregistres en bd
>tu récupères tes donnés
>utf8_decode();
>Tu affiches

Sans garantie   ^_^

Hors ligne aspkiddy

  • Débutant
  • *
  • Messages: 18
Re : Les accents sous PHP et dans MySql
« Réponse #2 le: 19 Août 2010 à 19:59:47 »
Merci à Bruno 58 ,

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


[code php]
<?php

mysql_query('SET NAMES utf8');
?>

[/q][/q]


Avec le code suivant tout va bien...;);)

//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" [l'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...:D

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

je vois comme cela : [l&#039;assomption  çôté] :oops:   :cry:


Comment je peux corriger mon histoire sous excel ?;):cry:

voici mon code ....
/ va voir plus haut
//------...............---ecriture cvs debut
// Définit le fuseau horaire par défaut à utiliser.
//voir http://php.net/manual/fr/function.date.php
// http://www.php.net/manual/fr/timezones.america.php
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:)

Hors ligne aspkiddy

  • Débutant
  • *
  • Messages: 18
Re : Les accents sous PHP et dans MySql
« Réponse #3 le: 19 Août 2010 à 22:44:31 »
j'ai trouve

Il fallait

Citer
utf8_decode()



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

Merci

Bonsoir...