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 !

2 réponses


Etienne69
Auteur
Réponse acceptée

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);