Ankündigung

Einklappen
Keine Ankündigung bisher.

RSS aus MySQL ausgeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • RSS aus MySQL ausgeben

    Hallo,

    Ich habe mir mit Hilfe von Tutorials ein PHP Script erstellt. Nur habe ich einige Probleme mit der Ausgabe von bestimmten Datenbankfelder mit der korrekten Reihenfolge.

    Der RSS Feed soll die letzten Einträge der 7 Tage mit der höchsten ID (kArtikel) abwärts lesen und diese dann ausgeben.

    Bei der Ausgabe muss ich 2 Tabellen ansprechen "tartikel" und "tartikelpic". In der Tabelle "tartikelpic" sind die jeweiligen Bilder je Artikel gespeichert.
    Damit ich aber nur 1 Bild anzeigen möchte muss ich aus der Tabelle "tartikelpic" die Spalte "nNr" ansprechen und die niedrigste Zahl nehmen.
    Von der niedrigsten Zahl soll der "cPfad" angesprochen werden und diese dann auch darstellen.


    Meine Datenbanken
    Code:
    tartikelpict
    +--------------+-----------------+-------+
    | kartikelpict |      cPfad      |  nNr  |
    +--------------+-----------------+-------+
    |     560      | 560picture4.jpg |   4   |
    |     560      | 560picture3.jpg |   3   |
    |     560      | 560picture2.jpg |   2   |
    |     560      | 560picture.jpg  |   1   |
    +--------------+-----------------+-------+
    |     561      | 561picture4.jpg |   4   |
    |     561      | 561picture3.jpg |   3   |
    |     561      | 561picture2.jpg |   2   |
    |     561      | 561picture.jpg  |   1   |
    +--------------+-----------------+-------+
    
    tartikel
    +----------+-------+---------------------+------------+-------+
    | kArtikel | cName |  cKurzBeschreibung  | dErstellt  | cSeo  |
    +----------+-------+---------------------+------------+-------+
    |   560    | 12345 |   Short Description | 2014-03-25 | 12345 |
    +----------+-------+---------------------+------------+-------+
    |   561    | ABCDE |   Short Description | 2014-03-25 | abcde |
    +----------+-------+---------------------+------------+-------+
    Mein PHP Code
    PHP-Code:
    <?php

    #    Header
    $ausgabe1 ="<?xml version='1.0' encoding='ISO-8859-1'?>
    <rss version='2.0'>
      <channel>
        <title>RSS</title>

    #    Verbinduungseinstellungen
    $db = mysql_connect ("localhost", "", "");
    $datenbank    = "";

    #    Datum der Erstellung (Heute..)
    $date = date(r);

    #    Datensatz-Ausgabe festlegen
    $sql = "SELECT 
        p1
    .kArtikel
        
    p1.cName
        
    p1.cKurzBeschreibung
        
    p1.dLetzteAktualisierung
        
    p1.dErstellt
        
    p1.cSeo,
        
    p2.kartikelpict,
        
    p2.nNr,
        
    p2.cPfad
        
        
    FROM tartikel 
    AS p1
    JOIN tartikelpict 
    AS p2  
         ON 
    (p1.kArtikel p2.kartikelpict)
    JOIN (SELECT kartikelpict,  MIN(nNrmin_nNr FROM tartikelpict GROUP BY kartikelpictp3
         ON 
    (p2.kartikelpict p3.kartikelpict AND p2.nNr p3.min_nNr)
    ORDER BY p1.kArtikel
        
        
        DESC LIMIT 10
    ";

    #    Sämtliche Datensatz-Ausgabe durchführen
    $resultat = mysql_db_query($datenbank$sql);

    while (
    $row = mysql_fetch_array($resultat)) {
    extract(
    $row);
    $x=0;
    $x++;

          
    $text1         = str_replace( "href=\"/""href=\"http://www.domain.de/"$text );
          
    $ausgabetext    str_replace"src=\"/""src=\"http://www.domain.de/"$text1 );

    $ausgabe2[$x] .= "
        <item>
          <title>
    $cName</title>
          <link>http://electronics.semaf.at/
    $cSeo</link>
          <description><![CDATA[  <img src='http://www.domain.at/bilder/produkte/normal/
    $nNr' height='144' width='144' /> $cKurzBeschreibung  ]]> </description>
          <guid isPermaLink='false'>http://www.domain.at/
    $cSeo</guid>
          <pubDate>
    $dErstellt</pubDate>
          <enclosure url='http://www.domain.at/bilder/produkte/normal/
    $cPfad' type='image/jpeg' />
        </item>"
    ;
    }
    mysql_close($db);

    $ausgabe3 "</channel></rss>";

    #    XML Datei erstellen (CHMOD muss natürlich dementsprechend angepasst sein..)
    #    ---------------------------------------------------------------------------

    $Datei "rss.xml";    // Dateiname
    $Text .= "$ausgabe1 $ausgabe2[$x] $ausgabe3";

    $FilePointer fopen($Datei"w");
    fwrite($FilePointer$Text);
    fclose($FilePointer);
    ?>
    Der Script hier läuft jedoch ist die Auflistung der Bilder nicht korrekt.

    Die Ausgabe
    Code:
    <item>
    	<title>Title 1</title>
    	<link>http://www.domain.de/title1</link>
    	<guid isPermaLink="false">http://www.domain.de/title1</guid>
    	<pubDate>Thu, 12 Jun 2014 00:00:00 +0200</pubDate>
    	<description><![CDATA[ <img src="http://www.domain.de/bilder/produkte/normal/560picture4.jpg" height="144" width="144" />Short Description</p>
    	]]></description>
    	<enclosure url="http://www.domain.de/bilder/produkte/normal/560picture4.jpg" type="image/jpeg" />
    </item>
    <item>
    	<title>Title 2</title>
    	<link>http://www.domain.de/title1</link>
    	<guid isPermaLink="false">http://www.domain.de/title1</guid>
    	<pubDate>Thu, 12 Jun 2014 00:00:00 +0200</pubDate>
    	<description><![CDATA[ <img src="http://www.domain.de/bilder/produkte/normal/560picture3.jpg" height="144" width="144" />Short Description</p>
    	]]></description>
    	<enclosure url="http://www.domain.de/bilder/produkte/normal/560picture3.jpg" type="image/jpeg" />
    </item>
    <item>
    	<title>Title 3</title>
    	<link>http://www.domain.de/title1</link>
    	<guid isPermaLink="false">http://www.domain.de/title1</guid>
    	<pubDate>Thu, 12 Jun 2014 00:00:00 +0200</pubDate>
    	<description><![CDATA[ <img src="http://www.domain.de/bilder/produkte/normal/560picture2.jpg" height="144" width="144" />Short Description</p>
    	]]></description>
    	<enclosure url="http://www.domain.de/bilder/produkte/normal/560picture3.jpg" type="image/jpeg" />
    </item>
    Der Code greift nicht den mindesten Zahl der Spalte $nNr und auch nicht der $cPath.

    Würde mich über unterstützung sehr freuen. Danke

  • #2
    Also ich seh da schon beim draufgucken Syntaxfehler.

    Ich empfehle dir die xml nicht zu konkatinieren sondern DOMDocument zum erzeugen des XML-Codes zu nutzen. Du sparst dir da auch etliches an Konvertierung und jede Form von Charset-Tetris. Andernfalls läufst du schnell Gefahr die XML mit murks zu kontaminieren.
    [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

    Kommentar


    • #3
      Mit DOM hatte ich das Problem das <enclosure> nicht erzeugen konnte daher bin ich wieder auf den umgestiegen.

      <enclosure url="http://www.domain.de/bilder/produkte/normal/560picture3.jpg" type="image/jpeg" />

      PHP-Code:
      <?php
      // XML-Datei automatisch erstellen
      $xml = new DOMDocument('1.0''utf-8');
      $xml->formatOutput true;
           
      $rss $xml->createElement('rss');
      $rss->setAttribute('version''2.0');
      $xml->appendChild($rss);
           
      $channel $xml->createElement('channel');
      $rss->appendChild($channel);
       
      // Head des Feeds   
      $head $xml->createElement('title''Mein erster RSS Feed');
      $channel->appendChild($head);
           
      $head $xml->createElement('description''Alle Neuigkeiten von Max Mustermann');
      $channel->appendChild($head);
           
      $head $xml->createElement('language''de');
      $channel->appendChild($head);
           
      $head $xml->createElement('link''http://domain.de');
      $channel->appendChild($head);
          
      // Aktuelle Zeit, falls time() in MESZ ist, muss 1 Stunde abgezogen werden
      $head $xml->createElement('lastBuildDate'date("D, j M Y H:i:s "time() - 3600).' GMT');
      $channel->appendChild($head);
           
      // Feed Einträge
      include('mysql-connect.php');
      $result mysql_query('SELECT 
          p1.kArtikel, 
          p1.cName, 
          p1.cKurzBeschreibung, 
          p1.dLetzteAktualisierung, 
          p1.dErstellt, 
          p1.cSeo,
          p2.kartikelpict,
          p2.nNr,
          p2.cPfad
          
          FROM tartikel AS p1
          
          JOIN tartikelpict AS p2 
          
          ON (p1.kArtikel = p2.kartikelpict)
          
          JOIN (SELECT kartikelpict ,MIN(nNr) nNr FROM tartikelpict GROUP BY kartikelpict ) p3
          
          ON(p2.kartikelpict = p3.kartikelpict AND p2.nNr = p3.nNr)
          
          ORDER BY p1.kArtikel 
          
          DESC LIMIT 50'
      $connection);
                              
      while (
      $rssdata mysql_fetch_array($result))
      {  
          
      $item $xml->createElement('item');
          
      $channel->appendChild($item);
               
          
      $data $xml->createElement('title'utf8_encode($rssdata["cName"]));
          
      $item->appendChild($data);
           
          
      $data $xml->createElement('description'utf8_encode($rssdata["cKurzBeschreibung"]));
          
      $item->appendChild($data);  
               
          
      $data $xml->createElement('link''/'.$rssdata["cSeo"]);
          
      $item->appendChild($data);
           
          
      $data $xml->createElement('pubDate'date("D, j M Y "$rssdata["dErstellt"]).' GMT');
          
      $item->appendChild($data);
           
          
      $data $xml->createElement('guid'$rssdata["nNr"]);
          
      $item->appendChild($data);
          
          
      $data $xml->createElement('enclosure'$rssdata["nNr"]);
          
      $item->appendChild($data);
      }
      include(
      'mysql-close.php');
         
      // Speichere XML Datei
      $xml->save('rss.xml');
       
      // Rufe die XML Datei auf
      Header('Location: rss.xml');   
      ?>

      Kommentar

      Lädt...
      X