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 :

Insertion du contenu d'un CSV dans le bdd


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut Insertion du contenu d'un CSV dans le bdd
    Bonsoir à tous,

    Voila je voudrais insérer le contenu d'un fichier CSV.

    Exemple de contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1234567;CHAINE DE CARACTERES;15/07/2010;00:00 a 23:59;0;0
    Avec cette page :
    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
    36
     
    <?php
     
    $i = 0;
    $path = $_POST['path'];
     
    if (file_exists($path)) {
     
    $fichier = fopen($path, "r");
    while(!feof($fichier)){
     
    $uneLigne = fgets($fichier);
    $tableauValeurs = explode(';', $uneLigne);
     
    if     ($i == 0) { $resultExplode0 = $tableauValeurs[0]; }
    elseif ($i == 1) { $resultExplode1 = $tableauValeurs[1]; }
    elseif ($i == 2) { $resultExplode2 = $tableauValeurs[2]; }
    elseif ($i == 3) { $resultExplode3 = $tableauValeurs[3]; }
    elseif ($i == 4) { $resultExplode4 = $tableauValeurs[4]; }
    elseif ($i == 5) { $resultExplode5 = $tableauValeurs[5]; }
     
    $weeknumber = $_POST['week_number'];
    $file_name = $_POST['file_name'];
     
    $i++;
    }
     
    $sql = 'INSERT INTO far_c ("code", "nom", "date", "plage", "incoming", "outgoing", "week_number", "nom_fichier") VALUES ("'.$resultExplode0.'", "'.$resultExplode1.'", "'.$resultExplode2.'", "'.$resultExplode3.'", "'.$resultExplode4.'", "'.$resultExplode5.'", "'.$week_number.'", "'.$file_name.'")';
     
    mysql_query($sql);
     
    fclose($fichier);
                            } else {
                                echo "Le fichier $file_name n'existe pas";
                            }
                        ?>
    et voila les erreurs

    Notice: Undefined variable: resultExplode1 in C:\wamp\www\APPAUTO\rep_rcbt2.php on line 60

    Notice: Undefined variable: resultExplode2 in C:\wamp\www\APPAUTO\rep_rcbt2.php on line 60

    Notice: Undefined variable: resultExplode3 in C:\wamp\www\APPAUTO\rep_rcbt2.php on line 60

    Notice: Undefined variable: resultExplode4 in C:\wamp\www\APPAUTO\rep_rcbt2.php on line 60

    Notice: Undefined variable: resultExplode5 in C:\wamp\www\APPAUTO\rep_rcbt2.php on line 60

    Notice: Undefined variable: week_number in C:\wamp\www\APPAUTO\rep_rcbt2.php on line 60

    Sauriez-vous me dire ce qui ne va pas dans mon code ?

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Par défaut
    Si tu as phpMyAdmin pour gérer ta base de données il y a un onglet "Importation" avec possibilité d'importer des fichiers CSV

  3. #3
    Membre actif
    Inscrit en
    Mars 2007
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2007
    Messages : 68
    Par défaut
    Oui je sais mais le but c'est de le faire de façon automatisé

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Par défaut
    Pourrais-tu indiquer la ligne 6à dans ton code stp

  5. #5
    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
    Il y a plein de choses qui ne vont pas dans ton code, en particulier il n'a pas de logique :
    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
    <?php
     
    $path = $_POST['path'];
    $weeknumber = intval($_POST['week_number']);
    $file_name = mysql_real_escape_string($_POST['file_name']);
     
    if (($handle = fopen("$path", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
     
                 $sql = 'INSERT INTO far_c ("code", "nom", "date", "plage", "incoming", "outgoing", "week_number", "nom_fichier") VALUES (".$data[0].", "'.$data[1].'", "'.$data[2].'", "'.$data[3].'", "'.$data[4].'", "'.$data[5].'", "'.$week_number.'", "'.$file_name.'")';
                 mysql_query($sql);
     
    }
    fclose($handle);
    else {
         echo "Le fichier $file_name n'existe pas";
    }
    ?>
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Il y a plusieurs points qui à mon sens ne vont pas, qui méritent explication.

    D'abord, il faut coté Bdd savoir si tous les champ sont requis (obligatoire) ou si tous ou en parti peuvent accepter des valeur NULL ou par défaut.

    Ceci dit, à mon sens les fichiers CSV devront à tout pris respecter le même nombre de champ (à leur création donc), quitte à ne rien mettre dedans.
    Si jamais il y a un champ manquant (pire, plusieurs), ça va être la croix et la bannière pour savoir quelle donnée devra être insérée dans tel ou tel champ.

    Aussi, le bonne syntaxe pour les CSV serait ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "1234567";"CHAINE DE CARACTERES";"15/07/2010";"00:00 a 23:59";"0";"0"
    Donc des délimiteur (des quotes) au niveau des contenus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if     ($i == 0) { $resultExplode0 = $tableauValeurs[0]; }
    elseif ($i == 1) { $resultExplode1 = $tableauValeurs[1]; }
    elseif ($i == 2) { $resultExplode2 = $tableauValeurs[2]; }
    elseif ($i == 3) { $resultExplode3 = $tableauValeurs[3]; }
    elseif ($i == 4) { $resultExplode4 = $tableauValeurs[4]; }
    elseif ($i == 5) { $resultExplode5 = $tableauValeurs[5]; }
    Ceci n'est pas correcte car des if/elseif feront qu'on entrera dans une seule et unique condition.
    C'est d'ailleurs pour cette raison que tu obtiens toutes ces erreurs.


    A mon avis, en 1er il faudrait vérifier le nombre de colonnes, et normalement il doit correspondre au même nombre de champs qu'il y a dans cette table (soit 6).
    S'il en manque 1 ou plusieurs ou s'il y en a un de trop, peut être le mieux c'est d'éviter de faire l'insertion.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $uneLigne = fgets($fichier);
    $tableauValeurs = explode(';', $uneLigne);
    $nombre_champs = count($tableauValeurs);
    //
    if ((int)$nombre_champs === 6) {
        // Ok, on a 6 champs
    }
    else {
          // Erreur : Nombre de champ invalide
    }

    Dernier truc.
    J'ai jamais eu l'occasion des les utilisés, mais il existe quelques fonctions Php pour les CSV. Peut être que ça peu faciliter les choses.
    str_getcsv(), fgetcsv, fputcsv()

  7. #7
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Par défaut
    Le plus simple ne serait pas d'importer directement le fichier .csv avec une requête du type

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    LOAD DATA LOCAL INFILE 'C:/\Maj/\fichier.csv'
    REPLACE
    INTO TABLE far_c
    FIELDS
    	TERMINATED BY ';'
    LINES
    	STARTING BY ''
    	TERMINATED BY '\r\n'

    Moi perso pour toutes mes importations de fichiers .csv j'utilise cette méthode et elle fonctionne très bien. Après à voir si tu es sur du contenu de tes fichiers .csv

Discussions similaires

  1. [MySQL-5.5] Importer contenu de fichier csv dans base de données MySQL
    Par sydko dans le forum Administration
    Réponses: 2
    Dernier message: 16/10/2013, 14h13
  2. Contenu d'un CSV dans un tableau 2D
    Par Invité dans le forum VBScript
    Réponses: 19
    Dernier message: 07/06/2013, 10h02
  3. Eclater le contenu d'un ".csv" dans un tableau
    Par ghe69140 dans le forum VBScript
    Réponses: 4
    Dernier message: 30/08/2011, 17h50
  4. Insertion du contenu d'un fichier dans une GtkTextView
    Par PazaiFoG dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 22/12/2009, 00h30
  5. pb sur insertion du contenu d'un "file" dans ma bd
    Par djx11 dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2007, 11h15

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