Aller au contenu

Sujets conseillés

Posté

Bonjour

je viens d'essayer le tuto pour la création d'un flux rss+php+css

en fait j'ai créé 3 fichier

1 - rss.php

2 - crea_rss.php

3 - flux.xml

le probleme c'est que lorsque je veux voir le flux il y a une erreur

Warning: Invalid argument supplied for foreach() in /xxx/xxx/www/rss.php on line 33

donc j'ai chercher et j'ai rajouter

var_dump($rss);
foreach($rss as $tab) {

pour voir qu'est qui se passe et la

NULL

Warning: Invalid argument supplied for foreach() in /xxx/xxx/www/rss.php on line 33

maintenant voiçi les codes de mes fichier avec un tres grand ? pour le fichier flux.xml ou apparament j'ai du rien comprendre

1 - rss.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>flux RSS Inform_AT_dream</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<meta name="robots" content="All"/>
<link rel="stylesheet" href="css/rss.css" type="text/css"/>
</head>
<body>
<?php
// Lecture d'un fichier XML
function lit_rss($fichier,$champs) {
// on lit le fichier
if($chaine = _AT_implode("",@file($fichier))) {
// on explode sur <item>
$tmp = preg_split("/<\/?"."item".">/",$chaine);
// pour chaque <item>
for($i=1;$i<sizeof($tmp)-1;$i+=2)
// on lit les champs demand? <champ>
foreach($champs as $champ) {
$tmp2 = preg_split("/<\/?".$champ.">/",$tmp[$i]);
// on ajoute au tableau
$tmp3[$i-1][] = @$tmp2[1];
}
// et on retourne le tableau
return $tmp3;
}
}
$rss = lit_rss("flux.xml",array("title","link","description","date",));
// et on affiche...
var_dump($rss);
foreach($rss as $tab) {
echo '<div class="news_box">
<div class="news_box_title">'.$tab[0].'</div>
<div class="news_box_date">posté le '.date("d/m/Y",strtotime($tab[3])).'</div>
'.$tab[2].' <a href="'.$tab[1].'">Lire tout l\'article</a>
</div>';
}
?>
</body>
</html>

2 - crea_rss.php

<?php
// édition du début du fichier XML
$xml = '<?xml version="1.0" encoding="iso-8859-1"?><rss version="2.0">';
$xml .= '<channel>';
$xml .= '<title>Informadream RSS</title>';
$xml .= '<link>http://www.informadream.fr/index-news.html</link>';
$xml .= '<description>Description</description>';
// connexion a la base
include('includes/bdd.php');
$res=mysql_query("SELECT * FROM news ORDER BY date DESC LIMIT, 5");
// extraction des informations et ajout au contenu
while($tab=mysql_fetch_array($res)){
$titre=$tab[titre];
//$lien=$tab[lien];
$description=$tab[news];
$date=$tab[date];
$date2=date("D, d M Y H:i:s", strtotime($date));

$xml .= '<item>';
$xml .= '<title>'.$titre.'</title>';
$xml .= '<link>'.$lien.'</link>';
$xml .= '<pubDate>'.$date2.' GMT</pubDate>';
$xml .= '<description>'.$description.'</description>';
$xml .= '</item>';
}
// édition de la fin du fichier XML
$xml .= '</channel>';
$xml .= '</rss>';
// écriture dans le fichier
$fp = fopen("flux.xml", 'w+');
fputs($fp, $xml);
fclose($fp);
_AT_mysql_close();
?>

3 - flux.xml comme dit plus haut gros ?

<?xml version="1.0" encoding="iso-8859-1" ?>
<rss version="2.0">
<channel>
<title>Titre</title>
<link>http://www.informadream.fr/index-news.html</link>
<description>Description</description>
</channel>
</rss>

au cas ou la structure de ma table news :

newsId int(11) Non auto_increment

auteur varchar(60) latin1_swedish_ci Oui NULL

date date Oui NULL

titre varchar(120) latin1_swedish_ci Oui NULL

news text latin1_swedish_ci Oui NULL

active int(11)

merci

Posté (modifié)

Hello,

de quel tuto parles tu ?

implode("",@file($fichier))

Beurk... difficile de faire pire ici : lire un fichier, le scinder ligne par ligne et tout stocker dans un tableau PHP, tout ça pour ensuite re-concaténer le tout.

file_get_contents() serait déjà beaucoup plus propre.

Sinon le débugage me semble relativement simple :

1) comme ton var_dump() l'indique, la fonction lit_rss() retourne NULL

2) la fonction lit_rss() ne fait son return que si la lecture du fichier s'est bien passée et que celui ci n'est pas vide. Mais comme tu masques les erreurs grâce à l'arobase, on ne sait même pas si la lecture s'effectue correctement. => commence par enlever ça

3) traiter un flux XML à coup de preg_split(), c'est quand même pas ce qu'on fait de plus fiable. => Utilises plutôt SimpleXML (nécessite PHP 5).

4) ton tableau $tmp3 est initialisé nul part, si bien qu'en cas de soucis avec ton traitement preg_split(), tu fais un return d'une variable non déclarée. => Initialise le.

Modifié par Kioob

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...