IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Créer mon flux rss depuis ma BDD [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 132
    Par défaut Créer mon flux rss depuis ma BDD
    Bonjour, je veux mettre en place flux rss pour mon site. Je suis confronté un problème de récupération des donnée stocké dans un tableau qui reçoit les donnés provenant de ma BDD.

    voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php //On sélectionne les données
    	$sql = $connect_db->prepare('SELECT * FROM article WHERE categArt=5 ORDER BY idart DESC LIMIT 0, 10');
    	$sql->execute();
     
    	$tb= array();
    	 while($dataArt = $sql->fetch(PDO::FETCH_OBJ)) {
     
    		$tb[$dataArt->idart][$dataArt->idart] = $dataArt->idart;
    		$tb[$dataArt->idart][$dataArt->titreart] = $dataArt->titreart;
    		$tb[$dataArt->idart][$dataArt->alias] = $dataArt->alias;
    		$tb[$dataArt->idart][$dataArt->article] = $dataArt->article;
    	 }
     
     
    	 //Début flux rss
    	 $rss ="<rss version=\"2.0\">"."\n";
    	 $rss .="<channel>"."\n";
    	 $rss .="<title>Flux d'information: Sciences et progres</title>"."\n";
    	 $rss .="<link>$url</link>"."\n";
    	 $rss .="<description>Accéder a l' actualité, aux dossiers et aux évènements de l' innovation</description>"."\n";
    	 $rss .="<managingEditor>sciencesetprogres.net</managingEditor>"."\n";
    	 $rss .="<copyright>Copyright(c) 2000-2013 sciencesetprogres.net</copyright>"."\n";
    	 $rss .="<generator>karablog.site88.net</generator>"."\n";
    	 $rss .="<language>fr</language>"."\n\n";
     
             // C'EST À CE NIVEAU QUE JE COINCE, COMMENT RÉCUPÉRER LES DONNÉES DU TABLEAU
    	 foreach($tbas $art_id => $key)	{
    		 $rss .="<item>";
    		 $rss .="<title>".xxxx."</title>"."\n\n";
    		 $rss .="<link>".$url."/"."article-".xxx."-".xxxx.".html</link>"."\n\n";
    		 $rss .="<description>".troncate(xxxxxx)."</description>"."\n\n";
    		 $rss .="</item>";
    	 }
    	$rss .="</channel>\n</rss>";
     
    		//Ouverture del page xml
    		$fp = fopen("rss.xml", 'w+'); //ouverture en écriture
    		fputs($fp, $rss);
    		fclose($fp);
     
     
    		// On envoie les headers XML / no cache
    		header('Content-type: application/xml; charset=iso-8859-1');
    		header('Expires: '.gmdate('D, d M Y H:i:s').' GMT');
    		header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    		header('Pragma: public');
     
    		echo $rss;
     
    		// Fermeture de la connexion à la base de données
    		unset($sql);
    ?>

  2. #2
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2008
    Messages : 64
    Par défaut
    Ton tableau est "foireux" : tes clés de tableau sont dynamiques, tu ne peux donc pas retrouver dans quoi ils sont stockés.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    while($dataArt = $sql->fetch(PDO::FETCH_OBJ)) {
    	$dataTmp = array(
                'id' => $dataArt->idart,
                'titre' => $dataArt->titreart,
                'alias' => $dataArt->alias,
                'article' => $dataArt->article,
            )
    	$tb[$dataArt->idart] = $dataTmp;
    }
     
    foreach($tb as $data){
        // Pour récupérer les données : $data['id'], $data['titreart'], ...
    }


    Pour plus de simplicité, tu n'as pas besoin de passer par "$tb" pour stocker tes données vu que tu ne fais aucun traitement particulier dessus avant de le mettre dans ton $rss. Tu peux donc faire :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    	//Début flux rss
    	 $rss ="<rss version=\"2.0\">"."\n";
    	 $rss .="<channel>"."\n";
    	 $rss .="<title>Flux d'information: Sciences et progres</title>"."\n";
    	 $rss .="<link>$url</link>"."\n";
    	 $rss .="<description>Accéder a l' actualité, aux dossiers et aux évènements de l' innovation</description>"."\n";
    	 $rss .="<managingEditor>sciencesetprogres.net</managingEditor>"."\n";
    	 $rss .="<copyright>Copyright(c) 2000-2013 sciencesetprogres.net</copyright>"."\n";
    	 $rss .="<generator>karablog.site88.net</generator>"."\n";
    	 $rss .="<language>fr</language>"."\n\n";
    	while($dataArt = $sql->fetch(PDO::FETCH_OBJ)) {
                     // Ici, tu accèdes à tes données via $dataArt->xxx, à toi d'adapter
    		 $rss .="<item>";
    		 $rss .="<title>".$dataArt->titre."</title>"."\n\n";
    		 $rss .="<link>".$url."/"."article-".xxx."-".xxxx.".html</link>"."\n\n";
    		 $rss .="<description>".troncate(xxxxxx)."</description>"."\n\n";
    		 $rss .="</item>";
    	 }
     
    	$rss .="</channel>\n</rss>";

  3. #3
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 132
    Par défaut
    Merci ça marche mais il y a un autre problème. Seul la première entrée est affichée (une seule ligne).

    par contre dans le code source de la page toutes lignes retournées sont la.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    //Début flux rss
    	 $rss ="<rss version=\"2.0\">"."\n";
    	 $rss .="<channel>"."\n";
    	 $rss .="<title>Flux d'information: Sciences et progres</title>"."\n";
    	 $rss .="<link>$url</link>"."\n";
    	 $rss .="<description>Accéder a l' actualité, aux dossiers et aux évènements de l' innovation</description>"."\n";
    	 $rss .="<managingEditor>sciencesetprogres.net</managingEditor>"."\n";
    	 $rss .="<copyright>Copyright(c) 2000-2013 sciencesetprogres.net</copyright>"."\n";
    	 $rss .="<generator>karablog.site88.net</generator>"."\n";
    	 $rss .="<language>fr</language>"."\n\n";
     
    	  while($dataArt = $sql->fetch(PDO::FETCH_OBJ)) {
    		 $rss .="<item>";
    		 $rss .="<title>".$dataArt->titreart."</title>"."\n\n";
    		 $rss .="<link>".$url."/sciencesetprogres/"."article-".$dataArt->idart."-".$dataArt->alias.".html</link>"."\n\n";
    		 $rss .="<description>".troncate($dataArt->article)."</description>"."\n\n";
    		 $rss .="</item>";
    	  }

  4. #4
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 132
    Par défaut
    Merci ça marche mais il y a un autre problème. Seul le titre de la première entrée s'affiche (une seule ligne).

    par contre dans le code source de la page toutes lignes retournées sont la.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    //Début flux rss
    	 $rss ="<rss version=\"2.0\">"."\n";
    	 $rss .="<channel>"."\n";
    	 $rss .="<title>Flux d'information: Sciences et progres</title>"."\n";
    	 $rss .="<link>$url</link>"."\n";
    	 $rss .="<description>Accéder a l' actualité, aux dossiers et aux évènements de l' innovation</description>"."\n";
    	 $rss .="<managingEditor>sciencesetprogres.net</managingEditor>"."\n";
    	 $rss .="<copyright>Copyright(c) 2000-2013 sciencesetprogres.net</copyright>"."\n";
    	 $rss .="<generator>karablog.site88.net</generator>"."\n";
    	 $rss .="<language>fr</language>"."\n\n";
     
    	  while($dataArt = $sql->fetch(PDO::FETCH_OBJ)) {
    		 $rss .="<item>";
    		 $rss .="<title>".$dataArt->titreart."</title>"."\n\n";
    		 $rss .="<link>".$url."/sciencesetprogres/"."article-".$dataArt->idart."-".$dataArt->alias.".html</link>"."\n\n";
    		 $rss .="<description>".troncate($dataArt->article)."</description>"."\n\n";
    ?>
    		 $rss .="</item>";
    	  }
    Code source de la page flux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <rss version="2.0">
    <channel>
    <title>Flux d'information: Sciences et progres</title>
    <link>http://127.0.0.1</link>
    <description>Accéder a l' actualité, aux dossiers et aux évènements de l' innovation</description>
    <managingEditor>sciencesetprogres.net</managingEditor>
    <copyright>Copyright(c) 2000-2013 sciencesetprogres.net</copyright>
    <generator>karablog.site88.net</generator>
    <language>fr</language>
     
    <item><title>5ème édition du salon des TIC</title>
     
    <link>http://127.0.0.1/sciencesetprogres/article-31-edition-du-salon-des-tic.html</link>
     
    <description><p><span style="color:rgb(0, 0, 0); font-family:arial,helvetica,sans; font-size:11px">But I must explain to you how all this mistaken idea of...</description>
     
    </item><item><title>Conférence du professeur Saliou Touré à la salle Léon Emanuel de l'Université FHB de Cocody</title>
     
    <link>http://127.0.0.1/sciencesetprogres/article-30-conference-du-professeur-saliou-toure.html</link>
     
    <description><p><span style="color:rgb(0, 0, 0); font-family:arial,helvetica,sans; font-size:11px">But I must explain to you how all this mistaken idea of...</description>
     
    </item></channel>
    </rss>

  5. #5
    Membre expérimenté Avatar de Njörd
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 190
    Par défaut
    Bonjour moudjahidine,

    Le souci ne viendrais-t-il pas du fait que tu ne différencies pas les balises de chaque entrée ?

    Essai d'ajouter l'ID de ton entrée dans ta boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $rss .="<item id="'.$dataArt->id.'">";

  6. #6
    Membre confirmé
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2006
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Webmaster
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 132
    Par défaut
    J'ai essayé ta solution mais c'est la même chose.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     while($dataArt = $sql->fetch(PDO::FETCH_OBJ)) {
    		 $rss .="<item id='".$dataArt->idart."'>";
    		 $rss .="<title>".$dataArt->titreart."</title>"."\n\n";
    		 $rss .="<link>".$url."/sciencesetprogres/"."article-".$dataArt->idart."-".$dataArt->alias.".html</link>"."\n\n";
    		 $rss .="<description>".troncate($dataArt->article)."</description>"."\n\n";
    		 $rss .="</item>";
    	  }
    L'erreur :

    This page contains the following errors:

    error on line 15 at column 101: Opening and ending tag mismatch: span line 0 and description
    Below is a rendering of the page up to the first error.

    Flux d'information: Sciences et progres http://127.0.0.1 Accéder a l' actualité, aux dossiers et aux évènements de l' innovation sciencesetprogres.net Copyright(c) 2000-2013 sciencesetprogres.net karablog.site88.net fr 5ème édition du salon des TIC http://127.0.0.1/sciencesetprogres/a...n-des-tic.html

  7. #7
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Dans cette ligne, tu as une balise <p> ouverte et non fermée :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <description><p><span style="color:rgb(0, 0, 0); font-family:arial,helvetica,sans; font-size:11px">But I must explain to you how all this mistaken idea of...</description>
    Cela vient sans doute du fait que tu tronques le contenu de la balise <description>.
    Il faudrait p'tet appliquer un strip_tags sur le résultat de la fonction tronque.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer un flux RSS
    Par okoweb dans le forum Langage
    Réponses: 16
    Dernier message: 26/10/2011, 12h55
  2. [PHP 5.3] Je dois raffraichir manuellement mon flux RSS
    Par beegees dans le forum Langage
    Réponses: 0
    Dernier message: 10/02/2010, 16h46
  3. Problème avec la création de mon flux RSS
    Par Ashraam dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 03/11/2007, 14h03
  4. [ThunderBird] Refuse de lire les flux RSS depuis 3jours
    Par Swoög dans le forum Thunderbird
    Réponses: 4
    Dernier message: 27/06/2006, 21h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo