2016-12-05 1 views
0

Un utilisateur a la possibilité de changer son nom d'utilisateur sur la page alors qu'il est connecté. Comme il est connecté, il y a $ _SESSION ['userSession'] défini comme étant sa valeur user_id (1, 2, 3, ...).boucle à travers les éléments XML avec php, trouver match et modifier les éléments enfants innerHTML

Outre la base de données de stockage des informations utilisateur sont stockées dans un fichier XML, too.When l'utilisateur change son nom d'utilisateur, j'ai des problèmes

  • pour identifier le xmlelement correspondant (élément ' compte » qui est 'enfant user_id' contient le innerHtml == $ _SESSION [ 'userSession'])

  • et changer que XMLelements spécifiques autres Childs valeur (changer le innerHtml de

En ce moment, mon code ne fonctionne que pour le premier utilisateur, l'enfant « nom d'utilisateur » du « compte » élément qui a un autre enfant « user_id » qui est innerHtml == $ _SESSION [ « de userSession »]) qui a user_id '1' - donc je devrais faire une sorte de boucle à travers tous les éléments du compte, je suppose. Et c'est là que je me suis coincé. Mon PHP-code actuel est:

 include '../php/dbconnect.php'; 
     $DBcon->query("UPDATE tbl_users SET username = '$newuname' WHERE user_id=".$_SESSION['userSession']); 
     $DBcon->close(); 

     $xml = simplexml_load_file('../xml/accounts.xml'); 
     $account = $xml->account; 
      if($account->user_id == $_SESSION['userSession']) { 
       $account->username = $newuname; 
      } else { 
      } 
     file_put_contents('../xml/accounts.xml', $xml->asXML()); 

Le ressemble XML-fichier :

<data> 

    <account> 
     <username>KingKarl</username> 
     <user_id>1</user_id> 
     <blogname>YummyYummy</blogname> 
    </account> 

    <account> 
     <username>MacMarty</username> 
     <user_id>2</user_id> 
     <blogname>FreaksOnTour</blogname> 
    </account> 

    <account> 
     <companyname>BungeeTours</companyname> 
     <user_id>3</user_id> 
     <blogname>FreeFalling</blogname> 
    </account> 


</data> 

Quelqu'un peut-il expliquer à moi, comment je peux boucle à travers tous les éléments de compte de trouver un match et changer le html interne de l'autre enfant, s'il vous plaît?

Merci d'avance!

Répondre

0

Voici un code approprié:

$xml = simplexml_load_file('../xml/accounts.xml'); 
// iterate over each `$xml` node which is `account` 
foreach ($xml as $account) { 
    // if current account user_id is found - change value 
    if($account->user_id == $_SESSION['userSession']) { 
     $account->username = $newuname; 

     // use break so as not to check other nodes 
     break; 
    } 
    // empty `else` part is useless, omit it 
} 
file_put_contents('../xml/accounts.xml', $xml->asXML()); 
+0

merci, thats fonctionne parfaitement! – Maxischl