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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 7
    Points
    7
    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 éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 228
    Points : 8 487
    Points
    8 487
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 7
    Points
    7
    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 éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 228
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 7
    Points
    7
    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 éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    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 éminent sénior

    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
    Points : 10 727
    Points
    10 727
    Par défaut
    pour recupere la premiere ligne tu peu faire avec

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    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 éminent sénior

    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
    Points : 10 727
    Points
    10 727
    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
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 7
    Points
    7
    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://..."

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    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 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Citation Envoyé par johnvlesk Voir le message
    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://..."
    Pour créer des liens, par rapport au code précédent, il te suffit de lister ta table de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while($row = $query->fetch(PDO::FETCH_ASSOC))
    {
        echo '<tr><td>' .$row['Device']. '</td><td>' .$row['Desription']. '</td><td>' .$row['Location']. '</td><td>' .$row['Notes']. '</td><td><a href="' .$row["ModuloURL"]. '">' .$row['ModuloURL']. '</td></tr>';
    }
    Notes que j'ai écrit $row['ModuloURL'] donc sans espace car il ne faut pas d'espace dans le nom de colonne pour pouvoir récupérer facilement un champ mysql.
    Donc soit tu change le nom de cette colonne dans ton fichier csv soit tu écrit le nom des colonnes manuellement (et sans espace) à la ligne CREATE TABLE

    Si ce n'est pas ça, j'ai pas compris ce que tu veux et donnes-nous un exemple de ce que tu veux faire afficher.

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Résolu !!!
    MERCI ABCIWEB!!!

    Effectivement j'étais parti dans la direction ennoncée dans ta réponse mais je me suis complétement planté au niveau de la syntaxe !!! j'y crois pas, bon c'est toujours avec le guillemets " et ' que je me trompe. par contre un grand merci ta réponse car j'ai gagné du temps...

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, 15h38
  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, 15h16
  3. Réponses: 5
    Dernier message: 22/10/2009, 13h59
  4. [CSV] Tableau php avec mysql dans un fichier excel
    Par saraza dans le forum Langage
    Réponses: 3
    Dernier message: 06/01/2009, 18h33

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