0

尝试在客户网站上工作,我遇到了一些困难。当我在数据库中没有条目时,它会捕获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>';
    }
}
4

3 回答 3

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 '...';
    }
}
于 2012-06-07T00:16:52.277 回答
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 {
....
于 2012-06-07T00:13:54.790 回答
0

您的 if() 语句似乎有缺陷。该声明:

$row = mysql_fetch_array($result);

将获取一行并将 $result 中的指针移动到下一行,因此您的 while 将从第二行开始。如果您的查询只返回一行,那么您实际上是在调用 mysql_fetch_array() 两次并跳过返回的数据。

您应该找到其他方法来检查是否有结果(可能使用 mysql_num_rows())。

于 2012-06-07T00:12:45.103 回答