Bonjour,
J'ai un formulaire qui établi la correspondance entre les champs CSV et ceux de la base de données. Je n'arrive pas à ventiler les données CSV pour les adapter aux tables de la vase de données.
Exemple de fichier CSV:
Dans ce fichier, on remarque que pour Maguin, la société forme un doublon avec un interlocuteur différent.Société;CP;Ville;Forme juridique;Prénom;Nom Maguin;02800;Charmes;4;Marcel;Dupont Métal Industriel de Chauny;02300;Chauny;2;Max;Durand ROTOPLAST;02700;Condren (Aisne);1;; SOMACO;02103;SAINT QUENTIN Cedex;2;; Maguin;02800;Charmes;4;Jean;Petit
Structure de la bdd:Remarques sur ces tables:
Code SQL : 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 CREATE TABLE IF NOT EXISTS `dat_customers` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `id_subscriber` int(10) UNSIGNED NOT NULL, `company_name` varchar(60) NOT NULL DEFAULT 'customer_name=`id`' COMMENT 'Default value by import when customer_name doesn''t exist.', `company_fullname` varchar(60) DEFAULT NULL, `address1` varchar(60) DEFAULT NULL, `address2` varchar(60) DEFAULT NULL, `country` varchar(2) DEFAULT NULL, `zipcode` varchar(6) DEFAULT NULL, `locality` varchar(25) DEFAULT NULL, `create_date` datetime DEFAULT CURRENT_TIMESTAMP, `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `unique` (`id_subscriber`,`company_name`,`address1`,`address2`,`zipcode`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE IF NOT EXISTS `dat_infos` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `legal_status` varchar(15) DEFAULT NULL, `capital` mediumint(9) DEFAULT NULL COMMENT 'en k', `turnover` mediumint(9) DEFAULT NULL COMMENT 'en k', `create_date` datetime DEFAULT CURRENT_TIMESTAMP, `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `dat_infos` ADD CONSTRAINT `dat_infos_ibfk_1` FOREIGN KEY (`id`) REFERENCES `dat_customers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE; CREATE TABLE IF NOT EXISTS `dat_employees` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `id_customer` int(10) UNSIGNED DEFAULT NULL, `gender` varchar(15) DEFAULT NULL, `title` tinyint(2) DEFAULT NULL, `firstname` varchar(20) DEFAULT NULL, `familyname` varchar(20) DEFAULT NULL, `directcall` varchar(20) DEFAULT NULL, `directfax` varchar(20) DEFAULT NULL, `directmail` varchar(65) DEFAULT NULL, `gsm` varchar(20) DEFAULT NULL, `create_date` datetime DEFAULT CURRENT_TIMESTAMP, `update_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `unique` (`id_customer`,`familyname`,`firstname`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `dat_employees` ADD CONSTRAINT `dat_employees_ibfk_1` FOREIGN KEY (`id_customer`) REFERENCES `dat_customers` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
L'id des tables dat_customers et dat_infos est le le même.
Ce même id se trouve dans la colonne id_customer de la table dat_employees.
Un formulaire permet d'établir la correspondance entre les champs de la table CSV d'origine et la base de données:J'ai créé le code php suivant mais je n'arrive pas à ventiler mes données pour chaque table.
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
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114 <fieldset><legend>Données adresse</legend> <label><span>company_name</span><select name='source[0][2]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> <label><span>address</span><select name='source[0][4]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> <label><span>country</span><select name='source[0][6]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> <label><span>zipcode</span><select name='source[0][7]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> <label><span>locality</span><select name='source[0][8]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> </fieldset> <fieldset><legend>Autres infos</legend> <label><span>legal_status</span><select name='source[1][1]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> <label><span>capital</span><select name='source[1][2]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> <label><span>turnover</span><select name='source[1][3]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> </fieldset> <fieldset><legend>Données interlocuteurs</legend> <label><span>gender</span><select name='source[2][2]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> <label><span>title</span><select name='source[2][3]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> <label><span>firstname</span><select name='source[2][4]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> <label><span>familyname</span><select name='source[2][5]'> <option value='' label='< ---- >'></option> <option value='0'>Société</option> <option value='1'>CP</option> <option value='2'>Ville</option> <option value='3'>Forme juridique</option> <option value='4'>Prénom</option> <option value='5'>Nom</option> </select></label><br> </fieldset>Ce code produit le résultat suivant:
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 var_dump($post); // VOIR POUR AJOUTER LE id dans les infos ET LE id_customer DANS LES INTERLOCUTEURS $inData = []; for($i=0;$i<3;$i++){ $Max = count($post['source'][$i]); $num = 0; while(($data = fgetcsv($in,null,$delimiter)) !== false and $num<$Max){ $num++; $inData[$i][] = $convertEncoding ? mb_convert_encoding($data,"UTF-8",$code): $data; } } fclose($in); var_dump($inData); // LES TROIS TABLES SONT CUMULEES DANS LE MEME TABLEAUvar_dump($post): array (size=1) 'source' => array (size=3) 0 => array (size=16) 1 => string '2' (length=1) 2 => string '0' (length=1) 3 => string '' (length=0) 4 => string '' (length=0) 5 => string '' (length=0) 6 => string '' (length=0) 7 => string '1' (length=1) 8 => string '2' (length=1) 9 => string '' (length=0) 10 => string '' (length=0) 11 => string '' (length=0) 12 => string '' (length=0) 13 => string '' (length=0) 14 => string '' (length=0) 15 => string '' (length=0) 16 => string '' (length=0) 1 => array (size=11) 1 => string '3' (length=1) 2 => string '' (length=0) 3 => string '' (length=0) 4 => string '' (length=0) 5 => string '' (length=0) 6 => string '' (length=0) 7 => string '' (length=0) 8 => string '' (length=0) 9 => string '' (length=0) 10 => string '' (length=0) 11 => string '' (length=0) 2 => array (size=17) 2 => string '' (length=0) 3 => string '' (length=0) 4 => string '4' (length=1) 5 => string '5' (length=1) 6 => string '' (length=0) 7 => string '' (length=0) 8 => string '' (length=0) 9 => string '' (length=0) 10 => string '' (length=0) 11 => string '' (length=0) 12 => string '' (length=0) 13 => string '' (length=0) 14 => string '' (length=0) 15 => string '' (length=0) 16 => string '' (length=0) 17 => string '' (length=0) 18 => string '' (length=0) var_dump($inData) erroné: array (size=1) 0 => array (size=5) 0 => array (size=6) 0 => string 'Maguin' (length=6) 1 => string '02800' (length=5) 2 => string 'Charmes' (length=7) 3 => string '4' (length=1) // Ligne en trop ici 4 => string 'Marcel' (length=6) // Ligne en trop ici 5 => string 'Dupont' (length=6) // Ligne en trop ici 1 => array (size=6) 0 => string 'Métal Industriel de Chauny' (length=27) 1 => string '02300' (length=5) 2 => string 'Chauny' (length=6) 3 => string '2' (length=1) // Ligne en trop ici 4 => string 'Max' (length=3) // Ligne en trop ici 5 => string 'Durand' (length=6) // Ligne en trop ici 2 => array (size=6) 0 => string 'ROTOPLAST' (length=9) 1 => string '02700' (length=5) 2 => string 'Condren (Aisne)' (length=15) 3 => string '1' (length=1) // Ligne en trop ici 4 => string '' (length=0) // Ligne en trop ici 5 => string '' (length=0) // Ligne en trop ici 3 => array (size=6) 0 => string 'SOMACO' (length=6) 1 => string '02103' (length=5) 2 => string 'SAINT QUENTIN Cedex' (length=19) 3 => string '2' (length=1) // Ligne en trop ici 4 => string '' (length=0) // Ligne en trop ici 5 => string '' (length=0) // Ligne en trop ici 4 => array (size=6) 0 => string 'Maguin' (length=6) 1 => string '02800' (length=5) 2 => string 'Charmes' (length=7) 3 => string '4' (length=1) // Ligne en trop ici 4 => string 'Jean' (length=4) // Ligne en trop ici 5 => string 'Petit' (length=5) // Ligne en trop ici var_dump($inData) voulu: array (size=1) 0 => array (size=5) 0 => array (size=6) 0 => string 'Maguin' (length=6) 1 => string '02800' (length=5) 2 => string 'Charmes' (length=7) 1 => array (size=6) 0 => string 'Métal Industriel de Chauny' (length=27) 1 => string '02300' (length=5) 2 => string 'Chauny' (length=6) 2 => array (size=6) 0 => string 'ROTOPLAST' (length=9) 1 => string '02700' (length=5) 2 => string 'Condren (Aisne)' (length=15) 3 => array (size=6) 0 => string 'SOMACO' (length=6) 1 => string '02103' (length=5) 2 => string 'SAINT QUENTIN Cedex' (length=19) 4 => array (size=6) 0 => string 'Maguin' (length=6) 1 => string '02800' (length=5) 2 => string 'Charmes' (length=7) 1 => array (size=5) 0 => array (size=6) 0 => string '4' (length=1) 1 => array (size=6) 0 => string '2' (length=1) 2 => array (size=6) 0 => string '1' (length=1) 3 => array (size=6) 0 => string '2' (length=1) 4 => array (size=6) 0 => string '4' (length=1) 2 => array (size=5) 0 => array (size=6) 0 => string 'Marcel' (length=6) 1 => string 'Dupont' (length=6) 1 => array (size=6) 0 => string 'Max' (length=3) 1 => string 'Durand' (length=6) 2 => array (size=6) 0 => string '' (length=0) 1 => string '' (length=0) 3 => array (size=6) 0 => string '' (length=0) 1 => string '' (length=0) 4 => array (size=6) 0 => string 'Jean' (length=4) 1 => string 'Petit' (length=5)
Partager