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 :

Analyse de code HTML d'une liste déroulante [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut Analyse de code HTML d'une liste déroulante
    Bonjour,

    J'ai le code html d'un select comme ici par exemple :

    <option value="23">mon texte 1</option>
    <option value="34">mon texte2</option>

    etc...

    avec php je souhaiterai récupérer les valeurs de chaque ligne.
    J'ai créé le code pour récupérer une ligne comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
      $value = eregi("value=\"([0-9]+)\"",$_POST['select'],$regs1);
      $txt=eregi(">(.*)<",$_POST['select'],$regs2);
     
      $value=str_replace("value=\"","",$regs1[0]);
      $value=str_replace("\"","",$value);
     
      echo "value : ".$value."<br />\n";
     
      $txt=str_replace("<","",$regs2[0]);
      $txt=str_replace(">","",$txt);
      echo "txt : ".$txt."<br />\n";
    Ce code fonctionne pour une seule ligne (<option value="23">texte</option>)

    Mais je souhaiterai les valeurs ligne par ligne en faisant une boucle

    Merci de votre aide

  2. #2
    mon_nom_est_personne
    Invité(e)
    Par défaut
    deja c'est mal barrer car tes lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
      $value = eregi("value=\"([0-9]+)\"",$_POST['select'],$regs1);
      $txt=eregi(">(.*)<",$_POST['select'],$regs2);
    ca veu dire que tu travaille avec la valeur selectionner et mist dans la variable $_POST['select']. donc forcement qu'une valeur et donc qu'une ligne et comme dans ce cas la tu n'as que ce qui est contenue dans la valuer je dirait meme que ton regex est pas bonne. apres si tu parse le html il y a plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $result = array();
    preg_match_all('\<option value=\"(?:<valeur>\[0-9]+)\"\>(?:<texte>.*)\<\/option\>',file_get_contents('fichier.html'),$result);
    $resultLen = count($result);
    for($i=0;$i <$resultLen; $i++)
    {
        print $result['text'][$i]." vaut ".$result['valeur'][$i];
    }
    si la reponse est pas clair c'est parce que la question l'etait pas

  3. #3
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Salut,

    Le même code, testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    $myString = '<option value="23">mon texte 1</option>
    <option value="34">mon texte2</option>';
     
    $myPattern = '#<option value="(?<valeur>[0-9]+)">(?<texte>.+?)\</option\>#';
     
    preg_match_all($myPattern, $myString, $allMatches);
     
    for($i=0; $i<count($allMatches[0]); $i++)
    {
        printf( "<p>%s vaut %s</p>", $allMatches['texte'][$i], $allMatches['valeur'][$i]);
    }

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut
    Merci beaucoup le code marche parfaitement pour l'exemple que j'avais donné

    Maintenant, si je veux prendre en compte qu'il puisse y avoir des attributs dans la balise option (possible mais pas sur)

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option class="text" value="1" selected>mon texte</option>
    Ici je rajoute donc l'élément class="text" avant et "selected" après le value
    Il y aura donc peut être des données supplémentaire dans la balise option mais pas forcément

    En mettant ça comme pattern

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $myPattern = '#<option (?<txt1>.+?) value="(?<valeur>[0-9]+)" (?<txt2>.+?)>(?<texte>.+?)\</option\>#';
    ça fonctionnement uniquement si les autres données sont dans la balise option, comment les mettre au conditionnel ?

    en fait que ça fonctionne pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="1">mon texte</option>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="1" selected>mon texte</option>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option class="text" value="1">mon texte</option>
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <option class="text" value="1" selected>mon texte</option>
    merci

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut
    J'ai fini par trouver voici le code de mon pattern :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $myPattern = '#<option(?<txt1>.*?)value="(?<valeur>[0-9]+)"(?<txt2>.*?)>(?<texte>.+?)\</option\>#';
    Merci de votre aide

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut
    Bonjour,

    Le problème avait été résolu et je vous en remercie.

    Plutôt que d'ouvrir un nouveau topic, je préfère réutiliser celui ci car ma question s'en rapproche beaucoup.

    Je souhaiterai désormais pourvoir extraire les informations contenu dans la liste mais cette fois à l'intérieur d'une page ou je ne connais que le nom du select

    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
    16
    17
    $myString = '<html>
    <head>
    <title>Titre de ma page</title>
    </head>
    <body>
    Text 1 :
    <select name="liste1">
      <option value="0">non</option>
      <option value="1">oui</option>
    </select><br />
     
    text 2 :
    <select name="liste2">
       <option value="23" label="toto">mon texte 1</option>
       <option value="34">mon texte2</option>
    </select>
    Fin de ma page html';
    En fait après avoir récupérer le code html d'une page, je souhaiterai récupérer de la même façon les valeurs de la liste "liste2" par exemple

    merci de votre aide

  7. #7
    Membre expérimenté Avatar de John Blobsmith
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 198
    Par défaut
    Hello,
    ca doit ressembler à ca :
    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
     
    $myString = '<html>
    <head>
    <title>Titre de ma page</title>
    </head>
    <body>
    Text 1 :
    <select name="liste1">
      <option value="0">non</option>
      <option value="1">oui</option>
    </select><br />
     
    text 2 :
    <select name="liste2">
       <option value="23" label="toto">mon texte 1</option>
       <option value="34">mon texte2</option>
    </select>
    Fin de ma page html';
     
    $listName = 'liste2';
    $arrTmp = explode('name="'.$listName.'"',$myString);
    if($arrTmp[1])
      $arrTmp = explode('</select>',$arrTmp[1]);
    $myString = $arrTmp[0];
    $myPattern = '#<option(?<txt1>.*?)value="(?<valeur>[0-9]+)"(?<txt2>.*?)>(?<texte>.+?)\</option\>#is';
    preg_match_all($myPattern, $myString, $allMatches);

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 27
    Par défaut
    Super

    ça fonctionne parfaitement merci

    sigmoun

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

Discussions similaires

  1. [WD-2010] Conversion d'une liste déroulante en provenance d'un code HTML
    Par Djeule dans le forum Word
    Réponses: 0
    Dernier message: 17/09/2014, 11h10
  2. code pour rafraichir une liste déroulante
    Par morgane32 dans le forum VBA Access
    Réponses: 5
    Dernier message: 02/09/2008, 17h06
  3. [HTML/Javascript] Une Liste déroulante
    Par maxlegrand dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/12/2007, 22h48
  4. lier une liste déroulante et un simple texte HTML
    Par gregolak dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/07/2006, 15h42
  5. Analyse de code HTML en réponse a une requête post.
    Par ghost942 dans le forum Composants VCL
    Réponses: 2
    Dernier message: 04/06/2005, 21h40

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