/    Sign up×
Community /Pin to ProfileBookmark

updating xml file with fopen / fwrite

Hi,

I’m trying to get my site to automatically update the rss feed when I add news through my “add news” form. Currently the news gets added to the database fine, but it fails to update the xml file. It doesn’t give me any errors either so I’m finding it difficult to find out what’s wrong. Here’s the code, i hope someone can help!

[CODE]<?php
$date=$_POST[‘date’];
$title=$_POST[‘title’];
$text=$_POST[‘text’];
$author=$_POST[‘author’];

if($date==””||$title==””||$text==””||$author==””){
echo ‘You need to fill in all details’;
exit;
}

if (($_FILES[‘music’][‘type’] == “audio/mpeg”) || ($_FILES[‘music’][‘type’] == “application/force-download”) || ($_FILES[‘music’][‘type’] == “application/octet-stream”)) {
$music=’uploads/’.$_FILES[“music”][“name”];
$tmpname=$_FILES[‘music’][‘tmp_name’];
move_uploaded_file($tmpname,$music);
}

$host=’localhost’;
$user=’u0759062′;
$pass=’password’;
mysql_connect($host,$user,$pass);
mysql_select_db($user);
$query=”insert into newstable values (NULL,'”.$date.”‘,'”.$title.”‘,'”.$text.”‘,'”.$author.”‘,'”.$music.”‘)”;
$result=mysql_query($query);

if(mysql_affected_rows()==1){
echo ‘details were successfully added<br>’;
echo ‘<br><a href=”addnews.php”>Add More News</a>’;
}
else{
echo ‘there was a problem’;
}
$query2=”select date, title, text, author, music from newstable order by date”;
$result2=mysql_query($query2);

$body=”<?xml version=”1.0″ encoding=”UTF-8″?>
<rss version=”2.0″>
<channel>
<title>Nutman</title>
<link>http://hermes.hud.ac.uk/u0759062</link>
<description>Electronic Music Producer</description>
“;

while($row = mysql_fetch_array($result2)) {
$body .=”
<item>
<title> $row[title]</title>
<link> $row[link]</link>
<description> $row[text]</description>
</item>”;
}

$body .=”
</channel>
</rss>”;

$path=”rss/rss.xml”;
$filenum=fopen($path,”w”);
fwrite($filenum,$body);
fclose($filenum);
mysql_close()
?>[/CODE]

to post a comment
PHP

7 Comments(s)

Copy linkTweet thisAlerts:
@danz321authorMar 08.2009 — OK so i fixed the problem, it was becuase the xml file didnt have permission rights to be written to. silly me. however, i now have this problem:

[CODE]$query2="select date, title, text, author, music from newstable order by date";
$result2=mysql_query($query2);

$body="<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title>Nutman</title>
<link>http://hermes.hud.ac.uk/u0759062</link>
<description>Electronic Music Producer</description>
";
$url=""http://hermes.hud.ac.uk/u0759062/";
$type=""audio/mpeg"";

while($row = mysql_fetch_array($result2)) {
$body .="
<item>
<title>".$row['title']."</title>
<link>http://hermes.hud.ac.uk/u0759062/showNews.php?title=".$row['title']."</link>
<description>".$row['text']."</description>";
if (isset($row['music'])) {
$body .="
<enclosure url=".$url.$row['music']."" type=".$type."/>
</item>";
}
else {
$body .="</item>";
}}
$body .="
</channel>
</rss>";

$path="rss/rss.xml";
$filenum=fopen($path,"w");
fwrite($filenum,$body);
fclose($filenum);
mysql_close();
?>[/CODE]


The code writes everything to the xml file fine. However, the if/else statment i used is supposed to make sure that the <enclosure> tags are only used when the $row['music'] var has data within it. at the moment, it puts the <enclosure> tags on ever item. what am i doing wrong?!
Copy linkTweet thisAlerts:
@SodbusterMar 08.2009 — What is the table's default value for the "music" column.

Here's another way to write the xml file (doesn't include the "enclosure" node):[code=php]$myFile = 'rss.xml';
$xmlw = new XMLWriter;
if (($xmlw->openURI($myFile)) === false) {
exit('Cannot open ' . $myFile);
}
$xmlw->setIndent(true);
$xmlw->startDocument('1.0', 'UTF-8');
$xmlw->startElement('rss');
$xmlw->writeAttribute('version', '2.0');
$xmlw->startElement('channel');
$xmlw->writeElement('title', 'Nutman');
$xmlw->writeElement('description', 'Electronic Music Producer');
$xmlw->writeElement('link', 'http://hermes.hud.ac.uk/u0759062/');
while ($row = mysql_fetch_array($result)) {
$xmlw->startElement('item');
$xmlw->writeElement('link', 'http://hermes.hud.ac.uk/u0759062/#' . $row['title']);
$xmlw->writeElement('title', $row['title']);
$xmlw->writeElement('description', $row['text']);
$xmlw->startElement('enclosure');
$xmlw->writeAttribute('url', 'http://hermes.hud.ac.uk/u0759062/#' . $row['music']);
$xmlw->endElement();
$xmlw->endElement();
}
$xmlw->endElement();
$xmlw->endElement();
$xmlw->endDocument();

echo htmlspecialchars(file_get_contents('rss.xml'));[/code]
Copy linkTweet thisAlerts:
@danz321authorMar 08.2009 — unless a music file has been uploaded via the form on the previous page, there is no value for the "music" column, hence why i thought the isset function would work. but it doesnt seem to
Copy linkTweet thisAlerts:
@sweetyMar 18.2009 — Hi danz321

I did the same as u explained using the first piece of code but my page displays nothing. Also, the xml page displays nothing. help me.

The code is

<?php

error_reporting(0);

mysql_select_db("news", $connection);

$select = "SELECT * FROM newsstory where active = 0 ORDER BY dtadded DESC LIMIT 5";

$query = mysql_query($select) or die(mysql_error());

$body="<?xml version="1.0" encoding="UTF-8"?>

<rss version='2.0' >

<channel>

<title>Nutman</title>

<link>http://hermes.hud.ac.uk/u0759062</link>

<description>Electronic Music Producer</description>

";

while($row = mysql_fetch_array($query)) {

$body .="

<item>

<title>".$row['headline']."</title>

<link>http://www.indstate.edu/news/news.php?newsid=".$row['ID']."</link>

<description>".$row['cutline']."</description>";

$body .="</item>";

}

$body .="

</channel>

</rss>";

$file = fopen("rss/sss.xml", "w");

fwrite($file,$body);

fclose($file);

?
Copy linkTweet thisAlerts:
@sweetyMar 18.2009 — Hi everybody,

when i tried the above code and it gave the following error:

The XML page cannot be displayed

Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.



--------------------------------------------------------------------------------

XML document must have a top level element. Error processing resource 'http://www1.indstate.edu/news/rss/sss.php'.
-------------------------------------------------------------


and the style sheet xsl is

<?xml version='1.0' encoding='UTF-8'?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="html"/>

<xsl:variable name="title" select="/rss/channel/title"/>

<xsl:template match="/">

<html>

<head>

</head>

<body>

<a name="top"></a>

<a href="http://www.indstate.edu"><img src="ISU-print-logo.gif" alt="Indiana State University" border="0" width="173" height="52"></img></a>

<h3 font-family="Arial"><font size="+3" color="#0053af">ISU News RSS Feed</font></h3>

<!-- first table-->

<fieldset style="width:600px; margin:20">

<legend><font size="4" color="#8ca77a"><b> What is this page?</b></font></legend>

<form><table>

<tr bgcolor="#e4e9ee"><th align="left">

<p>This is a RSS feed from the ISU News website. RSS feeds allow you to stay up to date with the latest news and features you want from ISU News.</p>

<p>To subscribe to it, you will need a News Reader or other similar device. If you would like to use this feed to display ISU News content on your site, <a href="http://indstate.edu/news/rss/"><b><font color="#406480">please go here.</font></b></a></p>

</th>

</tr>

</table></form></fieldset>

<!--second table-->

<p></p>

<fieldset style="width:800px; margin:20">

<legend>

<font size="4" color="#8ca77a"><b>Latest content available from this feed</b>

</font>

</legend>

<form>

<xsl:apply-templates/>

</form></fieldset>

</body>

</html>

</xsl:template>

<!--template matching-->


<xsl:template match="channel">

<p><a href="{link}" class="title">

<xsl:apply-templates select="title"/></a>

<xsl:apply-templates select="item"/></p>

</xsl:template>

<xsl:template match="item">

<p><a href="{link}" class="title">

<xsl:apply-templates select="title"/></a>

<xsl:apply-templates select="description"/></p>

</xsl:template>

<xsl:template match="title">

<span style="color:#406480">

<span style="font-size:16px">

<span style="font-weight:bold">

<span style="text-decoration: none">

<span style="border-bottom: 1px dotted #A0B6DE">

<xsl:value-of select="."/>

</span></span></span></span></span><br />

</xsl:template>

<xsl:template match="description">

<span style="color:#444444">

<span style="font-size:13 px">

<span style="FONT-FAMILY: Verdana, Arial, Helvetica, sans-serif">

<xsl:value-of select="."/>
</span></span></span><br />

</xsl:template>

</xsl:stylesheet>

Any help is greatly appreciated. Thank you.
Copy linkTweet thisAlerts:
@NogDogMar 19.2009 — Please use [url=http://www.webdeveloper.com/forum/misc.php?do=bbcode#php][noparse][code=php]...[/code][/noparse] tags[/url] around your code samples if you want us to take the time to read it.
Copy linkTweet thisAlerts:
@sweetyMar 19.2009 — I used tags aroung my code. but while pasting I did not include them. Now my code runs and gives the above xml error.
×

Success!

Help @danz321 spread the word by sharing this article on Twitter...

Tweet This
Sign in
Forgot password?
Sign in with TwitchSign in with GithubCreate Account
about: ({
version: 0.1.9 BETA 6.2,
whats_new: community page,
up_next: more Davinci•003 tasks,
coming_soon: events calendar,
social: @webDeveloperHQ
});

legal: ({
terms: of use,
privacy: policy
});
changelog: (
version: 0.1.9,
notes: added community page

version: 0.1.8,
notes: added Davinci•003

version: 0.1.7,
notes: upvote answers to bounties

version: 0.1.6,
notes: article editor refresh
)...
recent_tips: (
tipper: @meenaratha,
tipped: article
amount: 1000 SATS,

tipper: @meenaratha,
tipped: article
amount: 1000 SATS,

tipper: @AriseFacilitySolutions09,
tipped: article
amount: 1000 SATS,
)...