Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/02/2011, 11h46   #1
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Par défaut Insertion csv dans Mysql par tableau

Bonjour,

Voilà mon code :
Code :
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
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 11h50   #2
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
ca sert a rien ca :
Code :
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 11h59   #3
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
J'ai supprimé ce qui ne servait à rien.

J'ai "bool(false)" qui s'est affiché en plus, depuis le var_dump($data);
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 13h12   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h34   #5
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Pourtant je ne vois pas ou est la faute

Mon autre script php qui marche :

Code :
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.

Citation:
ton fgetcsv ne marche pas alors
Il y a une raison pour qu'il ne fonctionne pas ?
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 14h51   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
le var_dump tu la bien fait dans ta boucle while ?
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 15h13   #7
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Effectivement,, je m'était tromper d'une ligne.

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

Code :
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" }
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 15h18   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
t'en a 7 pas 8
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 15h23   #9
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
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.
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 15h26   #10
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 15h40   #11
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
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.
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 15h57   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
ta requête doit être du type :

Code :
INSERT INTO ccf_utilisateur (champ1, champ2, ...) VALUES (value1, value2, ...)
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 16h11   #13
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Donc ca se présenterait comme ça ?

Code :
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
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2011, 16h17   #14
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
essaye, mais utilise vsprintf ca sera plus lisible
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 09h27   #15
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
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
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 10h05   #16
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 :
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);
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/02/2011, 10h18   #17
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
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 :
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
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 10h22   #18
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

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

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Erreur de ma part.
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 10h39   #19
Invité de passage
 
Inscription : février 2011
Messages : 17
Détails du profil
Informations forums :
Inscription : février 2011
Messages : 17
Points : 1
Points : 1
Gwarl, t'a réponse était pour mon message avec que je l'édit ?

Sinon comment on met le sujet résolue ?

Thx
mousefr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2011, 10h45   #20
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

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

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Pas vus l'édition à temps désolé, en bas du topic tu as un bouton "résolu".
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 11h15.


 
 
 
 
Partenaires

Hébergement Web