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 :

[DOM] Navigation avec nextSibling


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Par défaut [DOM] Navigation avec nextSibling
    Bonjour à tous !

    J'ai un problème pour naviguer dans mon arbre XML, je pense que je ne dois pas bien comprendre l'architecture du XML, je creuse le sujet depuis un moment.

    J'ai un fichier XML qui contient une liste d'utilisateur autorisé pour mon site. L'objectif est d'aller parser ce fichier pour vérifier que les logins et mot de passe sont bon.

    Voici un extrait du fichier XML :
    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
     
    <users>
      <user>
        <nom>DUPONT1</nom>
        <prenom>Alfred</prenom>
        <login>adupont1</login>
        <mot_de_passe>toto</mot_de_passe>
        <profil>1</profil>
      </user>
      <user>
        <nom>DUPONT2</nom>
        <prenom>Vincent</prenom>
        <login>vdupont2</login>
        <mot_de_passe>titi</mot_de_passe>
        <profil>5</profil>
      </user>
        <user>
        <nom>DUPONT3</nom>
        <prenom>Stephane</prenom>
        <login>sdupont3</login>
        <mot_de_passe>tata</mot_de_passe>
        <profil>4</profil>
      </user>
    </users>
    Et 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
     
    // Recuperation des informations de connexions
    $login = $_POST['inp_login'];
    $mot_de_passe = $_POST['inp_password'];
     
    // Recuperation du tableau d'acces (utilisateurs.xml)
    $fichierxml = new DOMDocument();
    $fichierxml->load("config/utilisateurs.xml");
     
    //Parsing du fichier xml
    $utilisateurs = $fichierxml->getElementsByTagName("user");
    foreach($utilisateurs as $utilisateur) {
      $login_lu = '';
      $mot_de_passe_lu = '';
      foreach($utilisateur->childNodes as $child) {
        if($child->nodeType != XML_ELEMENT_NODE) continue;
        echo utf8_decode($child->firstChild->nodeValue)."<br>";
        if($child->tagName == 'login') {
          $login_lu = utf8_decode($child->firstChild->nodeValue);
          if($login_lu == $login) {
            echo "Login trouvee ! <br>";
            echo "Examen du mot de passe <br>";
            $mot_de_passe_lu = utf8_decode($child->nextSibling->nodeValue);
            echo "Mot de passe lu = ".$mot_de_passe_lu."<br>";
            if($mot_de_passe_lu == $mot_de_passe) {
              echo "Acces autorisee";
              break;
            }
            else {
              echo "Acces refusee <br>";
              break;
            }
          }
        }
        echo "Parcours de l'arbre<br>";
      }
    }
    Lorsque je parcours mon arbre, je passe bien l'identification du login, par contre, lorsque je veux récupérer le noeud frère, donc le mot de passe, je n'obtiens rien, la variable est vide.

    J'ai également essayé de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
            $child->nextSibling;
            $mot_de_passe_lu = utf8_decode($child->firstChild->nodeValue);
    Mais sans succès également. Je ne comprends pas vraiment ou est l'erreur, a moins que je n'ai pas compris la notion de nœud frères. Quelqu'un pourrait il m'éclairer ?

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Vu la mise en forme du fichier XML, nextSibling et autres, doivent correspondre à des noeuds textuels d'indentation. Il faudrait ignorer (à moins de les gérer) ceux-ci en positionnant la propriété preserveWhiteSpace de l'objet DomDocument à FALSE avant de charger le document (à moins de les gérer).

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Par défaut
    D'après la doc PHP, cette propriété est déjà à TRUE par défaut.
    Je l'ai quand même refixé via la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $fichierxml = new DOMDocument();
    $fichierxml->preserveWhiteSpace=TRUE;
    $fichierxml->load("config/utilisateurs.xml");
    Cela donne toujours le même résultat, ça passe pas.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    En effet, je me suis planté, c'est à FALSE qu'il faudrait mettre cette propriété

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Par défaut
    Yeeeess !

    Ça fonctionne, merci beaucoup !
    Pour l'historique, il suffisait donc de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $fichierxml = new DOMDocument();
    $fichierxml->preserveWhiteSpace=TRUE;
    $fichierxml->load("config/utilisateurs.xml");

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

Discussions similaires

  1. Peoblème de navigation avec un TWebBrowser
    Par LeBigornot dans le forum Composants VCL
    Réponses: 9
    Dernier message: 18/09/2005, 23h04
  2. Limite du WebBrowser.Navigate avec un About:
    Par Bill14 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 30/03/2005, 12h41
  3. [vbscript][DOM]pb avec getElementsByTagName...
    Par toyyo dans le forum APIs
    Réponses: 2
    Dernier message: 16/02/2005, 16h56
  4. [W3C] CCS tabs, la navigation avec onglet.
    Par m@thieu dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 29/01/2005, 17h39
  5. Navigation avec la touche TAB
    Par wishnight dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 27/10/2004, 10h02

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