0

クライアントのサイトで作業しようとしていますが、少し苦労しています。データベースにエントリがない場合、キャッチしif(!row)てメッセージを表示します。この部分は正常に動作します。私の問題は、データベースにエントリがある場合、それらが表示されないことです。同様のループを実行しているページがいくつかあるため、while ループが機能することはわかっています。実際、このループは、このエントリの情報を公開ページに表示する別のページからコピーされたものです。

このサイトが主に質問のためのものであることは知っていますが、自分のコードを見るために新鮮な目が必要だと思います (12 時間以上コーディングしていて、少し疲れています)。以下のコードの多くは、以前の Web デザイナーによるものです。コードが「古くなっている」ため、私に任されている場合は、サイト全体を書き直しますが、クライアントは私にそれを改善することを望んでいます。どんな助けでも大歓迎です。

$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 は 2 行目から開始されます。クエリが 1 行しか返さない場合、実質的に mysql_fetch_array() を 2 回呼び出し、返されたデータをスキップしています。

結果があるかどうかを確認する別の方法を見つける必要があります (おそらく mysql_num_rows() を使用)。

于 2012-06-07T00:12:45.103 に答える