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

PHP & Base de données Discussion :

Caractère en trop dans la BDD [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Caractère en trop dans la BDD
    Bonjour,

    Je viens vous exposer mon problème, je part d'un fichier .CSV que je dois insérer dans une base de données. Cette étape fonctionne bien.
    Le hic, vient du fait que des " viennent s'ajouter au début, et à la fin, sachant qu'elle n'y sont pas dans le fichier csv, donc le problème doit venir de ma requête qui doit surement posséder ces caractères.

    J'ai essayé de supprimer juste les ', après j'ai essayé de supprimer les ", mais je rencontrais des erreurs ce qui est logique.

    Donc le code, pour faire cette requête est le suivant :

    Code php : 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
     
    mysql_connect('localhost','root','');
    mysql_select_db('test');
    $sql1="TRUNCATE TABLE compteurs"; // vide la table
    mysql_query($sql1) or die (mysql_error()); // execution
    //Le chemin d acces au fichier sur le serveur
     
    if(file_exists("upload/".$_FILES['monfichier']['name'])){
    	$fichier = fopen("upload/".$_FILES['monfichier']['name'], "r");
    	$i=0;
    	//tant qu on est pas a la fin du fichier :
    	while (!feof($fichier)){
    	// On recupere toute la ligne
    		$uneLigne = fgets($fichier);
    		$DateTableau = explode(';', $uneLigne);
    		if(strlen(trim($uneLigne))){
    			if($i>0){ // test pour ne pas lire la premiere ligne
    				//On met dans un tableau les differentes valeurs trouvés (ici séparées par un ';')	
    				$tableauValeurs = explode(';', $uneLigne);						
    				$sql2="INSERT IGNORE INTO compteurs VALUES ('','".$tableauValeurs[0]."','".$tableauValeurs[1]."','".$tableauValeurs[2]."','".$tableauValeurs[3]."')"; // insertion des données dans la table
    				$req2=mysql_query($sql2) or die (mysql_error()); // execution
    				}
    				else{
    					$i++; // on incrémente pour ne pas lire la premiere ligne
    				}
     
    	}
     
    }

    Au final, je ne sais pas quoi essayer. Si vous pouviez m'aiguiller.

    Merci d'avance.

  2. #2
    Membre actif Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Points : 265
    Points
    265
    Par défaut
    Bonjour,

    Tu peux nous donner en exemple une ou deux lignes de ton fichier CSV, l'encodage utilisé dans ton fichier ainsi que le type des champs dans ta table (ou les " sont rajoutés) ?

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Salut, désolé de te répondre que maintenant.

    Alors le csv se présente de la facon suivante :
    A1 : totalvalve1;27750,857;kWh;;
    A2 : totalvalve;3807,708;kWh;;
    A3 : totalvalve;4446;kWh;;
    A4 : valve11;NA;kWh;;NA;61;
    A5 : valve12;0;kWh;;0;0;
    L'encodage utilisé est utf8 pour le fichier et la base de données est elle aussi en utf8 quand au type de champs, il s'agit de varchar

  4. #4
    Membre actif Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Points : 265
    Points
    265
    Par défaut
    Ok, alors maintenant tu vas faire un petit echo juste derrière ton explode() dans $tableauValeurs :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "idx 0 : ".$tableauValeurs[0];
    echo "idx 1 : ".$tableauValeurs[1];
    Pour voir comment s'affiche ta chaine, si il n y a pas de "" en trop, c'est côté base de données qu'il faut regarder, sinon c'est côté manipulation de la chaîne avant insertion

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Alors j'ai fait l'écho, il m'affiche donc :

    idx 0 : "totalvalve1
    idx 1 : 27750
    donc ça doit venir de la chaîne et j'ai beau regarder, j'ai supprimé les lignes et réécrite dans le csv, le problème est là, peut-être avec un str_replace, si je remplace les " en les supprimant, ça pourrais marcher ?

  6. #6
    Membre actif Avatar de Vespiras
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    168
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2012
    Messages : 168
    Points : 265
    Points
    265
    Par défaut
    Oui ça marcherait, mais je pense qu'il faut comprendre d’où vient l'erreur comme ça tu auras un truc propre. J'ai testé ton code en local chez moi en me créant un fichier .csv encodé en UTF8 avec les lignes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     totalvalve1;27750,857;kWh;; 
     totalvalve;3807,708;kWh;; 
     totalvalve;4446;kWh;; 
     valve11;NA;kWh;;NA;61; 
     valve12;0;kWh;;0;0;
    Et je n'ai aucun caractère ajouté ...

    Je te conseille de vérifier quelque chose : ouvre ton fichier .csv avec notepad++, et va dans Affichage -> symboles spéciaux -> et coche "Afficher tout les caractères". De cette manière tu verras si un caractère invisible (espace ou autre) est mal interprété.

    Ajoute aussi un point virgule dans le string de tes requêtes sql1 et sql2, disons que c'est un détail, mais qu'il vaut mieux indiquer a MySQL que tes requêtes sont finies avec le symbole ';'.

    les problèmes comme ca c'est toujours chiant, et ça vient soit d'une fonction php qui altère une chaine, soit d'un type d'encodage, soit de caractères "fantômes" dans le fichier source.

    Ah oui, et fait aussi un echo de chaque ligne après ton fgets (au cas ou le problème viennent de explode, même si j'en doute vraiment. Mieux vaut être sûr)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Tu avais raison, j'ai ouvert avec un éditeur, et les caractère apparaissent, vraiment étrange qu'ils apparaisseny comme cela
    Donc j'ai réessayé et cela fonctionne parfaitement. J'ai vérifié le fichier de test qu'on m'a fourni, et ceux qui seront utilisé, il n'y avait que deux fichier en plus du mien qui comportait ces caractères. Vraiment idiote comme erreur.

    Merci à toi Vespiras

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

Discussions similaires

  1. Rechercher le caractère % dans une BDD SQL 2k5
    Par Blacknounou dans le forum Administration
    Réponses: 3
    Dernier message: 06/04/2011, 05h55
  2. [MySQL] caractère ® registered trademark dans BDD
    Par rike33 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 10/10/2008, 00h37
  3. Réponses: 2
    Dernier message: 04/10/2007, 11h31
  4. Réponses: 2
    Dernier message: 17/04/2007, 11h44
  5. Réponses: 4
    Dernier message: 18/05/2006, 15h54

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