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] Warning avec foreach


Sujet :

Bibliothèques et frameworks PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut [DOM] Warning avec foreach
    Bonjour a tous je travaille actuellement sur un site en php5 DOM et xml et j'ai le prob suivant :

    Warning: Invalid argument supplied for foreach() in /home.3/www/droite.php5 on line 164
    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
    $dom = new DomDocument();
    $xml="messages.xml";
    $dom->load($xml);
    $dom->validateOnParse = true;
     
    $id = 10;
    $id2= $id-4;
    for($id ; $id > $id2 ; $id-- )
    {
     	# Recherche du noeud message par idMax
      	$message = $dom->getElementById($id);
      	# Parcours de la liste enfants
      	$textes = $message->childNodes;
     
    	foreach ( $textes as $texte) // Ligne 164 !!!
    	{ 
    		if( $texte->nodeName=="texte"){
    		$max=50;
    		$chaine=$texte->nodeValue;
    		if(strlen($chaine)>=$max){$chaine=substr($chaine,0,$max);
    		$espace=strrpos($chaine," ");
    		$chaine=substr($chaine,0,$espace)."..."; }
    		?>
    		  <li> 
    		  <a href="message.php5?id=<?php echo $id?>">
    		  <font style="color:white;font-weight:normal">
    		  <?php echo utf8_decode($chaine);?>
    		  </font></a>
    		  </li>
    		<?php
    		}
        }
    }
    Je n'arrive pas à l'enlever je ne vois pas ou le foreach pose probleme, pouvez vous m'eclairer svp ?

    J'attend vos reponse avec impatience merci.

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Bonjour

    childNodes() renvoie un objet DomNodeList.
    Comme indiqué ici, cet objet n'est pas un tableau et ne peut donc être parcouru avec foreach.

    Par contre, cet objet implémente l'interface Iterator, tu peux donc utiliser les méthodes current, next, key, valid et rewind.

    Le tuto PHP5 DOM : http://eusebius.developpez.com/php5dom/

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut
    ok donc je dois utiliser l'interface Iterator mais je ne sais comment fonctionne une interface.

    Pouvez me guider dans mon cas svp.

  4. #4
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par nico9135
    ok donc je dois utiliser l'interface Iterator mais je ne sais comment fonctionne une interface.

    Pouvez me guider dans mon cas svp.
    Désolé, j'avais donné un mauvais lien.
    La description de l'interface Iterator est ici : http://www.php.net/~helly/php/ext/sp...eIterator.html

    Le fait que DomNodeList implémente l'interface Iterator veut dire qu'un certain nombre de méthodes (fonctions membres), au fonctionnement standard, sont disponibles pour ces objets.

    Tu trouveras la description des fonctions current, next, key, valid et rewind dans la doc PHP. Ex http://fr.php.net/manual/fr/function.next.php

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 10
    Par défaut
    Voici mon le contenu de mon xml :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <messages>
     
    <message id="1" date="Mercredi 30 Aout">
    <titre>c'est l'école</titre>
    <texte>genèse</texte>
    <commentaire date="Vendredi 01 Septembre" auteur="jean" email="efef@efzef.com">ftout va bien ici c\'est la fete </commentaire>
    </message>
    </messages>

    N'y a t'il pas moyen d'utiliser le methodes item(2) pour acceder au noeud enfant <texte>

    en ecrivant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $message = $dom->getElementById('1');
    $enfants= $message->childNodes;
    $texte = $enfants->item(2);
    Sinon j'ai compris les methodes next()... mais elles s'appliquent a des tableaux et donc comme vous l'avez dit plus haut childNodes n'est pas un tableau et donc je ne peux pas ecrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $message = $dom->getElementById($id);
    $enfants= $message->childNodes;
    for(restet($enfants);end($enfants);next($enfants))
    {....}
    Et je ne vois pas comment les exploiter avec Iterator...

  6. #6
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Citation Envoyé par nico9135
    N'y a t'il pas moyen d'utiliser le methodes item()
    Si bien sûr, si tu connais l'indice de ce que tu veux récupérer, c'est le plus simple.

    Citation Envoyé par nico9135
    Sinon j'ai compris les methodes next()... mais elles s'appliquent a des tableaux et donc comme vous l'avez dit plus haut childNodes n'est pas un tableau et donc je ne peux pas ecrire :
    Ces fonctions s'appliquent à tout ce qui rentre dans la catégorie "Iterator". Les tableaux sont des "Iterator", les DomNodeList aussi. Mais les DomNodeList ne sont pas des tableaux.
    C'est pourquoi on peut utiliser next et compagnie sur les tableaux ET sur les DomNodeList, mais on ne peut pas utiliser les DomNodeList comme des tableaux.
    Les DomNodeLists ont des points communs avec les tableaux, mais n'en sont pas.

Discussions similaires

  1. probleme warning avec foreach()
    Par papouuu86 dans le forum Langage
    Réponses: 3
    Dernier message: 03/11/2009, 11h23
  2. [FTP] Warning avec ftp_get, mais pas de message d'erreur
    Par NomUtilisateurDejaPris dans le forum Langage
    Réponses: 2
    Dernier message: 22/02/2006, 18h12
  3. [DOM] DHTML avec le DOM + internet explorer 6
    Par jeromek dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 10/02/2006, 09h02
  4. [SimpleXML] XML et parcours des noeuds avec foreach
    Par kult dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/11/2005, 15h36
  5. [vbscript][DOM]pb avec getElementsByTagName...
    Par toyyo dans le forum APIs
    Réponses: 2
    Dernier message: 16/02/2005, 16h56

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