Insertion d'un fichier csv dans BDD

debutant -  
 debutant -
Bonjour,

Je voudrais insérer des fichiers en .csv dans ma base de donnée(Xampp, PHPMyAdmin)
J'ai crée sous PhpMyAdmin une table nommée cout et je voudrais donc le remplir en insérant le fichier .csv

Ma table cout est composé de : Id_Cout, MontantB, MontantN

J'ai crée un formulaire avec un bouton parcourir(qui va aller chercher le fichier)
Maintenant je dois crée un script en php et c'est la que je bloque....
j'ai cherché un peu partout mais je n'ai malheureusement pas trouvé la solution...

voici mon formulaire en html :

<form action="ajouter.php" method="post" enctype="multipart/form-data" name="form1">

<p><input type="file" name="file" /></p>

<input type="submit" name="Submit" value="Submit">
</form>

Merci de m'aider pour le script SVP

39 réponses

  • 1
  • 2
Résumé de la discussion

Importation d'un fichier CSV dans une base MySQL via XAMPP et PHPMyAdmin pose la problématique d'alimenter une table cout à partir d'un fichier téléchargé par un formulaire.
Plusieurs réponses suggèrent de récupérer le contenu du fichier côté serveur via $_FILES, d'ouvrir le fichier et lire les lignes, en isolant les données par ligne et par séparateur, généralement la virgule.
D'autres contributions évoquent la nécessité d'ignorer la première ligne si elle contient les noms de colonnes, puis d'utiliser des insertions en base pour alimenter les tables correspondantes.
Des échanges évoquent aussi la gestion des valeurs et des contraintes, ainsi que l'éventuelle extension vers un choix de table cible lors du chargement et l'usage de requêtes préparées pour sécuriser les insertions.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. jeremy.s Messages postés 1248 Statut Membre 79
     
    Salut !

    Quelle est la structure de ton fichier csv ?

    Ensuite, est-ce que tu veux stocké le fichier csv ? Ou est-ce que tu veux simplement ajouté ces données ?
    Tu peux déjà te renseigner sur l'upload de fichier en php (google est ton amis),
    ainsi que sur le "traitement" d'un fichier csv.
    Mais je t'aiderais également quand tu auras répondu à mes premières questions :)
    0
  2. debutant
     
    Bonjour,
    Je veux ajouté ces données dans ma bdd.
    Je n'ai pas compris votre première question...
    Merci
    0
  3. jeremy.s Messages postés 1248 Statut Membre 79
     
    Ton fichier csv se présente comment ?

    Peux copier/coller les premières lignes :)
    0
  4. debutant
     
    Id_Cout MontantB MontantN
    1 47,9 38,55
    2 47,9 38,55
    3 0 0
    4 0 0
    5 0 0
    6 0 0
    7 0 0
    8 47,9 38,55
    9 18,06 18,06
    10 17,96 8,98
    11 0,74 0,37
    12 3,25 3,25
    13 7,9 7,9
    14 90 54
    15 90 54
    16 90 54
    17 0 0
    18 0 0
    19 0 0
    20 0 0
    21 0 0
    22 1,05 0,53

    etc....

    voila les première lignes
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jeremy.s Messages postés 1248 Statut Membre 79
     
    Tu l'as ouvert avec excel ou avec un bloc note ?

    Pourquoi une fois il y a :
    1 47,9 38,55
    Et ensuite :
    3 0 0

    0
  7. debutant
     
    Je l'ai ouvert avec scalc (openoffice)

    les 0 c'est quand ya rien eu (le cout est a 0euro)
    0
  8. jeremy.s Messages postés 1248 Statut Membre 79
     
    Ouvre le avec le bloc note et copie/colle :)

    Maisce que je veux dire, c'est que une fois les chiffres sont séparés par une virgule et l'autre fois par un espace
    0
  9. debutant
     
    les données sont séparés par virgule et "" :)
    0
  10. jeremy.s Messages postés 1248 Statut Membre 79
     
    Ca complique les choses ^^
    Alors ce que je te propose :

    Il faut tout d'abord récupéré le contenu du fichier (regarde la fonction get_file_content)
    Ensuite tu peux faire un explode sur le retour à la ligne
    Et un sur la virgule ou l'espace :)
    Et puis tu fais ton isert into avec les données que tu veux :)
    0
  11. debutant
     
    -récupéré le contenu du fichier
    -explode
    -Enfin, insert

    je vaisessayer cela et je vous met au courant :)
    0
  12. jeremy.s Messages postés 1248 Statut Membre 79
     
    Ouais voila en gros c'est ca :)
    0
  13. debutant
     
    //Formulaire html

    form action="ajouter.php" method="post" enctype="multipart/form-data" name="form1">

    <p><input type="file" name="file" /></p>

    <input type="submit" name="Submit" value="Submit">
    </form>

    // script php

    <?php

    $file = file_get_contents('C:\Fichier'); //le chemin
    echo strlen($file);

    LOAD DATA LOCAL INFILE "cout.CSV" // le load data
    INTO TABLE cout
    FIELDS
    TERMINATED BY ';'
    OPTIONAlLY ENCLOSED BY '"'
    ESCAPED BY '\\'
    LINES
    TERMINATED BY '\r\n'
    IGNORE 1 LINES

    while (!feof($fp))
    { /* Tant qu'on n'atteint pas la fin du fichier */
    $ligne = fgets($fp,4096); /* On lit une ligne */
    $liste = explode( ";",$ligne);
    $Id_Cout = $liste[0];
    $MontantB = $liste[1];
    $MontantN = $liste[2];

    $query = "INSERT INTO 'cout'('Id_Cout', 'MontantB', 'MontantN') VALUES ('$Id_Cout','$MontanB','$MontanN')";
    $result= MYSQL_QUERY($query);

    }
    ?>

    Ou est mon erreur ?
    0
  14. debutant
     
    "Id_Cout","MontantB","MontantN"
    1,"47,9","38,55"
    2,"47,9","38,55"
    3,0,0
    4,0,0
    5,0,0
    6,0,0
    7,0,0
    8,"47,9","38,55"
    9,"18,06","18,06"
    10,"17,96","8,98"
    11,"0,74","0,37"
    12,"3,25","3,25"
    13,"7,9","7,9"
    14,90,54
    15,90,54
    16,90,54
    17,0,0

    ouvert avec bloc note :)
    0
  15. jeremy.s Messages postés 1248 Statut Membre 79
     
    Partie php :

    $texte = file_get_content($_FILES['file']['path']); // regarde la doc de $_FILES pour récupérer le chemin

    $texte = strreplace('"',''); // on enlève les "
    $lignes = explode("\n", $texte); // A vérifier pour le retour à la ligne

    for($i = 1 ; $i < count($lignes) ; $i++) // On parcourt chaque ligne
    {
    $ligne = explode(',', $lignes[$i]);
    insert into maTable set id_count = $ligne[0], montantB = $ligne[1], montantN = $ligne[2]
    }

    Engros ca peut marché
    0
  16. debutant
     
    Bonjour,
    Le script marche, merci
    Mais maintenant j'ai un autre problème.
    la on insert que dans une table(coûts), comment on doit procéder pour pouvoir insérer dans autre tables(pour qu'il y ait un choix)

    merci
    0
  17. debutant
     
    voici l'affichage du fichier .csv :

    "Id_Cout","MontantB","MontantN"
    1,"47,9","38,55"
    2,"47,9","38,55"
    3,0,0
    4,0,0
    5,0,0
    6,0,0
    7,0,0
    8,"47,9","38,55"
    9,"18,06","18,06"
    10,"17,96","8,98"
    11,"0,74","0,37"
    12,"3,25","3,25"
    13,"7,9","7,9"
    14,90,54
    15,90,54
    16,90,54
    17,0,0
    18,0,0
    19,0,0
    20,0,0

    Sur ma base de donées, il affiche pas les chiffre décimaux.

    comment faire ?

    voici le scprit :

    <?php
    // ouverture
    mysql_connect("localhost","root","");
    mysql_select_db("mysql");

    //Le chemin d'acces
    $fichier = fopen("C:\Fichier\couts.csv", "r");

    //tant que
    while (!feof($fichier))
    {
    // On recupere toute la ligne
    $uneLigne = fgets($fichier, 1024);

    //On met dans un tableau les differentes valeurs trouvés (ici séparées par un ';')
    $tableauValeurs = explode(',', $uneLigne);

    // On crée la requete pour inserer les donner (ici il y a 3 champs donc de [0] a [2])
    $sql="INSERT INTO couts VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."')";

    $req=mysql_query($sql)or die (mysql_error());

    }
    //vérification et réponse
    if ($req)
    {
    echo"Ajout dans la base de données effectué avec succès";
    }
    else
    {
    echo"Echec dans l'ajout dans la base de données";
    }

    ?>
    0
  18. jeremy.s Messages postés 1248 Statut Membre 79
     
    Sur ma base de donées, il affiche pas les chiffre décimaux.
    Ton champ dans la base de données doit être un int, déclare le en float ou autre et le problème sera résolu ;-)
    0
  19. debutant
     
    oui merci :)
    J'ai une dernière question...
    La on peut juste insérer les données dans une seul table, comment faire pour avoir la possibilité de faire des insertion dans d'autre tables aussi ?
    merci

    voici mon code :

    // ouverture
    mysql_connect("localhost","root","");
    mysql_select_db("mysql");

    //Le chemin d'acces
    $fichier = fopen("C:\Fichier\couts.csv", "r");

    //vide la table balance avant toute insertion
    //$req="TRUNCATE TABLE couts";
    //mysql_query($req)or die (mysql_error());

    //tant que
    while (!feof($fichier))
    {
    // On recupere toute la ligne
    $uneLigne = fgets($fichier, 1024);

    //On met dans un tableau les differentes valeurs trouvés (ici séparées par un ',')
    $tableauValeurs = explode(';', $uneLigne);

    // On crée la requete pour inserer les donner (ici il y a 3 champs donc de [0] a [2])
    $sql="INSERT INTO couts VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."')";

    $req=mysql_query($sql)or die (mysql_error());

    }
    //vérification et réponse
    if ($req)
    {
    echo"Ajout dans la base de données effectué avec succès";
    }
    else
    {
    echo"Echec dans l'ajout dans la base de données";
    }

    ?>
    0
  20. jeremy.s Messages postés 1248 Statut Membre 79
     
    Bah tu fais un autre insert into dans une autre table, non ? :)
    0
  • 1
  • 2