Version complète: sur le forum Webmaster Hub : xml+php+css fil rss je plante
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > XML et ses dialectes
scorpion11_22
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

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


donc j'ai chercher et j'ai rajouter


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


pour voir qu'est qui se passe et la

CITATION
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

CODE
<!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

CODE
<?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 ?

CODE
<?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
Kioob
Hello,

de quel tuto parles tu ?


CODE
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.
scorpion11_22
bon ok je crois que je comprend rien !
pas grave peut-etre aurais-tu un tutoriel bien expliquer pour que je puisse créer un flux xml par rapport a mes news ?
sinon le tuto sort du site http://ghostdogpr.developpez.com/articles/rss/
peut-etre que j'ai pas fait le bon choix !
merci de m'eguiller smartass.gif
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.