I got sick of looking at shit pieces of code that either didn’t work properly, or produced XML so badly formatted you couldn’t read the raw source to debug it, so I decided to write my own, based on the BBC’s RSS source.
<?php
/*
* @abstract PHP script to correctly generate an RSS feed
* @author Jon Thompson
* @version 0.1
* @since 11 Dec 2009
*
* Requires an SQL table with the following fields to read:
* - title
* - link
* - description
* - thumbnail
*
* Will generate an on-the fly RSS feed from database-driven content.
* For best results, amend the following and add to your pages in the <head></head> section:
*
* <link rel="alternate" type="application/rss+xml" title="RSS" href="http://www.yoursite.com/link/to/this/script/rss.php" />
*
*/
//***** Database login details *****
$db_server = "localhost";
$db_database = "database";
$db_username = "username";
$db_password = "password";
//***** RSS feed details *****
$rss_title = "Your title here";
$rss_link = "URL to web page that displays these items";
$rss_description = "An overall description of your feed";
$rss_language = "en-gb";
$rss_copyright = "Your copyright notice";
$rss_docs = "URL to a page explaining distribution and use of these articles";
//***** SQL query to generate list *****
$sql = "SELECT * FROM table limit 15";
//############################################################################################################
//# NOTHING FURTHER TO EDIT FROM THIS POINT ON #
//############################################################################################################
//***** Connect to database *****
$db = mysql_connect($db_server, $db_username, $db_password) or die("Unable to connect to MySQL server\n\n");
mysql_select_db($db_database, $db) or die("Unable to select database\n\n");
//***** Execute the SQL query *****
$result = mysql_query($sql, $db);
//***** Loop through the results to get the rest of the feed *****
if(mysql_num_rows($result)){
while($row=mysql_fetch_assoc($result)){
$output .= " <item>
<title>".htmlentities($row["title"])."</title>
<link>".htmlentities($row["link"])."</link>
<description>".htmlentities($row["description"])."</description>
<media:thumbnail url=\"".htmlentities($row["thumbnail"])."\" />
</item>
";
}
}else{
$output .= " <item>
<title>No entries</title>
<link></link>
<description>Sorry, there are no new entries to view</description>
<media:thumbnail url=\"\" />
</item>
";
}
//***** Build the entire feed from our results *****
//***** This will also format it correctly so it's readble in plain text format *****
$output = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>
<?xml-stylesheet title=\"XSL_formatting\" type=\"text/xsl\" href=\"/shared/bsp/xsl/rss/nolsol.xsl\"?>
<rss version=\"2.0\" xmlns:media=\"http://search.yahoo.com/mrss\">
<channel>
<title>$rss_title</title>
<link>$rss_link</link>
<description>$rss_description</description>
<language>$rss_language</language>
<lastBuildDate>".date("D, d M Y H:i:s T")."</lastBuildDate>
<copyright>$rss_copyright</copyright>
<docs>$rss_docs</docs>
<ttl>15</ttl>
".$output." </channel>
</rss>\n";
//***** Output the feed correctly *****
header("Content-Type: text/xml");
echo $output;
exit(0);
?>

So.. the mighty English team progress yet again with another thumping of one of the minnows of Europe. Top of the table, undefeated in the group stage, talks of heading to South Africa for the World Cup Finals.![Subscribe to [serpents kiss dot com]](http://www.serpentskiss.com/wordpress/wp-content/themes/black-hat/images/rss_feed.gif)
Sol Campbell targets the visit of Blackpool on 11 September for his Newcastle debut.
Newcastle striker Andy Carroll withdraws from the England Under-21 squad for the European Championship qualifiers with an ankle injury.
Brighton sign Newcastle United winger Kazenga LuaLua on loan and Norwegian striker Torbjorn Agdestein for a nominal fee.
Newcastle's Andy Carroll cancels out Sylvain Ebanks-Blake's opener as the Tynesiders claim a point at Molineux.
Newcastle have announced the signing of Hatem Ben Arfa on an initial season-long loan deal from Marseille. 