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 :

Problème pour insérer les données d'un fichier texte vers une table Mysql !


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Problème pour insérer les données d'un fichier texte vers une table Mysql !
    Quelqu'un pourrait-il m'aider à résoudre un problème d'insertion de données d'un fichier texte vers une table d'une base de donnée Mysql.

    Voila le 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
    <?php
    $host = "localhost";
    $user = "root";
    $pass = "";
    $db = "al936ne36";
    $connect = mysql_connect ($host, $user, $pass);
    mysql_select_db ($db, $connect) or die(mysql_error());
     
    $fileName="vente.txt";
    $tableName="biens";
    function insertIntoTable ($fileName,$tableName,$connect)
    {
        $file = fopen( $fileName, 'r' );
        $k = 0;
        while ( ! feof( $file ) )
        {
            $k++;
            $line = fgets( $file, 5000 );
            if ( strlen( $line ) > 1 )
            {
                $requete = 'INSERT INTO '.$tableName.' VALUES ( \''.$line.'\' ) ';
                if ( ! mysql_query ( $requete, $connect ) )
                    echo 'Erreur Ligne '.$k.' : '.mysql_error().'<br>'.$requete.'<br>';
            }
            else
                echo 'Ligne '.$k.' ignorée.<br>';
        } 
     
        echo '<p>Insertion du fichier '.$fileName.' terminé.</p><hr>'; 
     
        fclose( $file );
    }
     
    insertIntoTable ("vente.txt", "biens", $connect);
    ?>
    et voila le message d'erreur :

    Erreur Ligne 1 : Column count doesn't match value count at row 1
    INSERT INTO biens VALUES ( 'VAI10009;AI1;T;108000,00;LES TROIS PIERRES;0;0;0;0,00;1200;;0;0;;0;0;02.35.00;FIN ' )
    Erreur Ligne 2 : Column count doesn't match value count at row 1
    INSERT INTO biens VALUES ( 'VAI10010;AI1;T;142000,00;FONTAINE LA MALLET;0;0;0;0,00;440;;0;0;;0;0;02.35.21;FIN ' )
    Erreur Ligne 3 : Column count doesn't match value count at row 1
    INSERT INTO biens VALUES ( 'VAI10012;AI1;M;225000,00;ROUVILLE;6;4;100;35,00;798;SO;0;2;Aménagée;1;2;02.35.21;FIN' )

    Insertion du fichier vente.txt terminé.
    Je joins le fichier texte avec quelques données à cette discussion.

    Il y a autant de données par ligne dans le fichier texte que de colonne dans la table. J'ai choisi le ; comme séparateur de champ car il y a des chiffres avec deux décimales séparés par une virgule dans les données à insérer.
    Je suis débutant en PHP, alors soyez indulgent.
    Merci d'avance pour votre aide ! ! !
    Fichiers attachés Fichiers attachés

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Bonsoir,

    L'erreur indiquée te fait remarqué que le nombre de colonnes dans le VALUE de ton insert ne correspond pas au nombre de colonnes de la table. Ce que l'on voit bien dans ta requête puisque qu'il n'y a qu'un seul champ.

    Les champs,valeurs doivent être séparées par une virgule et mis entre guillemets uniquement dans le cas de champ non numérique ( date, varchar, ...). Pour ton nombre à virgule , il faut remplacer celle-ci par un point à mon avis.

    Pour éviter ce genre de soucis, il vaut mieux spécifier les noms des champs lors de l'insertion.
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into matable (champ1,...,champn) values (value1,...,valuen)

    Cela pourra t'éviter de t'arracher les cheveux quand tu reprendras le prog d'import après avoir ajouté x colonnes en BDD
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Je comprends bien ce que tu veux dire, mais comment puis-je faire pour faire en sorte que l'insertion prenne en compte le ; pour séparateur de champ?
    Car j'ai déjà essayé de le faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $requete = 'INSERT INTO '.$tableName.' (Dossier_Biens,CodeAgen_Biens,.......,Fin_Biens) VALUES ( \''.$line.'\' ) ';
    Mais j'ai le même message d'erreur.

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Erreur Ligne 1 : Column count doesn't match value count at row 1
    INSERT INTO biens (Dossier_Biens,CodeAgen_Biens,Type_Biens,Prix_Biens,Local_Biens,NbPiece_Biens,NbCh_Biens,SurfHab_Biens,SurfSej_Biens,SurfTer_Biens,Expo_Biens,Etage_Biens,NbEtage_Biens,Cuisine_Biens,Sdb_Biens,Garage_Biens,TelAgence_Biens,Fin_Biens) VALUES ( 'VAI10009;AI1;T;108000,00;LES TROIS PIERRES;0;0;0;0,00;1200;;0;0;;0;0;02.35.21.68.00;FIN ' )

    je ne vois pas comment récupérer les données tout en les séparants par le biais de ; .

  4. #4
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Ta requête doit s'écrire comme cela et tu ne peux pas faire autrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO biens
    (Dossier_Biens,CodeAgen_Biens,Type_Biens,Prix_Biens,Local_Biens,NbPiece_Biens,NbCh_Biens,SurfHab_Biens,SurfSej_Biens,SurfTer_Biens,Expo_Biens,Etage_Biens,NbEtage_Biens,Cuisine_Biens,Sdb_Biens,Garage_Biens,TelAgence_Biens,Fin_Biens) 
    VALUES ( 'VAI10009','AI1','T','108000.00','LES TROIS PIERRES',0,0,0,0.00,1200,NULL,0,0,NULL,0,0,'02.35.21.68.00','FIN' );
    De plus tu ne peux pas ne rien mettre pour un champ, il faut une valeur j'ai mis NULL mais cela peut être aussi une chaine vide, un 0, cela dépend de la structure de ta table.

    Pour en revenir à ton problème d'import. Il te suffit :
    - lire ta ligne ( tu le fais déjà )
    - découper la ligne sur les ; ( cf fonction explode())
    - préparer la requête, en effectuant les tests sur les valeurs absentes ( NULL )

    Voilà
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/08/2010, 21h48
  2. Réponses: 1
    Dernier message: 17/03/2009, 16h33
  3. extraire les données d'un fichier text vers une table access
    Par djatto dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/09/2008, 17h51
  4. Réponses: 3
    Dernier message: 21/06/2007, 01h10
  5. Pour extraire les données d'un fichier texte
    Par Floch dans le forum Access
    Réponses: 2
    Dernier message: 02/05/2006, 15h01

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