IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Tableau filtré avec CSV


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Par défaut Tableau filtré avec CSV
    Bonjour,

    Je débute en php mais je souhaite récupérer les données d'un tableau CSV dont je me suis fournit sur le net et qui marche très bien. Par contre, je n'arrive pas filtrer soit par récupération dans combobox pour chaque entête de colonne ou avec textbox de recherche par colonne. J'ai trouvé un code qui fonctionne très bien mais utilise JavaScript et ne sais pas comment l'adapter...

    Qui plus est, j'aurais souhaité que la dernière colonne du CSV contienne une URL qui servira à se connecter directement en cliquant sur l'élément concerné du tableau.

    Si quelqu'un à une idée ?

    Voici le code php de récup des info. du csv :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    <?PHP
     
    //Fichier CSV à parser
    $fichier = 'test.csv';
     
    //On vérifie que le fichier existe bien
    if (file_exists($fichier))
    {
    //On l'ouvre en mode "read only"
    $fp = fopen($fichier, 'r');
    //On va générer l'affichage sous forme de tableau
    echo '<table>';
    //Tant que l'on n'a pas finit de lire le fichier
    while (!feof($fp)){
    echo '<tr>';
    //On lit les 4096 caractères de la ligne
    $ligne = fgets($fp,4096);
    /* On met dans un tableau toutes les données, séparées par des points virgules */
    $liste = explode(';',$ligne);
    /* On crée une colonne contenant les données pour chacune d'entre elles en parsant le tableau */
    foreach($liste as $element)
    {
    echo '<td>' . trim($element) . '</td>';
    }
    echo "</tr>";
    }
    //On ferme le fichier et la balise de tableau
    echo '</table>';
    fclose($fp);
    }
    else
    echo "Fichier introuvable !"; 
     
    ?>

    Merci d'avance.

    John

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Par contre, je n'arrive pas filtrer soit par récupération dans combobox pour chaque entête de colonne ou avec textbox de recherche par colonne.
    Qu'est-ce qui te bloque ? Que veux-tu faire exactement ?
    Donne un lien vers le CSV ou postes-en un petit extrait significatif pour qu'on se fasse une idée de ta source.

    Note : il existe une fonction PHP gérant les .csv : fgetcsv( ) http://fr.php.net/fgetcsv

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Par défaut RE
    Hello,

    je joins un zip qui contient un html avec js pour filtrer les données d'un tableau.
    En effet, pour mon projet, je souhaitais afficher des données venant d'un fichier XML mais pour des raisons de simplification, j'ai décidé d'utiliser un csv comme source de données mais avec js apparament impossible...

    Mon but est d'avoir le même résultat avec php et csv c-à-d. de récupérer les données avec entêtes de mon fichiers CSV et ensuite pouvoir effectuer des filtres de type "*contenant*" pour chaque entête de colonne...

    Je joins le csv test également dans zip.

    Merci.

    john
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 368
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 368
    Billets dans le blog
    17
    Par défaut
    Ok je vois, de quelles infos as-tu besoin pour réaliser cela ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Par défaut
    Il me faudrait récupérer les valeurs de la première ligne de mon CSV pour les considérer comme <TH> (entête de mon tableau) et les dernières valeurs de chaque lignes comme lien URL (hyperlink)... Est-ce possible en php ?

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    Tu n'a qu'à personnaliser les trois premières lignes (tu peux laisser la troisième tel quel)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <?php
     
    $fichier = 'test.csv';
    $separateur = ';';
    $table_temp = 'test_csv';
     
     
    try
    {
        $dbh = new PDO('sqlite::memory:');
        $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    }
    catch(PDOException $e)
    {
        exit($e->getMessage());
    }    
     
     
    $file = new SplFileObject($fichier);
    $file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
    $file->setCsvControl($separateur);
     
     
    $entete_champs =  $file->fgets();
     
    $tab_champs = explode ($separateur,$entete_champs);
     
    $champs_sqlite = implode(',',$tab_champs);
     
    $champs_insert = array_fill(0,count($tab_champs),'?');
     
    $champs_insert = implode(',',$champs_insert);
     
     
    $dbh->exec("CREATE TABLE $table_temp ($champs_sqlite)");
     
    $stmt = $dbh->prepare("INSERT INTO $table_temp VALUES ($champs_insert)");    
     
     
    foreach($file as $row)
    {
        if ($file->key() !== 0) $stmt->execute($row);
    }
     
    $query = $dbh->query("SELECT * FROM $table_temp");
     
    echo '<table>';
     
    while($row = $query->fetch(PDO::FETCH_ASSOC))
    {
        echo '<tr><td>' . implode('</td><td>', $row) . '</td></tr>';
    }
     
    echo '</table>';
    ?>

  7. #7
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    pour recupere la premiere ligne tu peu faire avec

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 420
    Par défaut
    J'ai modifié mon précédent message en rajoutant la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query->fetch(PDO::FETCH_ASSOC);//pour enlever la première ligne qui est constituée des entêtes de colonnes
    Le code que je t'ai donné suppose que la première ligne de ton fichier csv indique le nom des colonnes. Sinon il faut reconstituer la table comme dans le lien que je t'ai donné en référence.

    Pff... ben non c'était pas la bonne méthode puisque cela ne supprimait la ligne qu'à l'affichage. Bon j'ai édité le code du premier message et c'est corrigé.

  9. #9
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    on est pas obligé de faire un foreach

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $tab_champs = $file->current();
    $file->next();
     
    $champs_sqlite = implode(',',$tab_champs); 
    $champs_insert = array_fill(0,count($tab_champs),'?'); 
    $champs_insert = implode(',',$champs_insert);	
     
    //...
     
    while($row = $file->current())
    {		
        $stmt->execute($row);
        $file->next();
    }

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Par défaut
    Merci les gars, en effet le code proposé fonctionne, je concerve ma fonction pour le tri des données affichées en JS... par contre j'avais le même résultat avec mon code initial...

    ceci dit, j'ai toujours un souci avec la création de hyperlinks avec les données de la dernière colonnes quitte à déclarer toutes les données en hyperlink...
    ou alors toute entrée contenant "http://..."

Discussions similaires

  1. Remplir ComboBox avec tableau filtré: erreur 381.
    Par c.piette dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/04/2015, 16h38
  2. [XL-2007] Tableau dynamique avec filtre et champs calculés
    Par Kanou92 dans le forum Excel
    Réponses: 0
    Dernier message: 17/12/2013, 16h16
  3. Réponses: 5
    Dernier message: 22/10/2009, 14h59
  4. [CSV] Tableau php avec mysql dans un fichier excel
    Par saraza dans le forum Langage
    Réponses: 3
    Dernier message: 06/01/2009, 19h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo