Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
866 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [resolu] simplexml - suppression d'elements - probleme avec unset?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[resolu] simplexml - suppression d'elements - probleme avec unset?

n°1614090
graphix
Posté le 22-09-2007 à 13:35:25  profilanswer
 

hello tout le monde,
 
J'ai un petit bout de code qui me résiste depuis un bout de temps je ne parviens pas a trouver la source du probleme...
 

Code :
  1. $xml=simplexml_load_file("actus.xml" );
  2. if(isset($_POST["date"])){
  3. foreach($_POST["date"] as $val){
  4. echo $val;
  5. unset($xml->date[$val]);
  6. }
  7. $xml->asXML('actus2.xml');
  8. }


 
Ce code ne fonctionne pas chez moi, pourtant, sans rien changer d'autre, si je remplace "unset($xml->date[$val]);" par "unset($xml->date[0]);" ca marche parfaitement.
J'ai donc mis echo '$val' voir si le probleme venais de la variable passée en parametre a unset mais non... le echo me sors bien une valeure 0 ou 1 ...
Pour infos $_POST["date"] contiens les données de checkboxes d'un formulaire ayant pour noms 'date[]';
 
Je me doutes que bon nombres vont m'envoyer vers dom (j'aimerais eviter mais bon...si y'as pas d'autres solutions!) mais j'aimerais tout de meme comprendre pourquoi ca marche pas dans ce cas précis :heink:  
 
Merci a ceux qui auront un peu de temps a me consacrer  :jap:


Message édité par graphix le 23-09-2007 à 17:03:59
mood
Publicité
Posté le 22-09-2007 à 13:35:25  profilanswer
 

n°1614137
sielfried
Posté le 22-09-2007 à 19:49:16  profilanswer
 

Par "ça ne marche pas" (qui ne veut en soi absolument rien dire...), je suppose que tu sous-entends que le unset ne produit aucun effet ?
 
Dis-moi ce que te sort ceci :

Code :
  1. var_dump($val);
  2. var_dump($xml->date);
  3. unset($xml->date[$val]);
  4. var_dump($xml->date);


Message édité par sielfried le 22-09-2007 à 19:49:29

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1614146
graphix
Posté le 22-09-2007 à 20:56:22  profilanswer
 

Code :
  1. var_dump($val);
  2. var_dump($xml->date);
  3. unset($xml->date[$val]);
  4. var_dump($xml->date);
  5.  
  6. // Sortie ->
  7.  
  8. string(1) "0" object(SimpleXMLElement)#7 (2) { ["@attributes"]=> array(1) { ["name"]=> string(8) "Novembre" } ["actu"]=> array(4) { [0]=> string(20) "Actualité numéro 1" [1]=> string(20) "Actualité numéro 2" [2]=> string(20) "Actualité numéro 3" [3]=> string(20) "Actualité numéro 4" } } object(SimpleXMLElement)#10 (2) { ["@attributes"]=> array(1) { ["name"]=> string(8) "Novembre" } ["actu"]=> array(4) { [0]=> string(20) "Actualité numéro 1" [1]=> string(20) "Actualité numéro 2" [2]=> string(20) "Actualité numéro 3" [3]=> string(20) "Actualité numéro 4" } }


 
Finalement je m'en suis sorti avec dom, pour la structure que j'ai dans mes xml c'est pas trop compliqué, mais si tu as une idée du problème avec le unset j'aimerais bien comprendre (j'ai passé quasi l'apres midi en conjectures diverses  :lol: )
 
Et quand je dit "ca ne marche pas" c'est pas tres explicite je te l'accordes !
En gros ca ne fait strictement rien, ni erreur de compilo ni écriture dans le fichier...
j'ai testé en local avec wamp, et en ligne sur mon serv, rien a faire.

n°1614182
sielfried
Posté le 23-09-2007 à 10:29:07  profilanswer
 

Je ne connais pas très bien simplexml, mais il semblerait qu'$xml->date soit un objet et non un tableau d'objets. (Donc le bazar utilise probablement une interface genre ArrayAccess de la SPL pour pouvoir accéder comme ça aux éléments... auquel cas unset n'est pas censé marcher a priori.)
 
De toute façon je ne crois pas que simplexml gère la suppression d'éléments, donc t'es bien mieux avec DOM pour faire des trucs de ce genre.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1614214
vanadium
N° Atomique : 23
Posté le 23-09-2007 à 12:33:14  profilanswer
 

Et si tu mettais :
 

Code :
  1. $xml=simplexml_load_file("actus.xml" );
  2. if(isset($_POST["date"])){
  3. foreach($_POST["date"] as $val){
  4. echo $val;
  5. unset($xml->date[intval($val)]);
  6. }
  7. $xml->asXML('actus2.xml');
  8. }


 
$xml->date[0] c'est différent de $xml->date['0']. Dans le premier cas c'est l'index 0 du tableau (entier), dans l'autre c'est l'index '0' (string).

n°1614222
sielfried
Posté le 23-09-2007 à 13:49:48  profilanswer
 

Normalement $array[0] et $array['0'] reviennent au même en PHP.
 

Code :
  1. $foo = array('bar');
  2. echo $foo[0], ' == ', $foo['0'];


 
affiche 'bar == bar'.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1614254
vanadium
N° Atomique : 23
Posté le 23-09-2007 à 15:49:35  profilanswer
 

Effectivement :jap:

n°1614270
graphix
Posté le 23-09-2007 à 17:05:31  profilanswer
 

merci à vous deux.
Je n'ai pas testé la solution de vanadium car j'ai completement basculé en dom, et ca marche tres bien.
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [resolu] simplexml - suppression d'elements - probleme avec unset?

 

Sujets relatifs
[RESOLU] - Probleme requete SQL - RETURN[RESOLU]Pb de compilation avec devC++
Probleme expression regulieresuppression d'objet d'un arraylist
Petit problème avec le pattern d'un preg_replace()[RESOLU] [Ajax] Pb de binding objet avec Prototype
[xhtml et CSS] Probleme de lien sur image..(truc de fou lol)[Résolu]Problème d'affichage avec certains ordinateur qui ont ie7
Plus de sujets relatifs à : [resolu] simplexml - suppression d'elements - probleme avec unset?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR