Bonsoir à tous,
J'essaie de me créer en local une petite moulinette pour comparer des tarifs fournisseurs à ceux contenus dans une gestion commerciale.
Pour cela j'ai la possibilité d'avoir des 2 côtés des tableaux CSV que j'importe dans une table d'une base de données pour y faire ensuite différents traitements...
Je me heurte à 2 problèmes dès le début...
1 - Je me demande si le code que j'ai écris est vraiment optimisé (je fais une requête dans une boucle !). Je pense qu'il doit y avoir un moyen de faire ça avec un array mais je ne sais pas comment faire.
2 - J'ai des erreurs à la moindre apostrophe dans la désignation d'une ou l'autre des tableaux CSV au moment de l'insertion...
Peut-on éviter ça, car je voudrai éviter d'avoir à les virer à la main avant, même avec un CTRL H...
Voici mon code de traitement après l'envoi du formulaire de selection du fichier CSV :
<?php
// Transfert fichier Uploadé :
if(isset($_FILES['sab'])) {
$dossier = 'upload/';
$nom = 'sab.csv';
move_uploaded_file($_FILES['sab']['tmp_name'], $dossier . $nom);
}
require ('connexion.php');
//Vidage de la précédente table 'sab' :
$vidage_sab = $DB->exec("TRUNCATE TABLE `sab`");
// Ouverture fichier Uploadé :
$fichier = fopen("upload/".$nom, "r");
//Enregistrement dans la table sab, ligne par ligne :
while (($data = fgetcsv($fichier,";")) !== FALSE) {
$designation = $data[0];
$ht = $data[1];
$requete = $DB->exec("INSERT INTO sab (designation,ht) VALUES ('$designation','$ht')");
}
?>
Merci d'avance pour vos tuyaux !
En attendant de trouver mieux, j'ai fait ça :
$designation = $data[0];
$designation = str_replace("'", " ", $designation);
// echo $designation;
?>y);
Et ça fonctionne !
Ta solution supprime les apostrophes, c'est pas top.
il faut échapper les caractères spéciaux comme l'apostrophe, PDO propose la fonction quote() qui fait ça.
$designation = $DB->quote($data[0]);
Une autre solution c'est d'utiliser les requêtes préparées.
une autre c'est de doubler les apostrophes
$designation = str_replace("'", "''", $designation);