[RESOLU] probleme caractere lors d envois dans la bdd

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] probleme caractere lors d envois dans la bdd

Re: probleme caractere lors d envois dans la bdd

par AB » 28 nov. 2012, 20:02

Personnellement après la connexion je fais toujours une requête SET NAMES UTF8 étant donné que mes formulaires et mon code sont en utf8.
Pour les versions PHP 5 >= 5.2.3 et MySQL version 5.0.7 ou supérieure, utilisez de préférence mysql_set_charset

Re: probleme caractere lors d envois dans la bdd

par Saian » 28 nov. 2012, 19:40

Petite information supplémentaire.
Il me semble que la connexion à la base de données elle même utilise un encodage par défaut qui n'est pas forcément l'encodage de la base de données (je crois que c'est de l'iso latin 1 en configuration lamp par défaut).
Ça peut poser des problèmes de caractères si par exemple on utilise des données UTF8 dans une requête mais que le SET NAMES est en ISO-8859-1. Le moteur SQL va croire que nos données sont en ISO-8859-1 et va donc les convertir en UTF8 alors que c'est déjà de l'UTF8.

Personnellement après la connexion je fais toujours une requête SET NAMES UTF8 étant donné que mes formulaires et mon code sont en utf8.

Re: probleme caractere lors d envois dans la bdd

par AB » 28 nov. 2012, 17:25

j ai finalement résolu mon problème en rajoutant CHARACTER SET LATIN1 dans mon load data et d ou mon interrogation car au debut je mettais UTF8 a la place de Latin1 et cela ne fonctionnait pas ,il me retournait comme resultat qu il ne m affichait plus le reste du champ a partir du 1 er ? rencontré
je ne comprend pas pourquoi en ayant tout en utf8 que je dois mettre LATIN1 pour que cela enregistre correctement dans ma base
Ah il y avait donc bien cette option disponible dans LOAD DATA... C'est normal donc que tu doive mettre CHARACTER SET LATIN1 car cela désigne l'encodage de ton fichier source, et non l'encodage de ta bdd :wink:

Re: probleme caractere lors d envois dans la bdd

par baddevil » 27 nov. 2012, 23:20

bonsoir AB et merci de l aide deja apporté

alors avec tes explications et d autre recherches j ai fais ceci
$row = 1;
$handle = fopen("CARDIFF_BBDZ.txt", "r");
while (($data = fgetcsv($handle, 10000, ";")) !== FALSE)
 {    
 $num = count($data);
     echo "<p> $num fields in line $row: <br /></p>\n";
         $row++;    for ($c=0; $c < $num; $c++) 
         {        
         
          $ligne= $data[$c];
          echo $ligne;
         }
  }
fclose($handle);
ce qui me retourne bien mon fichier sans soucis de caractères dans l echo

maintenant ou je seche c est comment j envoi ma variable ligne dans ma requete sql pour l inserer a ma base?

EDIT: j ai finalement résolu mon problème en rajoutant CHARACTER SET LATIN1 dans mon load data et d ou mon interrogation car au debut je mettais UTF8 a la place de Latin1 et cela ne fonctionnait pas ,il me retournait comme resultat qu il ne m affichait plus le reste du champ a partir du 1 er ? rencontré
je ne comprend pas pourquoi en ayant tout en utf8 que je dois mettre LATIN1 pour que cela enregistre correctement dans ma base

Re: probleme caractere lors d envois dans la bdd

par AB » 27 nov. 2012, 02:32

Quand tu affiche le fichier c'est normal que cela s'affiche bien car le contenu et le contenant sont cohérents au niveau de l'encodage.

Pour utiliser LOAD DATA il faudra sans doute traiter le fichier avant, comme je te l'ai dit.

Sinon tu peux ouvrir le fichier avec la fonction file et appliquer utf8_encode quand tu fais ton insertion sur les champs. Alternativement à la fonction file, tu peux peut-être utiliser fgetcsv ou encore SplFileObject. Pour SplFileObject il y a un exemple ici

Re: probleme caractere lors d envois dans la bdd

par baddevil » 27 nov. 2012, 01:12

pourtant quand j ouvre le fichier les accents si trouvent coorectement affichées
le load data je ne sais pas mais si y a une autre maniere de l envoyer pourquoi pas

Re: probleme caractere lors d envois dans la bdd

par AB » 27 nov. 2012, 01:02

Bah si l'éditeur avec lequel il est enregistré est configuré en iso, tu ne pourras pas le changer directement. Faudrait extraire le texte, le traiter avec utf8_encode puis l'enregistrer dans un nouveau fichier...

A moins que LOAD DATA dispose d'une option pour faire cela ... (je n'utilise pas cette fonction car elle pose souvent des pb de droits sur les serveurs distants)

Re: probleme caractere lors d envois dans la bdd

par baddevil » 27 nov. 2012, 00:39

Tu dois avoir un pb d'encodage différent entre ton fichier texte et ta bdd...
apres avoir parcouru via google pour ce genre de souci j ai pas trouvé comment le resoudre

ma bdd est en utf8_general_ci mais comment savoir comment est encodé mon fichier texte car j ai essayer de la mettre en utf8 mais ca me donne le meme resultat, ce fichier je le recois tel quel et c est lui qui doit me mettre a jour mes tables

Re: probleme caractere lors d envois dans la bdd

par AB » 27 nov. 2012, 00:15

Tu dois avoir un pb d'encodage différent entre ton fichier texte et ta bdd...

probleme caractere lors d envois dans la bdd

par baddevil » 26 nov. 2012, 19:51

bonjour à tous,

j ai un soucis de caracteres ... les é ce transforme en ?

j envoi a partir d un fichier txt mes données pour remplir ma table en faisant ceci
$sql = 'LOAD DATA LOCAL INFILE \'CARDIFF_BBDZ.txt\' REPLACE INTO TABLE `autotran` FIELDS TERMINATED BY \';\' ENCLOSED BY \'"\' ESCAPED BY \'|\' LINES TERMINATED BY \'\\r\\n\'';
  
  $result = mysql_query($sql);
ca rempli bien ma table mais tous les accents ce transforme en ?

comment puis je résoudre ce problème??

merci d avance pour l aide apporté