Bonjour à tous,
L'idée :
Importer un fihcier CSV et utiliser les noms des colonnes comme étant noms de champs pour la table de la BD.
Dans le cas ou la table existe déjà; déclencher une comparaison entre les colonnes CSV et les champs de la table existé.
Prob 1 :
Certains noms des colonnes du fichier csv contiennent des espaces ou des points, tels que (Type intrv ou Com. litig )alors que cela signifie qu'on aura des problémes lors de la création de la table.
Pour le problème des espaces j'ai utilisé la fonction preg_replace comme vous pouvez la voir sur le code
Pour le problème des points j'ai pensé à la solution suivante: utiliser la fonction str_replace.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $first1 = preg_replace( '/([^.a-z0-9]+)/i','_',$liste1[0]);
Mais je voudrais vous demander est-ce qu'il existe d'autre méthode pour éviter tout cela et bien d'autres problèmes (par exemple, si le champ est appelé référence le preg_replace ca la transformer en r_f_rence) ??
Prob2:
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 if(isset($_POST['valideImport'])) { if (isset($_FILES['fichier']['tmp_name']) && is_uploaded_file($_FILES['fichier']['tmp_name'])) { $fp = fopen($_FILES['fichier']['tmp_name'], "r"); $nbr_fic = 0; } // récupérer la premiére ligne if( ($ligne[1] = trim(fgets($fp,4096))) !== '' ) { $liste1 = explode( ";",$ligne[1]); $first1 = preg_replace( '/([^.a-z0-9]+)/i','_',$liste1[0]); $last1 = preg_replace( '/([^.a-z0-9]+)/i','_',$liste1[1]); $mail1 = preg_replace( '/([^.a-z0-9]+)/i','_',$liste1[2]); echo $first1."".$last1."".$mail1."<br>"; $sql = "CREATE TABLE exportpn ( id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY, ".$first1." VARCHAR(30) NOT NULL, ".$last1." VARCHAR(30) NOT NULL, ".$mail1." VARCHAR(50))"; if ($conn->query($sql) === TRUE) { echo "Table exportpn OK"; } else { echo $conn->error; } }
Le problème c'est que les colonnes csv sont variables ( possibilité d'apparence d'une nouvelle colonne )
J'ai commencé à traiter le prob par l'idée d'extraire les champs de base de données et les comparer avec les colonnes csv, mais je sais pas comment l'exploiter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 $show=$conn->query("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_NAME`='exportpn'"); while($result = mysqli_fetch_array($show)) { echo $result[0]."<br>"; }
Partager