Insertion fichier CSV et apostrophes...

Par Etienne69, il y a 11 ans


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, il y a 11 ans

En attendant de trouver mieux, j'ai fait ça :

$designation = $data[0]; $designation = str_replace("'", " ", $designation); // echo $designation; ?>y);

Et ça fonctionne !

Huggy, il y a 11 ans

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