Bonjour tout le monde,
J'utilise le script PHP suivant afin d'importer le contenu d'un fichier CSV vers une table de ma BDD MySQL:
Voici le fichier source CSV que je transfère:
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
49
50
51
52
53
54
55
56
57
58
59 /*================== Début de traitement du fichier maj.csv //==================*/ $fp = fopen("../../../uploads/maj.csv","r"); //lecture if (!$fp) { echo "Echec de l'ouverture du fichier"; exit; } else { echo "C'est OK"; $hostname = "localhost"; // nom du serveur $database = "***"; // nom de la base de données $username = "***"; $password = "***"; // mot de passe (aucun par défaut mais il est conseillé d'en mettre un) $db = mysql_connect($hostname, $username, $password) or die ("Impossible de se connecter à la base de données, veuillez vérifier les informations de connexion"); //===================== // Initialisation //===================== mysql_select_db($database,$db); while (!feof($fp)) // teste la fin du fichier téléchargé, { // Tant qu'on est pas arrivé à la fin du fichier on continue... $ligne = fgets($fp); // récupère la ligne courante sur laquelle se trouve le pointeur du fichier $liste = explode(";",$ligne); // on place les élements séparés par des points virgule dans un tableau. // ";" étant le séparateur pour un fichier de type CSV // premier élément $liste[0] = ( isset($liste[0]) ) ? $liste[0] : Null; $liste[1] = ( isset($liste[1]) ) ? $liste[1] : Null; $champs1=$liste[0]; $champs2=$liste[1]; // pour eviter qu'un champ "nom" du fichier soit vide if ($champs1!='') { // requete et insertion ligne par ligne // champs1 id en general dc on affecte pas de valeur $query = "INSERT INTO majPonctuelle (site_theorique,priorite_finale) VALUES('$champs1','$champs2')"; $result= mysql_query($query); if (mysql_error()) { echo 'ERREUR DE REQUETE SUR LA BASE'; fclose($fp); // fermeture du fichier exit(); } else // else, affichage d'un tableau HTML récapitulant tous les enregistrements ajoutés { } } } fclose($fp); // fermeture du fichier /*================== Fin de traitement du fichier maj.csv //==================*/ }
Il est bien transféré vers ma table MySQL mais des sauts de lignes sont ajoutés:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 T10001;P1 T10002;P2 T10003;P3 T10004;P4 T10005;P5 T10006;P6
PS: j'ai remarqué que lorsque je change le type de champ `priorite_finale` varchar(11) NOT NULL en `priorite_finale` int(11) NOT NULL, les sauts de ligne disparaissent. Avez vous une idée pourquoi ces sauts de ligne sont ajoutés et comment les éliminer? Merci.
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 -- Structure de la table `majponctuelle` -- CREATE TABLE `majponctuelle` ( `site_theorique` varchar(11) NOT NULL, `priorite_finale` varchar(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Contenu de la table `majponctuelle` -- INSERT INTO `majponctuelle` (`site_theorique`, `priorite_finale`) VALUES ('T10001', 'P1\r\n'), ('T10002', 'P2\r\n'), ('T10003', 'P3\r\n'), ('T10004', 'P4\r\n'), ('T10005', 'P5\r\n'), ('T10006', 'P6\r\n');
Cordialement.
Partager