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 csv manuel ok via requete nok


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut Insertion csv manuel ok via requete nok
    Bonjour,

    quand je place mon csv dans phpmyadmin la table se rempli bien, si je tente avec une requete ca ne passe pas, je pense que cela est du au doubles quotes du fichiers csv.

    date Client,"Date Dem","MOIS","Client","Chassis","VEH","Modele","Boxage","TECHNIQUE","PREPA","CARBU","PLAQUES","ATELIER","PRIORITE","Commentaires"

    mon upload csv

    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
    if (is_uploaded_file($_FILES["file"]["tmp_name"])) {
        if (rename($_FILES["file"]["tmp_name"],
                       $repertoireDestination.$nomDestination)) {
     
    		$inFile = 'xlsx/'.$file.'';
            $objReader = PHPExcel_IOFactory::createReader('Excel2007');
            $objPHPExcel = $objReader->load($inFile);
     
            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');    
     
           $index = 0;
             foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
     
           $objPHPExcel->setActiveSheetIndex($index);
     
           // write out each worksheet to it's name with CSV extension
           $outFile = str_replace(array("-",""), "_", $worksheet->getTitle()) ."MVTS.csv";
     
           $objWriter->setSheetIndex($index);
           $objWriter->save('csv/'.$outFile);
     
        $index++;
    mon envoie vers bdd

    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
    //tant qu'on est pas a la fin du fichier :
    while (!feof($fichier)) 
    { 
     while (($column = fgetcsv($fichier, 10000, ",")) !== FALSE) {
     
            $sql = "INSERT INTO liste ( `COL 1`, `COL 2`, `COL 3`, `COL 4`, `COL 5`, `COL 6`, `COL 7`, `COL 8`, `COL 9`, `COL 10`, `COL 11`, `COL 12`, `COL 13`, `COL 14`, `COL 15`) 
    		VALUES ('" . $column[1] . "','" . $column[2] . "','" . $column[3] . "','" . $column[4] . "','" . $column[5] . "','" . $column[6] . "','" . $column[7] . "',
    		'" . $column[8] . "','" . $column[9] . "','" . $column[10] . "','" . $column[11] . "','" . $column[12] . "','" . $column[13] . "','" . $column[14] . "',
    		'" . $column[15] . "')";
            $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";
            }
          }
    }
    merci

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    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 599
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Pourquoi gérer l'insertion ainsi, alors que MySQL met à disposition l'instruction LOAD DATA INFILE qui permet de le faire de façon plus optimisée et avec des options relatives aux délimiteurs de champs du fichier CSV pour reconnaitre les colonnes de la table cible.

    Voyez ICI

  3. #3
    Membre confirmé
    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
    Par défaut
    bonjour,

    j'ai déjà essayé mais je pense que mon hébergement n'est pas prévu pour cette fonction.

    sur d'autres csv ou le fichier est formaté comme ci dessous ca fonctionne.

    MODEL;MAKE;TOOL SN;MODE;YEAR;DEALER CODE;INTERNAL RESISTANCE;BATTERY TEMPERATURE (°C);DIAG ITERATION;JOB ID;JPR;PRE-CHARGE;OCV;BATTERY SN;VIN;BATTERY


    merci

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Affiche $sql pour vérifier si les requêtes sont bien formées.

    Attention, les valeurs ne sont pas échappées, voir mysqli_real_escape_string().


    while (!feof($fichier)) 
    { 
     while (($column = fgetcsv($fichier, 10000, ",")) !== FALSE) {
    feof() n'est franchement pas recommandée, tu peux parcourir ton fichier ainsi :

    while ($record = fgetcsv($fichier, null, ',')) {
    Ou :

    $csv_options = ['separator' => ',', 'enclosure' => '"', 'escape' => ''];
    while ($record = fgetcsv($fichier, ...$csv_options)) {
    J'ai renommé $column (!!) en $record.

    Si ça ne fonctionne pas fais un print_r() de $record pour voir le résultat.

  5. #5
    Membre confirmé
    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
    Par défaut
    Bonjour Seb,

    parfait merci beaucoup

    j'aurais une autre question sur la lecture de ce csv, je voudrais écarter la première ligne avec un LIMIT 1,**** sauf que je ne veux pas mettre de chiffre après pour ne pas agrandir le tableau.

    il pourra y avoir 50 lignes comme 200 je veux juste ne pas afficher la première ligne.

    merci

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 315
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 315
    Billets dans le blog
    17
    Par défaut
    Il faut faire un premier fgetcsv() avant la boucle.

    Tu peux en profiter pour récupérer l'en-tête et créer des enregistrements.

    $header = fgetcsv($stream, ...$csv_options);
    
    while ($record = fgetcsv($tream, ...$csv_options) {
        // Si tu veux exploiter $header
        $record = array_combine($header, $record);
        ...
    }

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/06/2020, 11h16
  2. Insertion manuellement et via programme
    Par LandGreen dans le forum SQL
    Réponses: 3
    Dernier message: 25/10/2018, 15h57
  3. [AC-2003] Erreur d'insertion via requête VBA: Erreur de syntaxe
    Par Nelmech dans le forum IHM
    Réponses: 5
    Dernier message: 21/08/2012, 15h33
  4. insertion date en paramètre de requète via dpicker
    Par benoitm35 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 24/11/2008, 22h26
  5. Insertion of an object via Hibernate
    Par ksouissi dans le forum Hibernate
    Réponses: 4
    Dernier message: 17/05/2005, 09h15

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