IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Les accents sous PHP et dans MySql [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut 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


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?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 :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    Je passe les variables ENT-QUOTES
    Exemple :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $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

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    De la lecture :
    http://j-willette.developpez.com/tut...-site-en-utf8/

    Il ne faut pas utiliser htmlspecialchars sur des données qu'on insère dans une base.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    380
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 380
    Points : 66
    Points
    66
    Par défaut
    Pareillement dans PhPMyadmin, les accents et autres caractères spéciaux ne s'écrivent pas correctement
    mais lorsque tu les récupères pour les afficher sur ta page, ceux ci s'affichent de manière totalement correcte !

    Et effectivement, en plus comme le dis très justement Sabotage => Il ne faut pas utiliser htmlspecialchars sur des données qu'on insère dans une base.
    L'informatique, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut
    Merci à vous (cyrux et sabotage) ,

    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');
    ?>
    [/code][/quote]
    [/q][/q]


    Avec le code suivant tout va bien...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    	//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...

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

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


    Comment je peux corriger mon histoire sous excel ?

    voici mon code ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    / 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

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    70
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 70
    Points : 61
    Points
    61
    Par défaut
    bonsoir

    utf8_decode()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fputs($ouvrir_FD, utf8_decode($var_ville).';'.$var_code_postal.';'."\n");

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    316
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2010
    Messages : 316
    Points : 155
    Points
    155
    Par défaut Merci fahdo
    Merci fahdo,

    Ça marche

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/08/2008, 14h19
  2. [MySQL] Les conventions sous PHP
    Par kenny49 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/08/2006, 11h31
  3. comment inserer les entrée d'une formulaire dans MySQL
    Par horri dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 28/02/2006, 19h16
  4. Retirer les accents d'une chaine avec MySQL
    Par orus8 dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/02/2006, 16h47
  5. Comment afficher les accent sous mysql v4.0.13
    Par buildozer dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/06/2003, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo