Rechercher : dans
Par :

PHP/DOM problême simple et rapide

Dernière réponse le 19 fév 2009 à 14:48:08 Max, le 19 fév 2009 à 13:17:29 
 Signaler ce message aux modérateurs

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 />";
  }
Configuration: Windows Vista
Internet Explorer 7.0

Meilleures réponses pour « PHP/DOM problême simple et rapide » dans :
Introduction à PHP Voir Qu'est-ce que PHP? PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (un script écrit en Javascript ou une applet Java s'exécute sur votre ordinateur...). La...
Comment faire un clip vidéo VoirIntroduction Voici un tutoriel pour vous permettre de simplement, rapidement et facilement, créer votre propre clip vidéo. Ce tutoriel est volontairement simplifié pour vous permettre d'aborder le montage vidéo/audio. Avec de la...
Installation rapide de LAMP (Apache+MySql+php) sous Linux VoirLAMP = Linux+Apache+MySql+Php. C'est le serveur web par excellence. L'ensemble est facile à installer. Installation rapide sudo aptitude install apache2 php5 mysql-server php5-mysql libapache2-mod-php5 Le mot de passe administrateur mySQL...
Vérifier le format d'une date en PHP VoirIl existe plusieurs méthodes pour verifier le format d'une date en PHP, vous pouvez par exemple découper la chaîne puis tester les valeurs de chaque élément. Plus simplement nous utiliserons les expressions régulières. Pour valider une date au...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
PHP - Récupération de données VoirPHP rend très simple la récupération de données envoyées par l'intermédiaire de formulaires HTML. Création d'un formulaire Grâce à la balise FORM du langage HTML, il est très simple de créer des formulaires comprenant : des champs de saisie des...
PHP - Les fichiers VoirLa gestion des fichiers avec PHP Avec PHP, la création ou la lecture de fichiers est, une fois de plus, assez simple. Il existe une multitude de fonctions dédiées à l'utilisation des fichiers. La communication entre le script PHP et le fichier...

1

djflexlive, le 19 fév 2009 à 13:30:52

Echo '<a href="'.$lienpage.'"><img src="'.$lienimg.'"></a>';

Ca marches là ?

Répondre à djflexlive

2

Max, le 19 fév 2009 à 13:50:02

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)

Répondre à Max

3

djflexlive, le 19 fév 2009 à 13:59:25

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 />";
  }

Répondre à djflexlive

4

Max, le 19 fév 2009 à 14:03:10

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.

Répondre à Max

5

Max, le 19 fév 2009 à 14:07:19

En tout cas...
$listepages as $pages : ok
$pages->nodeValue : ok
$listepages as $pages : ok

Répondre à Max

6

djflexlive, le 19 fév 2009 à 14:07:20

Un exemple du code html généré en sortie ? Ou une page web à visiter pour constater et essayer de mieux comprendre ?

Répondre à djflexlive

7

Max, le 19 fév 2009 à 14:18:04

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>

Répondre à Max

8

Max, le 19 fév 2009 à 14:18:39
Répondre à Max

9

djflexlive, le 19 fév 2009 à 14:26:41

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 ?

Répondre à djflexlive

10

Max, le 19 fév 2009 à 14:34:17

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)

Répondre à Max

11

 djflexlive, le 19 fév 2009 à 14:48:08

$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;

Répondre à djflexlive