scorpion11_22 Posté 31 Juillet 2008 Posté 31 Juillet 2008 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 XMLfunction 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 baseinclude('includes/bdd.php');$res=mysql_query("SELECT * FROM news ORDER BY date DESC LIMIT, 5");// extraction des informations et ajout au contenuwhile($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
Kioob Posté 31 Juillet 2008 Posté 31 Juillet 2008 (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é 31 Juillet 2008 par Kioob
scorpion11_22 Posté 31 Juillet 2008 Auteur Posté 31 Juillet 2008 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
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant