Bonjour,

Je reviens vers vous avec mon problème d'import de fichier csv dans ma base de données.
le script fonctionne très bien lorsque je met le nom du fichier en dur dans la variable $filename, mais je voudrai pouvoir sélectionner mon fichier avec un formulaire et lorsque je clique sur le bouton "submit" faire le traitement d'import, j'ai essayer tout type de formulaire mais je n'y arrive pas je ne comprends pas ou je fait l'erreur.

merci d'avance de votre aide.

Gilles.

<?php
    include './lib/includes.php';
    // définition des variables
    //$filename = './immat.csv';
    if(isset($_POST'import'])){
    $filename = $db->quote($_POST'import']);
    // fonction lecture du fichier
    function read_csv($filename)
        {
        // ouverture du fichier
        $FILE=fopen($filename,"r");
        // lire ligne par ligne et couper colonne par colonne
        while ($ARRAY]=fgetcsv($FILE,1024,";"));
        // fermer le fichier
        fclose($FILE) ;
        // effacer la dernière ligne
        array_pop($ARRAY);
        // renvoi le tableau
        return $ARRAY ;
        }
    $data = read_csv($filename);
        foreach ( array_slice( $data, 1 ) as $i => $line ) {
            $select = $db->query("SELECT COUNT(*) AS verif_chassis FROM vehicules WHERE chassis='". $line[1] ."'");
                if( $select->fetch()->verif_chassis < 1 ){
                    $import = $db->query("INSERT INTO vehicules (id, immat, chassis) VALUES ('','". $line[0] ."', '". $line[1] ."')");
                }else{
                    $import = $db->query("UPDATE vehicules SET immat='$line[0]' WHERE chassis='". $line[1] ."'");
                }
        }
    }
?>
<form action="#" method="post" enctype="multipart/form-data">
            <div class="form-group">
                <label for="import">Fichier à traiter</label>
                <input type='file' class='form-control' name='import'>
            </div>
            <button type="submit" class="btn btn-primary">Traitement Fichier</button>
</form>

3 réponses


Vallyan
Réponse acceptée

Les input de types files sont récupérés et traité de la facon suivante:

<?php 
if( isset($_FILES'import']) ){
    // Disons que tu veux mettre ton fichier dans le dossier ImportedFile qui est dans le dossier courant
    // Créé le nom du fichier:
    $fileName= __DIR__. "/ImportedFiles/".basename($_FILES'import']'name']) ;
    // Place le fichier, sous le nom que tu viens de lui donner, dans le répertoir approprié
    move_uploaded_file( $_FILES'import']'tmp_name'], $fileName);
    // Tu peux travailler avec $fileName pour lire le fichier comme tu faisais avant ...
}
gilles40
Auteur

Bonjour Vallyan,

merci pour ton aide, ca fonctionne!!
par contre dans le move_uploaded_file le second parametre est $target, c est quoi ca? moi cela ne passait pas avec donc j'ai mis $filename a la place... est une betise de faire comme j ai fait?

Gilles

Non, t'as absolument raison, c'est bien $fileName qu'il faut utiliser ^^, c'est moi qui me suis planté :/

Je viens de corriger, d'ailleurs ...