www.webdeveloper.com
Results 1 to 8 of 8

Thread: updating xml file with fopen / fwrite

  1. #1
    Join Date
    May 2005
    Posts
    76

    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()
    ?>

  2. #2
    Join Date
    May 2005
    Posts
    76
    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();
    ?>
    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?!

  3. #3
    Join Date
    Oct 2008
    Posts
    150
    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):
    PHP Code:
    $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')); 
    Last edited by Sodbuster; 03-08-2009 at 03:19 PM. Reason: Removed extraneous line.

  4. #4
    Join Date
    May 2005
    Posts
    76
    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

  5. #5
    Join Date
    Mar 2009
    Posts
    6

    help me

    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);


  6. #6
    Join Date
    Mar 2009
    Posts
    6

    help me

    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">
    <xslutput 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.
    Last edited by sweety; 03-18-2009 at 06:28 PM. Reason: spelling error

  7. #7
    Join Date
    Aug 2004
    Location
    Ankh-Morpork
    Posts
    19,158
    Please use [php]...[/php] tags around your code samples if you want us to take the time to read it.
    "Please give us a simple answer, so that we don't have to think, because if we think, we might find answers that don't fit the way we want the world to be."
    ~ Terry Pratchett in Nation

    eBookworm.us

  8. #8
    Join Date
    Mar 2009
    Posts
    6

    error

    I used tags aroung my code. but while pasting I did not include them. Now my code runs and gives the above xml error.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
HTML5 Development Center



Recent Articles