[RESOLU] importation d'un fichier excel ou csv dans une table sql avec un script php

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] importation d'un fichier excel ou csv dans une table sql avec un script php

Re: [RESOLU] importation d'un fichier excel ou csv dans une table sql avec un script php

par @rthur » 15 juin 2018, 23:54

Les fichiers Excel et les fichiers CSV ont le même Mime Type sous Windows (quand Excel est installé), je pense que le test du mime-type n'est pas pertinent, d'autant qu'il me semble que sous Linux, le mimetype d'un fichier CSV est "text/csv"

A ma connaissance, le plus simple est de juste vérifier l'extension.

Le plus sûr est de faire ton traitement dessus en gérant les erreurs (vérifier que le séprateur de champ est bien présent, qu'il y a le même nombre de champs par ligne par exemple), si il n'y a pas d'erreur alors c'est que le format CSV est bien respecté.

Re: [RESOLU] importation d'un fichier excel ou csv dans une table sql avec un script php

par Luckylestidien » 15 juin 2018, 14:27

Salut,

La réponse est la : http://php.net/manual/fr/features.file- ... method.php
Il s'agit de comparer le type mime du fichier.
Utiliser l’extension n'est pas fiable (garde facilement modifiable).

Tu trouveras des infos sur l'upload de fichier : https://www.phpjungle.info/articles/10- ... -http.html

@+
D'accord merci de votre réponse, mas je ne pense pas avoir bien compris le principe.
J'insert un fichier CSV, et donc grâce à ce code ça devrait me permettre d'éviter d'envoyer un fichier excel ou autre dans la bse de donnée si j'ai bien compris? Parce que j'ai essayé, mais un fichier excel passe quand même et donc je voudrais éviter, et le limiter que aux fichiers CSV.
Merci de votre aide
//UPLOAD DU FICHIER CSV, vérification et insertion en BASE
                        if (isset($_FILES["file"]["type"]) != "application/vnd.ms-excel") {
                            die("Ce n'est pas un fichier de type .csv");

Re: [RESOLU] importation d'un fichier excel ou csv dans une table sql avec un script php

par moogli » 08 juin 2018, 22:18

Salut,

La réponse est la : http://php.net/manual/fr/features.file- ... method.php
Il s'agit de comparer le type mime du fichier.
Utiliser l’extension n'est pas fiable (garde facilement modifiable).

Tu trouveras des infos sur l'upload de fichier : https://www.phpjungle.info/articles/10- ... -http.html

@+

Re: [RESOLU] importation d'un fichier excel ou csv dans une table sql avec un script php

par Luckylestidien » 08 juin 2018, 18:12

Bonjour,

Je cherche à importer une fichier CSV, malgré de nombreuses heures passées dessus, rien qui ne fonctionne, mais j'ai trouvé ce script très intéressant, mais je voudrais savoir à quoi renvoie ce fichier
if(isset($_FILES["file"]["type"]) != "application/vnd.ms-excel"){

Merci de votre aide!
Cordialement

Re: importation d'un fichier excel ou csv dans une table sql avec un script php

par soulpresidente » 29 sept. 2016, 03:51

merci a vous , tout marche trés bien desormais

Re: importation d'un fichier excel ou csv dans une table sql avec un script php

par moogli » 28 sept. 2016, 10:17

je viens de tester ton code (et le miens) avec succès (j'ai corriger la fermeture du curseur).
Il faut que tu débogue ton code pas à pas pour voir ce qui se passe.
est ce que les données sont conforme à ce que tu attends ? (nombre de colonne type de données etc.
Ajoute des else à tes if / elseif pour avoir un message en cas de "cas" non prévu

tu peux afficher $data avec un var_dump($data) pour vérifier cela.

pour mes tests j'ai créé une table simple
CREATE TABLE `entreprise` (
  `id` int(11) DEFAULT NULL,
  `RaisonSociale` varchar(50) DEFAULT NULL,
  `Activite` varchar(50) DEFAULT NULL,
  `pays` varchar(50) DEFAULT NULL,
  `ville` varchar(50) DEFAULT NULL,
  `Email` varchar(50) DEFAULT NULL,
  `Telephone` varchar(50) DEFAULT NULL,
  `Gerant` varchar(50) DEFAULT NULL,
  `AutreContact` varchar(50) DEFAULT NULL,
  `TelephoneDirecteur` varchar(50) DEFAULT NULL,
  `EmailDirecteur` varchar(50) DEFAULT NULL,
  `Fonction` varchar(50) DEFAULT NULL
)
le code php corrigé et fonctionnel
<?php
if (!empty($_FILES['file'])) {
    try {
        $pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'root', '', [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'']);
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $pdo->exec('delete from entreprise');
    } catch (Exception $e) {
        die('Erreur : '.$e->getMessage());
    }
    //UPLOAD DU FICHIER CSV, vérification et insertion en BASE
    if (isset($_FILES["file"]["type"]) != "application/vnd.ms-excel") {
        die("Ce n'est pas un fichier de type .csv");
    } elseif (is_uploaded_file($_FILES['file']['tmp_name'])) {
        $req = $pdo->prepare('INSERT INTO entreprise ( RaisonSociale, Activite, pays, ville, Email, Telephone, Gerant,
    AutreContact, TelephoneDirecteur, EmailDirecteur, Fonction) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
        $file = new SplFileObject($_FILES['file']['tmp_name']);
        $file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
        foreach ($file as $row) {
            $req->execute([$row[0], $row[1], $row[2], $row[3], $row[4], $row[5], $row[6], $row[7], $row[8], $row[9], $row[10]]);
        }
        $req->closeCursor();
    } else {
        echo 'epic fail<br />';
    }
}
?>

<form enctype="multipart/form-data" action="" method="POST">
    <div class="form-group">
        <input name="file" type="file" />
        <p><input type="submit" value="Envoyez le fichier"/></p>
    </div>
</form>
Le fichier de test : https://gist.github.com/anonymous/b69f9 ... 55a3a6fa86

@+

Re: importation d'un fichier excel ou csv dans une table sql avec un script php

par soulpresidente » 28 sept. 2016, 03:25

Merci a vous, en fait quand je charge le fichier et que je clique sur envoyer , j'obtiens une page blanche sans message d'erreur mais je retrouve pas les objets dans la base de données.. donc je ne peux pas savoir ce qu'ils faut corriger...

Re: importation d'un fichier excel ou csv dans une table sql avec un script php

par moogli » 27 sept. 2016, 12:44

salut,

qu'elle est le problème ?
sans cela il est difficile de t'aider.

pour l'exploitation du fichier regarde plutôt des couples file_get_content / str_getcsv ou de splfileobject qui facilite la lecture de csv http://php.net/manual/fr/splfileobject.fgetcsv.php

exemple
<?php
// connexion avant
// la préparation de la requête ne se fait qu'une seule fois
$req = $pdo->prepare('INSERT INTO entreprise ( RaisonSociale, Activite, pays, ville, Email, Telephone, Gerant,
AutreContact, TelephoneDirecteur, EmailDirecteur, Fonction) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');
// ouverture du fichier
$file = new SplFileObject($_FILES['file']['tmp_name']);
$file->setFlags(SplFileObject::READ_CSV);
foreach ($file as $row) {
    $req->execute([$row[0], $row[1], $row[2], $row[3], $row[4], $row[5], $row[6], $row[7], $row[8], $row[9], $row[10]]);
}
$req->close();

@+

importation d'un fichier excel ou csv dans une table sql avec un script php

par soulpresidente » 27 sept. 2016, 01:57

bonjour a tous..
je suis entrain d'ecrire un script php pour importer des données dans une table et voila le script obtenu a la fin
<?php
try
{
    $pdo = new PDO('mysql:host=localhost;dbname=projetemedia;charset=utf8', 'root', '');
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
//UPLOAD DU FICHIER CSV, vérification et insertion en BASE
if(isset($_FILES["file"]["type"]) != "application/vnd.ms-excel"){
    die("Ce n'est pas un fichier de type .csv");
}
elseif(is_uploaded_file($_FILES['file']['tmp_name'])) {
    //$row = 1;
    if (($handle = fopen($_FILES['file']['tmp_name'], "r")) !== FALSE) {
        fgetcsv($handle);
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            for ($c=0; $c < $num; $c++) {
                $col[$c] = $data[$c];
            }

            $col1 = $col[0];
            $col2 = $col[1];
            $col3 = $col[2];
            $col4 = $col[3];
            $col5 = $col[4];
            $col6 = $col[5];
            $col7 = $col[6];
            $col8 = $col[7];
            $col9 = $col[8];
            $col10 = $col[9];
            $col11 = $col[10];

            $req = $pdo->prepare('INSERT INTO entreprise (id, RaisonSociale, Activite, pays, ville, Email, Telephone, Gerant,
AutreContact, TelephoneDirecteur, EmailDirecteur, Fonction) VALUES(?,?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)');

            $req->execute(array('',$col1, $col2, $col3,$col4, $col5, $col6, $col7,$col8, $col9, $col10, $col11));

        }
        fclose($handle);

    }
}
?>
. Mais je n'obtiens pas le resultat souhaiter.


voici mon code pour importer le fichier
<form enctype="multipart/form-data" action="import.php" method="POST">
    <div class="form-group">
        <input name="file" type="file" />
        <p><input type="submit" value="Envoyez le fichier" /></p>
    </div>
</form>