PHP/DOM problême simple et rapide

Max -  
djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis débutant en php !!
J'ai un souci avec ma boucle qui m'affiche plein de choses bizarres.
Je récupère 2 information de mon fichier xml : d'une part les "enclosure" d'autre part la valeur ('url') de l'élément "link" . Là ou le bas blesse est que j'essaye de créer une série d'images (enclosure) cliquables ( grace à notre valeur url) Je pense avoir réussi à ressortir les deux et à les afficher indépendement. Maintenant lorsque j'essayes de faire une boucle avec mes images et de les rendre à la fois cliquable au moyen de mes url ca foire superbement! Le problême est dans cette double boucle foreach mais je n'arrive pas à voir où.

Merci pour votre aide !!!

Voici la source XML
<item>
        <title>Hello</title>
        <description>Bellohelloetc</description>
        <link>http://www.mouette.com/reproductionmouette</link>
        <enclosure url="http://www.mouette.com/blablabla.jpg" length="21380" type="image/jpeg"></enclosure>
</item>



Voici la source php :
  $dom = new DomDocument;
  $dom->load("all.xml");
  $listeliens = $dom->getElementsByTagName('enclosure');
  $listepages = $dom->getElementsByTagName('link');
   
  foreach($listeliens as $liens)
    {
	
    	if ($liens->hasAttribute("url"))
		{
		
		$lienimg = $liens->getAttribute("url");
		
		
			foreach($listepages as $pages)
			
			{
		
				if($pages->nodeValue)
				
				{

				$lienpage = $pages->nodeValue;
				echo "<a href=\"$lienpage\"><img src=\"$lienimg\"></a>";

				}
			}
		}  
	
    echo "<br />";
  }
A voir également:

11 réponses

djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   95
 
echo '<a href="'.$lienpage.'"><img src="'.$lienimg.'"></a>';

Ca marches là ?
0
Max
 
C'est la même chose. Le problême se situe vraiment dans la boucle...
En gros il m'affiche 8 fois la même image avant de passer à l'image suivante qu'il m'affiche 8 fois et les 8x
correspondent à chaque lien. Donc il y a autant de "première image" qu'il y a de liens (url)
0
djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   95
 
En mode "debug" ca dit quoi ?

  $dom = new DomDocument;
  $dom->load("all.xml");
  $listeliens = $dom->getElementsByTagName('enclosure');
  $listepages = $dom->getElementsByTagName('link');
   
  foreach($listeliens as $liens)
    {
	
    	if ($liens->hasAttribute("url"))
		{
		
		$lienimg = $liens->getAttribute("url");
		
		
			foreach($listepages as $pages)
			
			{
			echo '<br/>$listepages as $pages : ok';
				if($pages->nodeValue)
				
				{

				$lienpage = $pages->nodeValue;
				echo "<a href=\"$lienpage\"><img src=\"$lienimg\"></a>";
				echo '<br/>$pages->nodeValue : ok';

				}
			}
		}  
	echo '<br/>$listeliens as $liens : ok';
    echo "<br />";
  }
0
Max
 
Aucun problême là dessus. C'est dans ma logique que ca coince.
Ce que je veux faire dire à mon document ici c'est bêtement : Pour chaque image que tu trouveras, affiche les et utilise le lien correspondent dans le même item.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Max
 
en tout cas...
$listepages as $pages : ok
$pages->nodeValue : ok
$listepages as $pages : ok
0
djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   95
 
Un exemple du code html généré en sortie ? Ou une page web à visiter pour constater et essayer de mieux comprendre ?
0
Max
 
Voici ici à quoi ressemble le résultat. Donc plusieurs fois la même image qui utilise le lien suivant à chaque fois
Même chose pour la deuxième image qui se répète et ainsi de suite.

http://www.madebyrose.com/x1.jpg</code>
                
                
0
djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   95
 
Désolé, pas facile de t'aider en n'ayant pas tous les élements en mains, mais je comprends mieux ce qu'il se passe maintenant.

En supprimant cette boucle "foreach($listepages as $pages)" , ca donne ca :

  $dom = new DomDocument;
  $dom->load("all.xml");
  $listeliens = $dom->getElementsByTagName('enclosure');
  $listepages = $dom->getElementsByTagName('link');
   
  foreach($listeliens as $liens)
    {
	
    	if ($liens->hasAttribute("url"))
		{
		
		$lienimg = $liens->getAttribute("url");
		
				if($pages->nodeValue)
				
				{

				$lienpage = $pages->nodeValue;
				echo "<a href=\"$lienpage\"><img src=\"$lienimg\"></a>";

				}
		}  
	
    echo "<br />";
  }


Ca dit quoi ?
0
Max
 
Ca donne:

Notice: Undefined variable: pages in D:\wamp\www\hub\Untitled-1.php on line 23

Notice: Trying to get property of non-object in D:\wamp\www\hub\Untitled-1.php on line 23

Ligne 23 correspondant à : if($pages->nodeValue)
0
djflexlive Messages postés 557 Date d'inscription   Statut Membre Dernière intervention   95
 
$listeliens = $dom->getElementsByTagName('enclosure');
$listepages = $dom->getElementsByTagName('link');

Ca te parse le xml et ca le stocke dans un array ? Comment c'est structuré la dedans ?

Ce que je comprends, c'est que tu as deux boucles mais qui vont pas chercher les infos les unes par rapport aux autres.

Dans foreach($listeliens as $liens) il y'a tous les liens de stockés et foreach($listepages as $pages) contient toutes les images ?

Donc dans ce cas là, tu répètes 8x ta boucle car il trouve 8 url et il affiche 8x les images car 8 images parsées dans ton .xml ...

Donc peut etre qu'il faut voir ce qui est donné dans $listeliens et $listepages

print_r($listeliens);
print_r($listepages;
0