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 :

fonction qui match la valeur d'une variable issue d'un formulaire dans un csv (fgetcsv)


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut fonction qui match la valeur d'une variable issue d'un formulaire dans un csv (fgetcsv)
    Bonjour

    je souhaiterais parcourir un csv avec fgetcsv
    comme ceci par exemple
    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
    <?php
    if (($handle = fopen("toto.csv", "r")) !== FALSE) {
        echo <table>
        while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
            $num = count($data);
            echo "<tr>";
            for ($c=0; $c < $num; $c++) {
                echo '<td>'.$data[$c].'</td>';
            }
           echo '</tr>';
        }
        fclose($handle);
        echo '</table>';
    }
    ?>
    mais là afficher seulement le résultat d'une recherche venant d'un formulaire
    exemple j'ai ceci comme csv

    ID | NOM | TEL

    1 | DURAND | 0102030405
    2 | MARCHANDAUX | 0102031405
    3 | JANVIER| 0102011405
    2 | AGONOT| 0102441405

    je cherche via un form le nom "AGONOT" et je voudrais que ça m'affiche quelques colonnes de la ligne correspondant à ce nom
    ( pas grave si il y'a plusieurs occurrences )

    Bien sur ça serait simple avec mysql, une base de donnée etc. Mais là je n'ai pas de base de donnée je dois utiliser les csv.

    merci pour votre aide

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    Il faut que tu vérifies à chaque ligne ($data) si la ligne contient une colonne ($data[1]) avec le nom recherché. Si c'est le cas, tu affiches la colonne, sinon tu passes au suivant.

    Prends garde, si tu as affaire à des gros fichiers ça va consommer beaucoup de ressources puisqu'à la différence d'une base de données, tu ne peux pas utiliser un index.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci,
    je vais explorez cette piste..
    les csv ne sont pas très lourds.

    j'ai essayé avec un if(in_array) sur le tableau $data...
    par exemple je reçois une variable comme ceci (valeur "DURAND" )
    $search = $_POST['prenom'];

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (in_array($search, $data)) {
                $key = array_search($search, $data);
                echo $data[$key];
            }
    il m'affiche la valeur que je cherche dans le csv mais pas la ligne entière
    et je souhaite affichez quelques colonnes de la ligne concernée. pas eulement "DURAND" mais par exemple

    NOM | TELEPHONE
    DURAND | 0102030405

    encore merci pour votre aide

  4. #4
    Invité
    Invité(e)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci jreaux

    j'avais fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (in_array($search, $data)) {
                $key = array_search($search, $data);
                echo $data[0]." | ".$data[1]." | ".$data[2];
            }
    ce qui m'affiche les colonnes souhaitées, mais oblige à respecter strictement la façon dont
    chaque csv est construit et donc de faire des scripts différents pour chaque csv.
    de plus dans ce que j'ai fait je n'ai ps la première ligne du csv avec les titres de rubrique.
    var-dump affiche bien les autres colonnes mais toutes les colonnes et en plus je doit mettre un peu en forme l'affichage (css)

    encore merci

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    voila le code maintenant.

    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
    <?php
    $search = "DURAND"; // variable à matcher
    if (($handle = fopen("toto.csv", "r")) !== FALSE) { // fichier csv
        echo "<table class=\"TFtableCol\" >";
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)   {        
            $num = count($data);
            echo "<tr>";
     
            if (in_array($search, $data)) { 
                $key = array_search($search, $data); 
                echo $data[0]." | ".$data[1]." | ".$data[2];
               // var_dump($data);
            }
     
            echo '</tr>';
        }
        fclose($handle);
        echo '</table>';
    }
    ?>
    ça m'affiche la ligne de la valeur recherché avec les colonnes souhaités
    mais j'aimerais afficher en plus, au dessus juste, la première ligne ( les titres des rubriques du csv )

    encore merci pour votre aide

  7. #7
    Invité
    Invité(e)
    Par défaut
    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
    <?php
    $search = "DURAND"; // variable à matcher
    if (($handle = fopen("./toto.csv", "r")) !== FALSE) { // fichier csv
        echo '<table class="TFtableCol" >';
    	// entete
    			$entete = fgetcsv($handle, 1000, ",");
    			$entete = explode(' | ',$entete[0]);
                echo '<tr><th>'.$entete[0].'</th><th>'.$entete[1].'</th><th>'.$entete[2].'</th></tr>';
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)   {        
    		$data = explode(' | ',$data[0]);
            if (in_array($search, $data)) { 
                echo '<tr><td>'.$data[0].'</td><td>'.$data[1].'</td><td>'.$data[2].'</td></tr>';
            }
        }
        fclose($handle);
        echo '</table>';
    }
    ?>

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 412
    Points : 145
    Points
    145
    Par défaut
    merci jreaux62
    ça m'a bien aidé.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 13
    Dernier message: 21/04/2011, 20h15
  2. fonction qui renvoie le type d'une variable
    Par dgwabo dans le forum C++
    Réponses: 6
    Dernier message: 31/03/2011, 16h08
  3. Réponses: 1
    Dernier message: 23/04/2007, 13h22
  4. Réponses: 8
    Dernier message: 24/10/2006, 16h50
  5. Réponses: 8
    Dernier message: 30/11/2005, 10h00

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