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 dans Mysql par tableau [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut Insertion csv dans Mysql par tableau
    Bonjour,

    Voilà mon 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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <?php
     
    include "fonction.inc.php";
     
    connexion("localhost", "root", "", "ccf");
     
    include "debut.inc.php";
    if ((isset($_FILES['envoiFichier']['name'])&&($_FILES['envoiFichier']['error'] == UPLOAD_ERR_OK))) 
    {    
    $chemin_destination = 'C:/uploads';    
    move_uploaded_file($_FILES['envoiFichier']['tmp_name'],
    $chemin_destination.$_FILES['envoiFichier']['name']);    
    }    
     
    if (count($_FILES)==0) {
    echo"
    <form method='post' action='convocationCsv.php' enctype='multipart/form-data'>
    <input type='hidden' name='MAX_FILE_SIZE' value='2097152'> 
      Sélectionner le fichier listeConvocation.csv :</br></br>
      <input name = 'envoiFichier' type='file'/></br></br>
      <input class='bouton' type='submit' value='Envoyer le fichier'>
    </form>
    ";  
    }
     
    else {
     
    $row = 1;
    if (($handle = fopen("listeConvocation.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
            $num = count($data);
     
            $row++;
            for ($c=0; $c < $num; $c++) {
     
            }
            $sql = "INSERT INTO ccf_convocation VALUES ('{$data[0]}', '{$data[1]}', '{$data[2]}', '{$data[3]}', '{$data[4]}', '{$data[5]}', '{$data[6]}', '{$data[7]}'  )";
            $resultat=mysql_query($sql);
        }
        echo" <p> Liste importer </p>";
        fclose($handle);
    }
    }
     
     
    include "fin.inc.php";
     
    ?>
    Donc j'ai un autre script du même genre qui ajoute des utilisateurs qui fonctionne, mais j'ai un problème pour celui-ci.

    message d'erreur :

    Notice: Undefined offset: 7 in C:\Program Files\EasyPHP-5.3.3\www\ccf\convocationCsv.php on line 58

    Mon tableau commence bien à l'index 0 et se termine à 7 car il y a 8 champs dans la table ou je souhaite importer ces données.

    Si je supprime le data[7], rien ne se passe, donc je le remet mais j'ai l'erreur citée plus haut.

    Malgré l'erreur mon script insère quelques données dans ma table mais pas au bon endroit, et la date est affiché en "0000-00-00", j'ai bien pensé à mettre le format des cellules concernant les dates en américain dans mon fichier listeConvocation.csv, pour coïncider avec le format de MySQL.

    Merci de m'aider

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    ca sert a rien ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $num = count($data);
     
    $row++;
    for ($c=0; $c < $num; $c++) {
     
    }
    fais un var_dump($data); pour voir

    je te conseil plutôt d'utiliser vsprintf pour faire ta requete

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    J'ai supprimé ce qui ne servait à rien.

    J'ai "bool(false)" qui s'est affiché en plus, depuis le var_dump($data);

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par mousefr Voir le message
    J'ai supprimé ce qui ne servait à rien.

    J'ai "bool(false)" qui s'est affiché en plus, depuis le var_dump($data);
    ton fgetcsv ne marche pas alors

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    Pourtant je ne vois pas ou est la faute

    Mon autre script php qui marche :

    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
    37
    38
    39
    40
    41
    42
    43
    <?php
     
    include "fonction.inc.php";
     
    connexion("localhost", "root", "", "ccf");
     
    include "debut.inc.php"
     
    if ((isset($_FILES['envoiFichier']['name'])&&($_FILES['envoiFichier']['error'] == UPLOAD_ERR_OK))) 
    {    
    $chemin_destination = 'C:/uploads';    
    move_uploaded_file($_FILES['envoiFichier']['tmp_name'],
    $chemin_destination.$_FILES['envoiFichier']['name']);    
    }    
     
    if (count($_FILES)==0) {
    echo"
    <form method='post' action='testCsv.php' enctype='multipart/form-data'>
    <input type='hidden' name='MAX_FILE_SIZE' value='2097152'> 
      Sélectionner le fichier listeUtilisateur.csv :</br></br>
      <input name = 'envoiFichier' type='file'/></br></br>
      <input class='bouton' type='submit' value='Envoyer le fichier'>
    </form>
    ";  
    }
     
    else {
     
    $row = 1;
    if (($handle = fopen("listeUtilisateur.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
            $sql = "INSERT INTO ccf_utilisateur VALUES ('{$data[0]}', '{$data[1]}', '{$data[2]}', '{$data[3]}', '{$data[4]}', '{$data[5]}', '{$data[6]}', '{$data[7]}', '{$data[8]}', '{$data[9]}')";
            $resultat=mysql_query($sql);
     
        }
        echo" <p> Liste importer </p>";
        fclose($handle);
    }
    }
     
    include "fin.inc.php";
     
    ?>;
    Les seul changements sont que j'insère dans une autre table, qu'il y a 10 données ( de data[0] a data[9] ), et que j'ouvre un autre fichier.csv, listeUtilisateur.csv au lieu de listeConvocation.csv.

    ton fgetcsv ne marche pas alors
    Il y a une raison pour qu'il ne fonctionne pas ?

  6. #6
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    le var_dump tu la bien fait dans ta boucle while ?

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    Effectivement,, je m'était tromper d'une ligne.

    Le var_dump m'affiche les données du ficher csv.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Notice: Undefined offset: 7 in C:\Program Files\EasyPHP-5.3.3\www\ccf\convocationCsv.php on line 52
    array(7) { [0]=> string(10) "2011-06-25" [1]=> string(5) "09h15" [2]=> string(14) "durand.jacques" [3]=> string(5) "Maths" [4]=> string(8) "E2-Maths" [5]=> string(4) "R105" [6]=> string(2) "55" } 
    Notice: Undefined offset: 7 in C:\Program Files\EasyPHP-5.3.3\www\ccf\convocationCsv.php on line 52
    array(7) { [0]=> string(10) "2011-06-20" [1]=> string(5) "11h45" [2]=> string(12) "dubois.henry" [3]=> string(8) "Français" [4]=> string(14) "E1-Litterature" [5]=> string(4) "R302" [6]=> string(2) "75" }

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    t'en a 7 pas 8

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    Oui j'en ai 7 dans mon fichier csv, car je n'ai pas mi la clé primaire qui est en auto increment, à moins que ce ne soit pas pris en compte ?

    J'utilise le même procédé pour les utilisateurs, 9 champs dans le fichier csv, dont la clé primaire en auto incrément, pourtant mon tableau va de data[0] à data[9] donc ca fait 10.

  10. #10
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par mousefr Voir le message
    Oui j'en ai 7 dans mon fichier csv, car je n'ai pas mi la clé primaire qui est en auto increment, à moins que ce ne soit pas pris en compte ?
    tu ne dois pas insérer la clé primaire, il va donc falloir faire la correspondance des champs dans la requete

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    Tu veux dire que je doit associer chaque data[x] à un nom de champs ?
    Par exemple mon data[0] concerne une date, donc en gros je dois faire :

    data[0] = dateConvocation (nom du champs des dates)

    numConvocation clé primaire

    dateConvocation <- data[0]
    heureConvocation <- data[1]
    loginConvocation <- data[2]
    epreuveConvocation <- data[3]
    libelleConvocation <- data[4]
    salleConvocation <- data[5]
    dureeConvocation <- data[6]

    Si c'est ca peux-tu me donner un exemple, pour un champs que je puisse appliquer la même méthode aux autres ?

    EDIT

    Je viens de me rendre compte que dans mon script, les data allaient jusqu'à 7, pourtant rien est exécuter si je supprime le data[7], et si je le laisse erreur + bug des emplacements des données dans la table.

  12. #12
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    ta requête doit être du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO ccf_utilisateur (champ1, champ2, ...) VALUES (value1, value2, ...)

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    Donc ca se présenterait comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    INSERT INTO ccf_convocation(dateConvocation, heureConvocation,
     
     loginConvocation, epreuveConvocation, libelleConvocation, salleConvocation,
     
     dureeConvocation) VALUES ('{$data[0]}', '{$data[1]}', '{$data[2]}', 
     
    '{$data[3]}', '{$data[4]}', '{$data[5]}', '{$data[6]}', '{$data[7]}'  )";
    En tous cas merci beaucoup de ton aide

  14. #14
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    essaye, mais utilise vsprintf ca sera plus lisible

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    J'ai essayé, mais toujours le même résultat pour la requête (message d'erreur + contenue du tableau).

    Sinon pour l'utilisation de vsprintf : string vsprintf ( string $format , array $args )

    J'ai regardé de la documentation, donc apparemment $args est le tableau
    et $format à un signe, remplisseur, spécificateur d'alignement, spécificateur de taille, spécificateur de précision et un spécificateur de type.

    Même avec les exemples, je n'ai pas compris comment ca marche

  16. #16
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    t'as laisser data[7] il n'existe pas, tu lui dis 7 champs met t'insères 8 valeurs...

    pour le vsprintf ca donnerai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = vsprintf("INSERT INTO ccf_convocation (dateConvocation, heureConvocation, 
    loginConvocation, epreuveConvocation, libelleConvocation, salleConvocation, 
    dureeConvocation) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')", $data);

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    Merci beaucoup, ca marche

    Sauf que ca m'a importer que la 1ère ligne de mon fichier csv, pourtant le var_dump($data) m'affiche les 2 lignes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(7) { [0]=> string(10) "2011-06-25" [1]=> string(5) "09h15" [2]=> string(14) "durand.jacques" [3]=> string(5) "Maths" [4]=> string(8) "E2-Maths" [5]=> string(4) "R105" [6]=> string(2) "55" } array(7) { [0]=> string(10) "2011-06-20" [1]=> string(5) "11h45" [2]=> string(12) "dubois.henry" [3]=> string(8) "Français" [4]=> string(14) "E1-Litterature" [5]=> string(4) "R302" [6]=> string(2) "75" }

    EDIT :


    Finalement ca marche impec, j'avais pas refait l'auto incrementation sur ma clé primaire.
    Mille merci Stealth35

  18. #18
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 236
    Par défaut
    Erreur de ma part.

  19. #19
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 17
    Par défaut
    Gwarl, t'a réponse était pour mon message avec que je l'édit ?

    Sinon comment on met le sujet résolue ?

    Thx

  20. #20
    Membre chevronné
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Octobre 2009
    Messages : 236
    Par défaut
    Pas vus l'édition à temps désolé, en bas du topic tu as un bouton "résolu".

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Insertion utilisateur dans mysql avec le shell UNIX
    Par loopback dans le forum Débuter
    Réponses: 3
    Dernier message: 18/11/2006, 18h01
  2. Import de fichier Excel (CSV) dans MySQL
    Par mathieu77186 dans le forum Outils
    Réponses: 2
    Dernier message: 27/03/2006, 23h23
  3. [Upload] Insertion image dans mysql après upload
    Par alexmorel dans le forum Langage
    Réponses: 4
    Dernier message: 20/03/2006, 23h46
  4. Importer CSV dans MySQL
    Par The_freeman dans le forum Administration
    Réponses: 6
    Dernier message: 14/02/2006, 22h18
  5. pb avec insertion sigle € dans MySql
    Par mohican13 dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 02/12/2005, 10h12

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