Page 1 sur 1

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

Posté : 27 sept. 2016, 01:57
par soulpresidente
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>

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

Posté : 27 sept. 2016, 12:44
par moogli
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();

@+

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

Posté : 28 sept. 2016, 03:25
par soulpresidente
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

Posté : 28 sept. 2016, 10:17
par moogli
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

Posté : 29 sept. 2016, 03:51
par soulpresidente
merci a vous , tout marche trés bien desormais

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

Posté : 08 juin 2018, 18:12
par Luckylestidien
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: [RESOLU] importation d'un fichier excel ou csv dans une table sql avec un script php

Posté : 08 juin 2018, 22:18
par moogli
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

Posté : 15 juin 2018, 14:27
par Luckylestidien
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

Posté : 15 juin 2018, 23:54
par @rthur
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é.