Création d'un flux RSS (problème d'affichage)

Nouveau WRInaute
Bonjour à tous,

Je viens vers vous car j'ai besoin d'aide après avoir bien galéré.

Je souhaite créer un flux RSS pour mon site afin de permettre aux visiteurs de pouvoir suivre les actualités qui sont mises en ligne chaque jour.
Je me suis inspiré de la méthode "Création et lecture de flux RSS 2.0 en PHP" (http://ghostdogpr.developpez.com/articles/rss/) , et je me retrouve bloqué. Etant assez novice dans tout ce qui est PHP, XML... je dois dire que je galère complet.

Quelques explications sur le fonctionnement de mon site : pour ajouter des news sur mon site, j'ai une base de données MySQL via phpMyAdmin avec un back office pour me permettre d'ajouter une actu (titre, image, contenu...) le plus simplement possible. Pour la version de PHP, il s'agit de la version 4. Et donc je souhaiterais que dès que j'ajoute une actu sur le site, cet ajout se fasse également dans le fichier XML.
Actuellement, seule les dates s'affichent dans le fichier XML. Vous pouvez le voir à cette adresse : http://www.cryptoseries.fr/rss/actus.xml.
Le problème viendrait peut-être de cette partie de code quand j'essaye d'appeler les champs de la base où seule la date est vraiment appelée ou créée.

$xml .= '<item>';
$xml .= '<title>'.$tab["titre"].'</title>';
$xml .= '<link>http://www.cryptoseries.fr/</link>';
$xml .= '<pubDate>'.$date.' GMT</pubDate>';
$xml .= '<description>'.$tab["content"].'</description>';
$xml .= '</item>';

Quand je laisse comme ça, ça donne ce qui est affiché avec seulement les dates dans le fichier xml. Dès que je change cet appel en remplaçant "titre" par "Title" et "content" par "Contenu" (qui sont pourtant les noms des champs dans ma base), il n'y a plus aucun affichage. Bizarre tout ça. Du coup je suis vraiment perdu...

J'espère que certains d'entre vous pourront m'éclairer. Je reste bien entendu à votre disposition pour en discuter, vous apporter plus d'éléments, etc. Bref n'hésitez pas et surtout merci d'avance pour vos contributions.

@+
Chewy
 
WRInaute impliqué
Hello,

Je ne sais pas si ton site est récent ou pas, si tu as bcp de contenu... Mais as-tu réfléchi à installer un CMS gratuit pour gérer ton contenu et obtenir différentes fonctionnalités clé en main. Je pense par exemple à Wordpress : gratuit et open source :)

Sinon, t'as essayé avec ça autour de tes champs textes :
<![CDATA[ ]]>

Et ta variable $date, elle sort d'où ? Pourquoi n'est-elle pas dans un tableau comme content et title ? N'aurais-tu pas fait un extract() auparavant ?
 
WRInaute discret
Il faudrait que tu nous montres la partie de ton code qui remplit $tab. Manifestement $tab est vide quand tu affectes une valeur à $xml.
 
Nouveau WRInaute
Bonjour,

Mon site a presque 4 ans et il y a pas mal de contenu. L'idée du CMS, j'y ai pensé mais j'aime l'idée de devoir tout faire à la main même si je galère pas mal :lol:

nza2k a dit:
<![CDATA[ ]]>
Je vais faire le test et je vous tiendrai au courant.

nza2k a dit:
Et ta variable $date, elle sort d'où ? Pourquoi n'est-elle pas dans un tableau comme content et title ? N'aurais-tu pas fait un extract() auparavant ?
Emorej a dit:
Il faudrait que tu nous montres la partie de ton code qui remplit $tab. Manifestement $tab est vide quand tu affectes une valeur à $xml.

Donc voici la partie de mon code avec $tab (tout ce qui concerne xml en fait) en espérant que ça pourra vous aider. Sachant que ce code est placé dans le fichier qui envoit des données (actualités) vers la BDD.

Code:
$xml = '<?xml version="1.0" encoding="iso-8859-1"?><rss version="2.0">';
		$xml .= '<channel>'; 
		$xml .= '<title>Les actualités séries de la Crypte aux séries</title>';
		$xml .= '<link>http://www.cryptoseries.fr</link>';
		$xml .= '<description>Retrouvez toutes les actualités de vos séries anciennes et récentes sur le flux de la Crypte aux séries</description>';
		
		$res=mysql_query("SELECT * FROM news ORDER BY id DESC LIMIT 10") or die("Erreur SQL : ".mysql_error());

		// extraction des informations et ajout au contenu
		while($tab=mysql_fetch_array($res)){
			$date=date("D, d M Y H:i:s", strtotime($tab["date"]));

			$xml .= '<item>';
			$xml .= '<title>'.$tab["titre"].'</title>';
			$xml .= '<link>http://www.cryptoseries.fr/</link>';
			$xml .= '<pubDate>'.$date.' GMT</pubDate>'; 
			$xml .= '<description>'.$tab["content"].'</description>';
			$xml .= '</item>';	
		}

		$xml .= '</channel>';
		$xml .= '</rss>';

		$fp = fopen("../../rss/actus.xml", 'w+');
		fputs($fp, $xml);
		fclose($fp);
		mysql_close();

Vous remerciant par avance pour votre aide.
 
WRInaute passionné
Salut,

Pour moi, soit ta requête est erroné, (ce qui m'étonnerai puisque ta variable $tab["date"] fonctionne), soit une ou des variables en sortit provoque un bug. Essaye d'appliquer un <![CDATA[*****]]> sur les titres et descriptions.
Code:
$xml .= '<title><![CDATA['.$tab["titre"].']]></title>';
$xml .= '<description><![CDATA['.$tab["content"].']]></description>';

Par ailleurs ta ligne $xml .= '<link>http://www.cryptoseries.fr/</link>'; n'est pas correcte ... elle est censé indiquer l'url des pages concernées et non l'index de ton site.
 
Nouveau WRInaute
Emorej a dit:
Et si tu ajoutes un
Code:
var_dump($tab);
juste au début de ta boucle while, qu'est ce qu'il affiche ?

Alors ça m'affiche les infos mais dans la page du code php et xml, c'est à dire la page de gestion qui envoi les données à la BDD.

tryan a dit:
Salut,

Pour moi, soit ta requête est erroné, (ce qui m'étonnerai puisque ta variable $tab["date"] fonctionne), soit une ou des variables en sortit provoque un bug. Essaye d'appliquer un <![CDATA[*****]]> sur les titres et descriptions.
Code:
$xml .= '<title><![CDATA['.$tab["titre"].']]></title>';
$xml .= '<description><![CDATA['.$tab["content"].']]></description>';

ça n'affiche rien, voici ce que ça me donne :
Code:
<description>
- <![CDATA[ 
  ]]> 
  </description>

tryan a dit:
Par ailleurs ta ligne $xml .= '<link>http://www.cryptoseries.fr/</link>'; n'est pas correcte ... elle est censé indiquer l'url des pages concernées et non l'index de ton site.
Merci pour l'info, je vais essayer d'y remédier.

C'est vraiment galère tout ça, mais merci pours vos contributions.
 
WRInaute passionné
ça donne quoi un echo $tab["titre"]; et un echo de $tab["content"]; dans ta boucle ?
Tu as quelque chose qui ressort ou c'est le vide total?
 
Nouveau WRInaute
C'est le vide total.
je l'ai inséré comme ceci :

Code:
// extraction des informations et ajout au contenu
		while($tab=mysql_fetch_array($res)){
			echo $tab["titre"];
			$date=date("D, d M Y H:i:s", strtotime($tab["date"]));

			$xml .= '<item>';
			$xml .= '<title>'.$tab["titre"].'</title>';
			$xml .= '<link>http://www.cryptoseries.fr/</link>';
			$xml .= '<pubDate>'.$date.' GMT</pubDate>'; 
			$xml .= '<description>'.$tab["content"].'</description>';
			$xml .= '</item>';	
		}
 
WRInaute discret
Les indices de $tab doivent contenir l'exact libellé des champs de ta table news : est ce que c'est bien le cas ? ($tab["nom du champ de table news"])
 
WRInaute occasionnel
A la place de
Code:
echo $tab["titre"];
Fais
Code:
print_r($tab);

Ca te permettra déjà de voir les index qui sont récupérés lors de ta requête et de vérifier que cela ne vient pas de titre ou content.
 
WRInaute occasionnel
Ben la requête semble tourner puisque le flux n'affiche que les dates, c'est pour ça que je me suis intéressé à $tab directement.
 
Nouveau WRInaute
Etant au boulot je testerai tout ça ce soir.
En tout cas, merci pour votre réactivité, ça fait plaisir car je me sentais bien seul avec ce problème que je n'arrive pas à régler depuis déjà pas mal de temps.

Je vous tiens au courant dans la soirée.
 
WRInaute passionné
silef a dit:
flux n'affiche que les dates
Ben oui, mais... on ne sait pas si c'est la bonne date et si elle varie à chaque occurence. :wink: Le traitement préalable par la fonction Date va forcément renvoyer un résultat (quel qu'il soit), d'où son affichage dans l'echo.
 
Nouveau WRInaute
Emorej a dit:
Et si tu ajoutes un
Code:
var_dump($tab);
juste au début de ta boucle while, qu'est ce qu'il affiche ?

Bonsoir à tous,

Donc j'ai réessayé la méthode d'Emorej et finalement ça fonctionne. Je n'avais pas mis correctement le nom des champs de ma base. Donc merci beaucoup pour son aide et celle de tous ceux qui ont participé.
Mes problèmes ne sont pas cependant pas totalement terminés. J'ai une question concernant toujours ce satané affichage. A présent, il n'y a pas de souci, les actualités s'affichent bien quand on s'abonne par exemple à iGoogle ou Netvivbes, par contre en marque-page dynamique ou même directement en ouvrant le fichier http://www.cryptoseries.fr/rss/actus.xml, le contenu ne s'affiche toujours pas. Pour le coup je ne comprends pas la subtilité. Auriez-vous une idée ?

Et pour ceux qui n'en n'auront pas marre de moi, je reste intéressé pour un peu d'aide pour rendre ce flux un peu plus attrayant avec affichage de l'image de l'actualité et insertion du lien de l'actualité :mrgreen:

Encore merci pour votre aide en tout cas car sans vous je ne serais pas allé bien loin.
 
WRInaute passionné
Des mauvais nom de champ ... on va le manger lui :mrgreen: !

Utilise <![CDATA[$ta_variable]]> pour tes descriptions.

Étant donné que tu affiche tes actualités, tu modifies tes liens en conséquence :
Code:
$xml .= '<link>http://www.cryptoseries.fr/Actus/page-actu.php?id='.$id.'</link>';
Il va de soit qu'il faut que tu effectues la requête pour allé chercher la variable $id.
 
WRInaute discret
Allez, va, ça nous est tous arrivé un jour... 8O Bon, peut être pas ça... :lol:

Pour afficher une image, il suffit en général qu'il y ait un <img src... dans le contenu de ta balise <description></description> pour que les lecteurs de flux l'affichent. Ce n'est pas le plus propre (il faudrait utiliser une balise <enclosure> ) mais le plus simple à mon avis.
 
Nouveau WRInaute
Salut tout le monde,

Bon je viens avec de bonnes nouvelles. Le script a l'air de fonctionner. Je dis bien "a l'air" car depuis chez moi ça fonctionne avec IE et Firefox, et au boulot ça fonctionne avec IE mais pas avec Firefox. Après ça vient peut-être du proxy... enfin je ne sais pas trop. Vous pouvez vérifier de votre côté si vous êtes tenté :mrgreen: http://www.cryptoseries.fr/rss/actus.xml

En tout cas je vous dis un grand merci à tous pour votre aide. Cela faisait quelques semaines que je galérais avec ça et vous m'ôtez une épine du pied. Il me reste à présent quelques ajouts à faire, comme l'image, le lien... vous m'avez déjà donné des pistes, donc je vais m'y pencher ce week-end et je reviens vers vous pour vous tenir au courant... car j'aurai peut-être besoin d'aide :roll:

Encore merci.
 
Discussions similaires
Haut