这是我的代码的副本:
<?php header("Content-type: text/xml"); ?>
<?php echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; ?>
<?php
mysql_connect("localhost", "database_user", "database_pass") or die(mysql_error());
mysql_select_db("database_name") or die(mysql_error());
$cityquery = "SELECT * FROM cities ORDER BY RAND() LIMIT 1";
$cityresult = mysql_query($cityquery);
$cityrow = mysql_fetch_row($cityresult);
$city = $cityrow[0];
$servicequery = "SELECT * FROM services ORDER BY RAND() LIMIT 1";
$serviceresult = mysql_query($servicequery);
$servicerow = mysql_fetch_row($serviceresult);
$service = $servicerow[0];
?>
<rss version="2.0">
<channel>
<title>Website Name</title>
<link>http://www.mywebsite.com</link>
<description>This is the main description.</description>
<pubDate><?echo date('Y/m/d H:i:s');?></pubDate>
<?php foreach( range( 1, 25 ) as $i ): ?>
<item>
<title><?php echo $service; ?> in <?php echo $city; ?></title>
<pubDate><?echo date('Y/m/d H:i:s');?></pubDate>
<link>http://www.mywebsite.com</link>
<description>This is where the description goes.</description>
</item>
<?php endforeach; ?>
</channel>
</rss>
我正在尝试生成一个包含25个项目的RSS源。现在所有25个项目都显示完全相同的内容。
您可以在此处看到每个项目标题的代码,这是造成问题的原因:
<title><?php echo $service; ?> in <?php echo $city; ?></title>
这样做是从MySQL数据库中提取随机服务和随机城市的列表。每个项目的标题应显示随机城市和随机标题。但截至目前,他们都为所有25种饲料项目展示了相同的城市和相同的服务。
这可能是一件简单的事情,但我觉得我正盯着一堵砖墙,因为我整天都在努力,但却无法弄明白。我相信可能需要使用mysql_fetch_array,但我似乎无法正确使用它。我真的很感激可以提供任何帮助。
答案 0 :(得分:1)
在您的代码中,您只获取下一行一次,因此它将始终包含相同的数据。
除了@Phil在评论中提到它已被弃用之外,你应该每次在循环中获取一个新行。
编辑:下面的代码应该达到预期的效果
<?php
mysql_connect("localhost", "database_user", "database_pass") or die(mysql_error());
mysql_select_db("database_name") or die(mysql_error());
$cityquery = "SELECT * FROM cities ORDER BY RAND()";
$cityresult = mysql_query($cityquery);
$servicequery = "SELECT * FROM services ORDER BY RAND()";
$serviceresult = mysql_query($servicequery);
?>
<rss version="2.0">
<channel>
<title>Website Name</title>
<link>http://www.mywebsite.com</link>
<description>This is the main description.</description>
<pubDate><?echo date('Y/m/d H:i:s');?></pubDate>
<?php foreach( range( 1, 25 ) as $i ):
$cityrow = mysql_fetch_row($cityresult);
$city = $cityrow[0];
$servicerow = mysql_fetch_row($serviceresult);
$service = $servicerow[0];
?>
<item>
<title><?php echo $service; ?> in <?php echo $city; ?></title>
<pubDate><?echo date('Y/m/d H:i:s');?></pubDate>
<link>http://www.mywebsite.com</link>
<description>This is where the description goes.</description>
</item>
<?php endforeach; ?>
答案 1 :(得分:1)
mysql_fetch_row()
从结果集中获取一行作为数字键数组,mysql_fetch_assoc()
将执行相同操作,但使用选定的字段名称作为键,mysql_fetch_array()
将同时执行一次(默认情况下)或者可以选择接收参数,以指定是否需要数字或关联格式。
它与解决方案无关。
您在这里缺少的是,您必须为从数据库中选择的每条记录调用mysql_fetch_row()
。应该在循环中调用此函数,直到它返回FALSE
。
相反,您只调用一次,并将相同的结果打印25次。
此外,您无论如何都只从数据库中选择一条记录(SELECT ... LIMIT 1
),您期望得到25种不同的结果?