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 :

Récupérer un fichier CSV sur un serveur et le repasser dans une base données


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut Récupérer un fichier CSV sur un serveur et le repasser dans une base données
    Bonjour,

    je m'explique, j'upload un fichier csv pour creer un tableau via ma base de données, ce fichier est aussi sauvegardé dans un dossier sur mon serveur.

    il se trouve dans csv/csv1/nom du fichier.csv

    vu que je ne les stocks pas dans ma base de données je souhaiterais ré-ouvrir ma sauvegarde et de nouveau afficher mon tableau.

    ma question est comment modifier mon fichier afin de refaire l'upload mais ce coup ci depuis le dossier sur le serveur et non celui de mon ordinateur.

    mon formulaire upload (depuis un fichier sur ordinateur)

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     <div class="imp">
     
        <form enctype="multipart/form-data" action="import_csv.php?id=<?php echo $id ;?>" method="post">
            <div class="input-row">
                <label class="col-md-4 control-label">Importer fichier CSV Optimus</label>
                <input type="file" name="file" id="file" accept=".csv">
                <br />
                <br />
                <button type="submit" id="submit" name="import" class="btn-submit">Import</button>
                <br />
            </div>
        </form>
     
    </div>

    mon fichier qui me rempli ma table :

    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
    // Creation table
     
     
        if (isset($_POST["import"])) {
     
        $fileName = $_FILES["file"]["tmp_name"];
     
     
        if ($_FILES["file"]["size"] > 0) {
     
          $file = fopen($fileName, "r");
     
          while (($column = fgetcsv($file, 10000, ";")) !== FALSE) {
            $sql = "INSERT  INTO `".$csv."`( `COL 14`, `COL 24`)  
    		values ('" . $column[14] . "','" . $column[24] . "')";
            $result = mysqli_query($conn, $sql);
     
            if (! empty($result)) {
              move_uploaded_file($uploaded_file, $destination_path);
            } else {
              $type = "error";
              $message = "Problème lors de l'importation de données CSV";
            }
          }
        }
      }
     
      //Retourner à la page index.php
      header('Location: index3.php?id='.$id);
      exit;
    merci

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    vous pouvez faire le téléchargement d'un fichier avec ce 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
    		$contenuFichier = ... // ici lecture du fichier
    		$nomFichier = "test1.csv";
     
    		$tailleFichier = strlen($contenuFichier);
     
    		$nomFichier = str_replace('"', '\\"', $nomFichier);
     
    		header('Content-Type: application/octet-stream');
    		header("Content-Length: $tailleFichier");
    		header("Content-Disposition: attachment; filename=\"$nomFichier\"");
     
    		echo $contenuFichier;
     
    		exit();

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Plutôt que d'utiliser une boucle d'insertions unitaires, utilisez le chargement par LOAD en précisant les colonnes à alimenter dans la table.

    Voir la documentation ICI

  4. #4
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    bonjour,

    @mathieu ca c'est pour telecharger le fichier sur ordinateur, je cherche a le lire sur mon site pour le transferer dans ma table.

    @escartefigue j'ai regardé ton lien, je ne suis pas un pro en requête et php.

    j'ai essaye ce code mais ca ne fonctionne pas.

    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
    <?php
     
    $id = $_GET['id'];
    $fichier = $_GET['fichier'];
    $csv = 'csv'.$id;
     
    include("db_connect.php");
     
    $contents = file_get_contents('csv/csv1/'.$fichier);
     
      // Creation table
     
            $sql = "LOAD DATA INFILE `".$contents."`INSERT  INTO `".$csv."`( `COL 14`, `COL 24`)  
    		values ([VIN],[GLOBAL RESULT])";
            $result = mysqli_query($conn, $sql);
     
    //Retourner à la page index3.php pour lecture
     
    header('Location: index3.php?id='.$id);
    exit;
     
     
    ?>
    je doit mal faire

    a l'origine je récupère le fichier uploadé dans la variable $POST["import"]

    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
    // Creation table
     
     
        if (isset($_POST["import"])) {
     
        $fileName = $_FILES["file"]["tmp_name"];
     
     
        if ($_FILES["file"]["size"] > 0) {
     
          $file = fopen($fileName, "r");
     
          while (($column = fgetcsv($file, 10000, ";")) !== FALSE) {
            $sql = "INSERT  INTO `".$csv."`( `COL 14`, `COL 24`)  
    		values ('" . $column[14] . "','" . $column[24] . "')";
            $result = mysqli_query($conn, $sql);
     
            if (! empty($result)) {
              move_uploaded_file($uploaded_file, $destination_path);
            } else {
              $type = "error";
              $message = "Problème lors de l'importation de données CSV";
            }
          }
        }
      }
    j'ai essayé comme ceci, pas d'erreurs mais rien ne s'écrit dans la table :

    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
    <?php
     
    $id = $_GET['id'];
    $fichier = $_GET['fichier'];
    $csv = 'csv'.$id;
     
    include("db_connect.php");
     
    $contents = 'csv/csv1/'.$fichier ;
     
    echo $contents;   // resultat : csv/csv1/2024-02-07_14:07:30-csv2.csv
     
     
     
      // Creation table
     
            $sql = "LOAD DATA  INFILE `".$contents."` INSERT  INTO `".$csv."` IGNORE 1 LINES ";
     
    //Retourner à la page index3.php pour lecture
     
    header('Location: index3.php?id='.$id);
    exit;
     
     
    ?>
    merci

  5. #5
    Membre du Club
    Homme Profil pro
    noobies
    Inscrit en
    Décembre 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : noobies

    Informations forums :
    Inscription : Décembre 2014
    Messages : 103
    Points : 51
    Points
    51
    Par défaut
    je pense que mon hebergement ne prend pas LOAD INFILE.

    Du coup j'ai fais comme ca et ca fonctionne.

    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
    //Le chemin d'acces a ton fichier sur le serveur
    $fichier = fopen("csv/csv1/".$fichiers , "r"); 
     
    //tant qu'on est pas a la fin du fichier :
    while (!feof($fichier)) 
    { 
     while (($column = fgetcsv($fichier, 10000, ";")) !== FALSE) {
            $sql = "INSERT  INTO `".$csv."`( `COL 14`, `COL 24`)  
    		values ('" . $column[14] . "','" . $column[24] . "')";
            $result = mysqli_query($conn, $sql);
     
            if (! empty($result)) {
              move_uploaded_file($uploaded_file, $destination_path);
            } else {
              $type = "error";
              $message = "Problème lors de l'importation de données CSV";
            }
          }
    }

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 133
    Points : 38 556
    Points
    38 556
    Billets dans le blog
    9
    Par défaut
    Dans cet extrait de code :

    Citation Envoyé par olivxii Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      // Creation table
     
            $sql = "LOAD DATA  INFILE `".$contents."` INSERT  INTO `".$csv."` IGNORE 1 LINES ";
    La syntaxe du LOAD DATA est incorrecte, la bonne syntaxe est LOAD DATA INFILE 'chemin et nom du fichier' INTO TABLE nom de la table [paramètres...].
    Il ne doit donc pas y avoir d'ordre INSERT INTO

    De plus, le commentaire //Création table est erroné, la création d'une table correspond à l'ordre CREATE TABLE, ici ce n'est pas une création, mais un chargement par LOAD d'une table existante.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/12/2014, 10h38
  2. Réponses: 2
    Dernier message: 20/02/2012, 09h29
  3. Réponses: 2
    Dernier message: 24/05/2011, 03h18
  4. [OpenOffice][Base de données] Récupérer les données d'un fichier .txt et les insérer dans une base de données
    Par frack dans le forum OpenOffice & LibreOffice
    Réponses: 9
    Dernier message: 05/08/2009, 10h52
  5. Réponses: 1
    Dernier message: 18/02/2008, 17h17

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