3

次のphpコードがあります。

echo "<div style='float:left;'>";
echo "<table>";
echo "<tr>";
echo "<th></th>";
echo "<th colspan='4'>Laks beholdt</th>";
echo "</tr>";
echo "<tr>";
echo "<th>Uke</th>";
echo "<th>&lt;3 kg</th>";
echo "<th>3-7 kg</th>";
echo "<th>&gt;7 kg</th>";
echo "<th>Totalt</th>";
echo "</tr>";

while ($row = mysql_fetch_array($result, MYSQL_ASSOC) or die(mysql_error()))
{
   echo "<tr>";
   echo "<td>" . $row['Uke'] . "</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumSmall'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumMedium'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumLarge'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumVekt'], 1, ",",
      " ") . " kg</td>";
   echo "</tr>";
}

echo "</table>";
echo "</div>";

while ループから期待どおりの出力が得られますが、テーブルと div の終了タグ (またはその他の出力) が表示されません。エラー メッセージが表示されず、html にエラーが表示されません。連想ではなく数値で配列を参照しようとしましたが、同じ結果が得られます。

私はエラーなしで100の同様のループを書きましたが、ここではアイデアがありません:/

4

4 に答える 4

6

or die()ステートメントが原因で実行が停止しています。$row = mysql_fetch_array($result, MYSQL_ASSOC)ループを停止する必要がある場合は、die()代わりに をヒットします。エラーが発生していないため、何も出力されません。mysql_error()

echo "Before loop\n";

$x = 1;
while($foo = bar($x) or die('Died')) {
    echo $x++, "\n";
}

echo "After loop\n";

function bar($x) {
    if($x < 5) {
        return $x;
    }
    return false;
}

//outputs:
//Before loop
//1
//2
//3
//4
//Died

コードパッドのバージョン

于 2012-04-19T17:32:57.357 に答える
2

die()ループで使用しないでください

while ($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
   echo "<tr>";
   echo "<td>" . $row['Uke'] . "</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumSmall'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumMedium'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumLarge'], 1,
      ",", " ") . " kg</td>";
   echo "<td style='text-align:right; padding-right:10px;'>" . number_format($row['SumVekt'], 1, ",",
      " ") . " kg</td>";
   echo "</tr>";
}
于 2012-04-19T17:32:41.343 に答える
1

while 条件には欠陥があります。結果セットからすべての行がフェッチされたときにmysql_fetch_array()返されるため、スクリプトを実行して強制終了する while 条件になります。falsefalse or die(mysql_error())die()

そのようなものを使用したり、そのようなエラーを画面に出力したりしないでください。

実行しているエラー報告の種類は、本番環境か開発環境かによって異なりますが、エラー チェックは関係なく実行する必要があります。

PDO例外を除いて、mysqliまたはPHP framework完全に何かを強く検討することをお勧めします。ほとんどの場合、 を使用するのは悪い考えmysql_*() APIです。

于 2012-04-19T17:33:50.113 に答える
1

or die ステートメントです。エラーでループを終了させたい場合は、エラーが発生した場合にブール値を設定するカスタム エラー ハンドラ関数を設定します。次に、次のようなことができます

while ($row = mysql_fetch_array($result, MYSQL_ASSOC) or !$error_hander)
于 2012-04-19T17:37:14.047 に答える