Je cherche à importer un fichier csv en php, mon script fonctionne très bien la n'est pas le soucis, mais quand j'affiche ma requête SQL je m'aperçois que le fichier csv n'est pas encodé en utf8 et donc ma requête plante.
Le soucis c'est que je ne savais pas faire pour importer un fichier csv vers une BDD donc j'ai pris un script sur internet que j'ai modifié par la suite.
fgetcsv je viens de tester et il me met plusieurs valeurs dans une même ligne :/
Edit : En fait je viens de réussir à obtenir ce que je voulais, j'avais laissé le "," à la place de ";" dans le délimiteur.
Maintenant il me reste encore à régler le problème de ces foutus � :/
Il n'y a strictement rien en lien avec une bdd là.
Si tu obtiens � via ton print_r c'est que ta page est en UTF-8 quand le fichier importé n'y est pas. Ce qui n'est pas forcément problématique (cf mon premier post, le tout étant d'effectuer la conversion à un moment ou à un autre).
Oui ma page est bien en UTF-8, ma base est en utf8_general_CI mais quand je génère le fichier csv à partir du fichier xlsx, je m'aperçois que ce n'est plus en utf-8.
Dans ce cas la, une solution pour convertir le fichier csv importé dans mon script php ? Je sais que tu me l'a expliqué plus haut mais ayant déjà essayé je ne dois surement pas bien m'y prendre.
Sous réserve que le CSV soit (systématiquement) encodé en CP1252, ça dépend ce qui est le plus pratique :
Si ta connexion à la bdd ne sert qu'à faire l'import, tu la mets en latin1 pour insérer directement, à ce moment-là c'est MySQL qui effectuera les conversions de manières transparentes et le tout est de bien indiquer ce jeu à MySQL pour la connexion
$bdd = new PDO('mysql:...;charset=latin1', /* ... */);
$bdd->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
$stmt = $bdd->prepare('INSERT INTO table(cola, colb) VALUES(:colA, :colB)');
$stmt->bindParam('colA', $col1);
$stmt->bindParam('colB', $col2);
while (list($col1, $col2) = fgetcsv($_FILES['filesImport']['tmp_name'])) {
$stmt->execute();
}
Sinon
Si le fichier CSV est de taille raisonnable, tu convertis directement tout le contenu par un iconv('CP1252', 'UTF-8', file_get_contents($_FILES['filesImport']['tmp_name'])) avant de lire le résultat de cette dernière par str_getcsv
J'ai pris la dernière solution, je te remercie beaucoup ça a fonctionné !!!
Problème caractères non utf8 import fichier csv
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli