Problème accent lors de la saisie et de la recuperation de données

livinho38 Messages postés 29 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 24 juillet 2009 - 7 avril 2009 à 13:40
tchconst Messages postés 10 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 11 octobre 2011 - 11 oct. 2011 à 18:51
Bonjour,

pour commencer j'ai un formulaire pour entrer des données, une fois celle ci validé elle sont entrée ds la base de données
mais, si par exemple je rentre Direction générale, dans la table il y aura direction générale

j'ai des liste déroulante qui se creer en fonction des données de la bdd, celle ci sont bien affiché si dans la table de données c'est : générale car si je rentre manuelement générale ds la table, dans la liste déroulante je trouverau g?n?rale...

Maintenant, je veux récuperer les données de la table puisque elles corresponde à des nom de repertoire.. et la vien donc un autre problème... car si clique sur ma liste déroulante (qui affiche pourtant bien générale) il me dit que le dossier est introuvable, or sa marche dès qu'il n'y a pas d'accent...
quelq'un a une solution pour que les données soir entrée ds le bon format? snas qu'apres ça m'affiche des ?

ma base est en <dfn title="Unicode (multilingue), insensible à la casse">utf8_general_ci</dfn>

merci d'avance
oliv

10 réponses

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
7 avril 2009 à 17:57
Salut,

Déjà avoir des accents dans des noms de dossiers / fichiers n'est pas trop recommandé.
Tu as un problème d'encodage quelque part. Vérifie tous les softs qui entrent en jeu : encodage de la page web, php, mysql, ton éditeur de code et même l'interface de gestion de la base (phpMyAdmin, ...)
Tous doivent être en UTF8.

Kohntark -
0
livinho38 Messages postés 29 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 24 juillet 2009 1
7 avril 2009 à 18:40
tout d'abord merci de ta réponse,


c'est bien un problème d'encodage, mais je comprends pas pourquoi


ma page php est en utf8 et maintenant ma base aussi...


pourtant quand je saisie les données ds le formulaire je suis obliger de faire : utf8_encode($nom) .... pour que dans la table j'obtient bien le bon terme (exemple: Comptabilité et non Comptabilitãc comme sa fait sinon)


ensuite apres l'encodage j'ai les bon resultat dans la base SQL,


mais des que je crée une liste déroulante contenant les données de la table,  ou meme si je fait simplement le print d'un select * FROM mabase


et bien la maintenan j'obtien un resultat en latin 1 puisque tout les "é" se trouve en ? par exemple... sa reste pas en utf8


 je comprend pas pourquoi d'une je suis obliger de passer quand mme par l'encodage, et deux, pourquoi quand la données est bonne dans la table, la requete ne donné pas un resultat similaire...
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
8 avril 2009 à 05:58
ma page php est en utf8 et maintenant ma base aussi...

=> tu veux dire ta page HTML ?
Qu'en est il de l'encodage PHP ?
Tu es bien en default_charset UTF-8 dans le php.ini ?

Kohntark -
0
livinho38 Messages postés 29 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 24 juillet 2009 1
8 avril 2009 à 08:30
je travail sous joomla, je  viens de regarder les parametre php, je suis apr default en no_value...
cependant quand je regarde le code source de la page j'ai bien :
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

qui m'indique que je suis en utf8...
d'ou l'incompréhension que un cou c'est en utf8, pr rentrer ds la base il faut quand meme encoder comme cité ds mon précédent message, et quand je fait une requete le resultat est en latin1...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
9 avril 2009 à 23:15
Quelques précisions :
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

Cette balise ne fait qu'indiquer au navigateur comment sont encodés les caractères. C'est le créateur du site qui la renseigne (dans ton cas c'est joomla) Si elle désigne l'encodage en utf-8 et que ta page est en iso_8859 tu risques d'avoir des problèmes.

Quand je dis :
"Vérifie tous les softs qui entrent en jeu : encodage de la page web,
php, mysql, ton éditeur de code et même l'interface de gestion de la
base (phpMyAdmin, ...)"
<meta http-equiv="content-type" content="text/html; charset=utf-8" />


=> correspond à l'encodage déclaré de ta page web

php
> il faut regarder dans le php.ini, tu dois avoir default_charset "UTF-8"

mysql
> ça semble être OK, mais "<dfn title"Unicode (multilingue), insensible à la casse">utf8_general_ci" </dfn>n'est pas l'encodage de la base. Il faut que tu regardes la valeur de "jeu de caractères pour mysql" dans "home" sous phpmyadmin.

éditeur de code
Ton éditeur de code peut également poser pb. En effet la plupart d'entres eux permettent de définir l'encodage des caractères.

interface de gestion
Attention là aussi c'est important si tu insères manuellement des données, et ça l'est également pour l'affichage.

Cordialement,

Kohntark -
0
livinho38 Messages postés 29 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 24 juillet 2009 1
10 avril 2009 à 08:30
alors pour repondre a tes explication ,
dans le home de mysql j'ai : Jeu de caractères pour MySQL: UTF-8 Unicode
(utf8)
mes bases sont en utf8-general-ci.

pour regler un de mes problème j'ai rajouter la ligne:  mysql_query("SET NAMES 'utf8'"); en dessous de ma ligne de connexion à la base. cependant je ne sais pas si c'est une bonne solution.
ceci règle le problème de saisie (mes données entrées par le formulaire se retrouv telle quelle dans la base, exemple: comptabilité aparait en comptabilité.)
mes listes déroulantes créées en fonction des données de mes table sont aussi lisible ( pas de caractère bizar)
si par exemple dans ma premiere table jai le domaine comptabilité, dans la table fichier j'ai compte.pdf,
si je veux afficher /comptabilité/compte.pdf (suivant les choix de mes liste deroulante) ça marche
par contre si je veux compter le nombre de fichier (physiquement) qu'il y a dans le dossier comptabilité, je doit faire un utf8_decode($domaine) pour que comptabilité soit transformer en comptabilit? et que je puisse alors entrer dedans et faire mes test (if_existe, compter etc etc)

pr résumer, je sais pas si SET NAME... est une bonne solution
et pourquoi /comptabilité ne fonctionne pas pr aler faire mes test physique (dans les dossiers et non dans les bases) ne marche que sous la forme comptabilit? alors que les lien d'ouverture de fichier eux fonction sans le utf8_decode.

je sais pas si j'ai bien eté clair,c'est un peu long mais j'ai essayer detre precis.

Crdlmt
olivier
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
10 avril 2009 à 16:28
Pour être honnête je n'ai pas tout compris.

Dans phpMyAdmin / home onglet "variables" regarde quelles sont les valeurs pour :
character set client
character set connection
character set database
character set results
character set server
character set system

Le default_charset du php.ini est il maintenant correct ??

<gras>si je veux compter le nombre de fichier (physiquement) qu'il y a dans le dossier comptabilité</gras>
=> comment procèdes tu pour faire ça ? si tu peux donner un exemple de code pour bien comprendre

Cordialement,

Kohntark -
0
livinho38 Messages postés 29 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 24 juillet 2009 1
10 avril 2009 à 16:47
je n'ai pas la main sur les fichier de config php, je vias faire la demande de modification elle sera faite d'ici peu
sinon voici un code exemple ( il me sert a tester klk fonctionalité, mais n'est en aucun cas le code qie je me servirai au final) quand celui ci marchera alors je pourrai allé plus loin. en rouge la conversion que je suis obliger de faire pour que le $nomact soit utilisable pour entrer dans les repertoire, (nomtype=repertoire nomact=sous repertoir de type)
pour le moment je choisi un type, une activité et ça m'affiche les fichier qui existe dans le repertoire, et indique lesquel sont dans la base de donnée.

function compteurfichier($req, $type, $act, $nmtype, $nmact){
    $nomact=utf8_decode($nmact);
    $nomtype=utf8_decode($nmtype);
    $compteur=0;

    $i=0;

    $dir= './jumi/documents/'.$nomtype.'/'.$nomact.'/' ;
    print_r('repertoire : '.$dir.'

');
    $liste = opendir($dir);
   
   
    while ($fichier= readdir($liste)){
   
        $extension1=strrchr($fichier,'.');
        $extension2=substr($extension1,1) ;         
        $fichierSansExt = basename($fichier, $extension1);

   
        if ($fichier != '.' && $fichier!='..' && $extension1!='.db'){
           
            print_r($fichierSansExt.'
');
       
            $req='SELECT * FROM jos_qualite_fichier WHERE jos_qualite_fichier.nom="'.utf8_encode($fichierSansExt).'" AND jos_qualite_fichier.extension="'.$extension2.'"';
           
            print_r('
requete:  '.$req . '

');
            $res=mysql_query($req);
       
            if ($res){
                while($var = mysql_fetch_assoc($res)){
                print_r(''.$var['nom'].' est dans la table dans l\'activite : '.$var['id_activite'].'
');
                }
            }
            $compteur++;
        }
   
    }
    print_r('nombre total: '.$compteur);
   
}
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
10 avril 2009 à 17:29
Pourquoi faut il répéter 4 fois qu'il faut que tu regardes la config du php.ini pour que tu me donnes une réponse ?
N'y vois là aucune méchanceté de ma part mais si tu souhaites régler ton problème il faut peut être tenir compte des commentaires, et répondre aux questions.

As tu vu que j'ai écrit :
Dans phpMyAdmin / home onglet "variables" regarde quelles sont les valeurs pour : [...]
En fait ça me paraissait évident, ...  mais j'attendais une réponse

Essai d'ajouter ça au tout début de ton code :
ini_set('default_charset', 'utf-8');

Cordialement,

Kohntark -
0
tchconst Messages postés 10 Date d'inscription lundi 15 septembre 2008 Statut Membre Dernière intervention 11 octobre 2011
11 oct. 2011 à 18:51
Des centaines de pages très compliquées et donc :
Pour écrire les accents les ' et les " etc., les 3 niveaux d'écriture HTML, PHP et MySQL doivent être UTF-8 dans TOUS les documents :
1) pages HTML : après le <HEAD>
<meta http-equiv= "Content-Type" content="text/html; charset= UTF-8 " />
2) scripts PHP : on passe tous les champs POST à la moulinette des Spécial Caractères
foreach ($_POST as $key => $value)
{
$_POST[$key] = htmlspecialchars($value,ENT_QUOTES," UTF-8 ");
}
3) dans les requêtes, les INSERT et les UPDATE utilisent directement les variables
$maValeur = $_POST['monChamp'] ;
"insert ... update ... maColonne='$maValeur' ... "
4) dans la base MySQL : les champs VARCHAR qui doivent recevoir des accents doivent être
Interclassement = utf8_general_ci

Pour lire ce même texte accentué, pas besoin de décoder quoi que ce soit, on envoie ce texte illico dans la page via un SELECT ordinaire >>> on ne touche à rien dans la base, même si le texte y est incompréhensible, ça c'est le job du Browser/HTML.
Bon, maintenant, le blème est le substring() du texte qui contient ces incongruités de @Ã&# et consort, une affaire à suivre...
TCH.
0
Rejoignez-nous