L'énoncé du sujet est assez parlant mais je vais reprendre pour être le plus clair possible. J'ai réalisé à partir de la fonction fgetcsv un script qui permet d'intégrer des données d'un fichier poste client à une table mysql. Je voulais savoir si mon code (qui marche) n'est pas trop lourd, bancal et du coup pouvait être optimisé et certainement (pourquoi pas) amélioré.
La donne est la suivante :
L'utilisateur a un fichier csv sur son poste qui contient x lignes sur une seule et unique colonne. Via mon outil d'admin, il sélectionne préalablement d'autres paramètres (transparents pour lui) les fameux champ 2 champ3. Les 7 autres colonnes de l'insert doivent être vides.
Il valide et l'intégration se fait. Les maigres données du csv font office de clef primaire en fait qui seront ensuite updatées.
Voici le code :
<? session_start();
if (isset($_POST["Valider"])){
include ("connexion.php");
//variables normalement non figées
$champ2 = "2";
$champ3 = "3";
//import csv
$row = 1;
$temp = $_FILES["fichier"]["tmp_name"];
$handle = fopen($temp, "r");
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($c=0; $c < $num; $c++) {
$q = "INSERT INTO $matable VALUES ('$data[$c]','$champ2','$champ3','','','','','','','')";
$r = mysql_query($q);
}
}
fclose($handle);
}else{
?>
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="" method="post" enctype="multipart/form-data" name="form1">
<input name="fichier" type="file" id="fichier">
<input name="Valider" type="submit" id="Valider" value="Valider">
</form>
</body>
</html><? } ?>
A vos claviers si vous avez l'temps, je suis "ouvert" à toute critique Hell doc