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 :

formulaire et utf-8


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut formulaire et utf-8
    bonjour j'aimerai utiliser l'utf-8 mais j'ai des erreurs

    j'ai une page index.php (codé en UTF-8 sans bom).

    sur cette page se trouve un formulaire pour modifier son profil.

    exemple input prénom. si je rentre élodie dans la base de données je me retrouve avec : élodie pourtant dans mysql le type d'encodage de ce champ est de: utf8_unicode_ci. J'utilise un envois avec ajax j'ai encodé le fichier .js en ( UTF-8 sans bom), et la page script.php qui fait les traitements aussi.
    j'ai rajouté à la page script.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    session_start();
    header( 'content-type: text/html; charset=utf-8' );
     
    //code traitements...
    dernière chose juste avant la requête j'ai mis cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_set_charset( 'utf8' );
    j'ai suivi le tuto de developpez.com dans le magazine mais apparement il y a quelques choses que je n'ai pas compris.

    PS: je travail en localhost, php 5.3, mysql 5.1.36

    Merci de m'aiguiller

  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
    Par défaut
    pourtant dans mysql le type d'encodage de ce champ est de: utf8_unicode_ci
    utf8_unicode_ci n'est pas un encodage mais un interclassement.

    As-tu essayé sans utiliser ton traitement ajax pour voir si le problème est la ou ailleurs ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    alors je viens de tester sans passer par ajax juste une modification classique et j'ai toujours l'erreur.

    suite à mysql_set_charset( 'utf8' );

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Warning: mysql_set_charset() [function.mysql-set-charset]: Access denied for user 'Système'@'localhost' (using password: NO) 
     
    Warning: mysql_set_charset() [function.mysql-set-charset]: A link to the server could not be established
    avec ou sans mysql_set_charset( 'utf8' );
    ça ne marche pas.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 89
    Par défaut
    bonjour,

    j'ai peut être ratté quelque chose mais,

    si je rentre élodie dans la base de données je me retrouve avec : élodie
    l'affichage incorrect de l'encodage, tu le retrouve ou? dans le navigateur ou dans la base?
    parceque ce genre d'affichage est obtenu quand par exemple le navigateur crois avoir de l'iso alors qu'en fait les données sont de l'utf8.
    [rq : 2 caractères sont affichés car en iso un caractère est encodé sur 8bits (1octet, c plus simple...) alors qu'en utf8 1 caractère est encodé sur 2 octets]

    donc 1ère chose a vérifier : encodage dans la base (est-il correct? tu peut passer par des outils externe mysql query browser, phpmyadmin, netbeans!...)
    puis encodage dans le navigateur : tu peut jouer avec des utf8_encode/decode pour savoir ou tu en est avec l'encodage dans ton navigateur.
    et enfin encodage utilisé lors des échanges avec la base de données.

    Dans un sens je te conseillerais même de te créer un fichier header.php que t'utilise en require_once dans tes pages ou tu définis dans le header l'encodage à utiliser, comme ça t pénard (enfin presque...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    en ce qui concerne la base tu dois pouvoir jouer avec des trucs du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CHARACTER SET utf8
    COLLATE utf8_bin;
    character set : te définis l'encodage
    collate : te permet de définir la façon dont mysql va mannipuler les données texte pour les recherches, index, tris etc...

    une des pistes à creuser aussi du côté de la base est le jeu de caractères utilisé pour l'échange des données, tu peut le fixer en utilisant qui te permet de fixer trois chose, le jeu de caractère qui est utilisé par le client pour envoyer les données au serveur, celui utilisé par le serveur pour envoyer les données au client et le jeu de caractères dans lequel le serveur traduira la requete client.

    de plus, si je ne me plante pas php travaille nativement en iso, l'utf8 n'arrivera qu'avec la v.6 de php, pareil avec apache : iso en natif (de ce côté là tu le fixe avec ton header donc c cool (normalement prend même le pas sur le meta...)

    bon, je t'ai jetté un peu pêlle mèlle les points sur lesquels j'aai déja galéré. c'est vrai que ce n'est pas toujours si simple ces histoires d'encodage... en espérant t'avoir été utile!

    ps :
    pour le message de ton dernier post : tu as un problème d'établissement de la connexion avec ton serveur mysql, mot de passe, configuration etc... (phpmyadmin : gestion des privilèges, vérifie l'utilisateur et ses droits d'accès à ta base cible en premier point)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 625
    Par défaut
    J'ai des soucis au niveau de la base de données mais aussi à l'affiche dans l'input.

    explication:

    j'ai un formulaire ou je peux modifier le prénom en ajax, par défaut dans le value du input s'affiche avec $_SESSION['prenom']; si par exemple j'écris élodie on a vu plus haut que dans la base de données il y ait enregistré élodie.
    Pourtant malgrè que la table membre soit en interclassement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
    j'ai affecté au champ prénom:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     membre_prenom varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL
    ensuite pour garder à jour le prénom de la session je fais comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $_SESSION['prenom'] = htmlentities($_POST['prenom']); // élodie
    $_SESSION['prenom'] = $_POST['prenom']; //élodie
    comme sa si j'affiche le prénom dans une autre des pages le prénom reste à jour. Mais même la il affiche: élodie.

    le problème c'est que si j'enlève htmlentities() je ne protège plus l'information.

    je ne peux pas utiliser SET NAME UTF8 car utilisant une version php récente je dois utiliser mysql_set_charset( 'utf8' );

  6. #6
    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
    Par défaut
    je ne peux pas utiliser SET NAME UTF8 car utilisant une version php récente je dois utiliser mysql_set_charset( 'utf8' );
    Tu fais bien ce que tu veux.
    Par contre pour l'un ou l'autre il faut que tu aies une connexion active, ce qui ne semble pas être le cas vu l'erreur que tu nous avais cachée.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

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

Discussions similaires

  1. Formulaire en utf-8 remplaces accents par des "?"
    Par seoguy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 25/04/2013, 16h06
  2. Encodage UTF-8 dans formulaire et preg_replace
    Par dawadam dans le forum Langage
    Réponses: 14
    Dernier message: 01/09/2009, 00h00
  3. [Formulaire] utf-8 encodage
    Par Luffy49 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 17/09/2008, 20h48
  4. Formulaire en UTF-8
    Par nazoreen dans le forum Langage
    Réponses: 9
    Dernier message: 14/11/2006, 04h07
  5. [MySQL] Pb formulaire PHP et UTF-8
    Par fguigui dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/05/2006, 19h22

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