尝试在客户端网站上工作,我遇到了一些困难。当我在数据库中没有条目时,它会在if(!row)
处捕获并显示该消息。这部分工作正常。我的问题是当我在数据库中有条目时,它们不显示。我知道while循环有效,因为我有几个页面运行类似的循环。事实上,这个循环是从另一个页面复制的,该页面在公共页面上显示该条目的信息。
我知道这个网站主要是为了提问,但我想我只需要一双新眼睛来看我的代码(我已经编码了12个多小时而且我有点累了)。下面的许多代码来自以前的网页设计师,如果由我决定,我只会重写整个网站,因为代码是“过时的”,但客户只是希望我改进它。任何帮助都会非常感激。
$row = mysql_fetch_array($result);
if (!$row) {
echo '<tr><td bgcolor="ffffff" colspan="3"><font face="arial,helvetica" size="2" color="000000">There are no entries at this time, check back later.</font></td></tr>';
} else {
while ($row = mysql_fetch_array($result)) {
echo '<tr>
<td bgcolor="ffffff"><font face="arial,helvetica" size="2" color="000000">$date - $row["theme"]</font></td>
<td bgcolor="ffffff" align="center">
<form action="dsp_modifyposition.php">
<input type="hidden" name="specialID" value="$row["specialID"]">
<input type="hidden" name="theme" value="$row["theme"]">
<input type="submit" value=" Modify ">
</form>
</td>
<td bgcolor="ffffff" align="center">
<form action="act_deleteposition.php" onsubmit="return confirm(\'Are you sure you want to delete this event: $date \')">
<input type="hidden" name="specialID" value="$row["specialID"]">
<input type="hidden" name="theme" value="$row["theme"]">
<input type="submit" value=" Delete ">
</form>
</td>
</tr>';
}
}
答案 0 :(得分:3)
第一次调用mysql_fetch_array时,mysql结果指针将移动到下一行。因为此行没有任何操作,所以第一行不会显示。你想要的是mysql_num_rows
来检查结果集中有多少行。作为旁注,如果您不使用数字索引,我建议使用mysql_fetch_assoc
。
if (!mysql_num_rows($result)) {
echo '...';
} else {
while ($row = mysql_fetch_assoc($result)) {
echo '...';
}
}
答案 1 :(得分:1)
将您的第一行更改为:
$cnt = mysql_num_rows($result)
if (!$cnt) {
echo '<tr><td bgcolor="ffffff" colspan="3"><font face="arial,helvetica" size="2" color="000000">There are no entries at this time, check back later.</font></td></tr>';
} else {
....
答案 2 :(得分:0)
你的if()语句似乎有缺陷。声明:
$row = mysql_fetch_array($result);
将获取一行并将$ result中的指针移动到下一行,因此您的while将从第二行开始。如果您的查询只返回一行,那么您将有效地调用mysql_fetch_array()两次并跳过返回的数据。
您应该找到一些其他方法来检查您是否有结果(可能使用mysql_num_rows())。