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:
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
Dans ce fichier, on remarque que pour Maguin, la société forme un doublon avec un interlocuteur différent.

Structure de la bdd:
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;
Remarques sur ces tables:
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:
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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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='&lt; ---- &gt;'></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>
J'ai créé le code php suivant mais je n'arrive pas à ventiler mes données pour chaque table.
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 TABLEAU
Ce code produit le résultat suivant:
var_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)