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

Bibliothèques et frameworks PHP Discussion :

[SimpleXML] Construire une liste de villes


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Points : 21
    Points
    21
    Par défaut [SimpleXML] Construire une liste de villes
    Bonsoir @ touteszéatous,

    Je suis en train de m'essayer à la lecture de fichier XML en PHP ...

    L'idée est de construire une liste d"roulante en fonction de la sélection utilisateur :
    - soit il n'a rien choisi => $_POST['id_region'] est vide,
    - soit il a choisi une région => $_POST['id_region'] contient la valeur de la région,
    - soit il a choisi un département => $_POST['id_depart'] contient la valeur du département, $_POST['id_region'] est forcément renseigné.

    Je me suis essayé à plusieurs syntaxes, mais la seule qui fonctionne est dans le cas où rien n'est sélectionné...

    Voici à quoi peut ressembler mon fichier XML

    Code XML : 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
    <MAIN>
        <REGION id="22" nom="Provence Alpes Cte d'azur" nb_lots="2554">
            <DEPARTEMENT id="13" nom="Bouches du Rhne" nb_lots="1311">
                <VILLE cp="13100" nom="Aix en provence" nb_lots="200" />
                <VILLE cp="13210" nom="St remy de provence" nb_lots="72" />
                <VILLE cp="13015" nom="Marseille" nb_lots="623" />
            </DEPARTEMENT>
            <DEPARTEMENT id="84" nom="Vaucluse" nb_lots="72">
                <VILLE cp="84130" nom="Le pontet (avignon)" nb_lots="72" />
            </DEPARTEMENT>
        </REGION>
        <REGION id="21" nom="Poitou Charentes" nb_lots="252">
            <DEPARTEMENT id="17" nom="Charente Maritime" nb_lots="192">
                <VILLE cp="17220" nom="St rogatien (la rochelle)" nb_lots="29" />
                <VILLE cp="17000" nom="La rochelle" nb_lots="82" />
                <VILLE cp="17390" nom="La tremblade" nb_lots="2" />
                <VILLE cp="17300" nom="Rochefort" nb_lots="15" />
            </DEPARTEMENT>
            <DEPARTEMENT id="86" nom="Vienne" nb_lots="60">
                <VILLE cp="86000" nom="Poitiers" nb_lots="60" />
            </DEPARTEMENT>
        </REGION>
    </MAIN>


    Voici mon code :
    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
     
    <select name="cp" size="1" id="cp" >
    <option value="-1" selected="selected">&nbsp;</option>
    <?php
    $xml = simplexml_load_file('media/liste.xml');
    $recup = $xml->xpath('/MAIN/REGION/DEPARTEMENT/VILLE') ;
    if ( $_POST['id_region'] == "")  {
        $ville = array();
        foreach ($recup as $list_ville) {
            $cp = "'".$list_ville['cp']."'" ;
            $ville["'".$list_ville['cp']."'"] = $list_ville['nom'];
        }
        asort($ville);
        foreach ($ville as $cp => $nom) {
            echo '<option value='.$cp.'>'.$nom.'</option>';
        }
     
    } else {
        if ($_POST['id_depart'] == "") {
            foreach ($xml->REGION as $region) {
                if ($region->id == $_POST['id_region']) {
                    foreach ($recup as $list_ville) {
                        echo '<option value="'.$list_ville['cp'].'">'.$list_ville['nom'].'</option>';
                    }
                }
            }
        } else {
            $dep = $_POST['id_depart'];
            $recup = $xml->xpath('/MAIN/REGION/DEPARTEMENT[contains(id,$dep)]/VILLE') ;
            $ville = array();
            foreach ($recup as $list_ville) { //echo '<option value="'.$list_ville['cp'].'">'.$list_ville['nom'].'</option>';
                $cp = "'".$list_ville['cp']."'" ;
                $ville["'".$list_ville['cp']."'"] = $list_ville['nom'];
            }
            asort($ville);
            foreach ($ville as $cp => $nom) {
                echo '<option value='.$cp.'>'.$nom.'</option>';
            }
        }
    }
    ?>
    </select>
    Le problème c'est que seul la 1re condition fonctionne ... En fait dès que je veut faire la liste des villes à l'intérieur d'un nœud, ça ne fonctionne pas. Je crois que le problème vient du fait que je ne sait pas accéder directement à un nœud tel que la région ou le département en lui passant un paramètre...

    J'ai aussi essayé des choses dans ce genre '/REGION/DEPARTEMENT/@id' pour pointer l'attribut 'id' de département...

    J'ai cherché sur le web, mais la plupart des exemples concerne les flux RSS donc des XML qui ont des balises ouvrantes et des balises fermantes et apparemment la syntaxe pour accéder aux info n'est pas la même...

    Quelqu'un aurait-il svp une idée de comment je pourrais faire ?

    Excellente soirée @ touteszéatous et à bientôt !

  2. #2
    Membre à l'essai
    Inscrit en
    Avril 2007
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Points : 21
    Points
    21
    Par défaut
    ça y est, j'ai trouvé la bonne syntaxe :

    $region= $_POST['id_region'];
    $depart = $_POST['id_depart'];
    $recup = $xml->xpath("/MAIN/REGION[@id='$region']/DEPARTEMENT[@id='$depart']/VILLE") ;

    Voili voilu, j'espère que ça aidera quelqu'un !

    Excellente soirée @ touteszéatous et à bientôt !

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

Discussions similaires

  1. Réponses: 10
    Dernier message: 10/05/2010, 21h59
  2. [MySQL] Construire une liste avec les résultat d'une requête
    Par Requiem11 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/04/2009, 23h18
  3. Réponses: 2
    Dernier message: 04/01/2008, 09h24
  4. Construire une liste de sélection avec 2 tables
    Par domdas dans le forum Requêtes
    Réponses: 1
    Dernier message: 11/08/2006, 14h15
  5. [serieux]où trouver une liste de ville?
    Par bourvil dans le forum Autres Logiciels
    Réponses: 10
    Dernier message: 30/05/2006, 12h15

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