2012-04-19 210 views
3

我有下面的PHP代碼:輸出停止while循環

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的相似的循環沒有錯誤,但我的想法在這裏:/

+0

你有沒有在網絡上的某個地方我們可以檢討它? – 2012-04-19 17:30:46

+1

您是否曾嘗試在while循環之後立即放置其他類型的輸出?就像「測試」一詞?這顯示出來了嗎? – Armatus 2012-04-19 17:31:03

+1

你死腳本執行當迴路想結束... – yoavmatchulsky 2012-04-19 17:32:17

回答

6

or die()語句導致它使用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 

Codepad version

+0

我想同樣的事情..是在試圖重現的過程。 – 2012-04-19 17:33:57

+0

當然!感謝一堆jprofitt! :D – aanders77 2012-04-19 17:36:57

2

不要在循環

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>"; 
} 
1

你而條件是有缺陷的印刷,因爲mysql_fetch_array()返回false當所有行已提取從結果集,所以當條件變爲false or die(mysql_error())它執行die()並殺死腳本。

你不應該使用或者喜歡那樣,你也不應該把錯誤打印到屏幕上。

報告,你正在做的應該取決於你是否是在生產或開發的類型的錯誤,但錯誤檢查應執行無關。

我建議你強烈考慮一下,例如PDO,例外,mysqliPHP framework。使用mysql_*() API幾乎總是一個壞主意。

+0

'mysql'函數集沒有錯,它只是被棄用。 PDO,mysqli和jquery不是每個問題的答案。 – Blake 2012-04-19 17:34:51

0

這是或死的聲明。如果您想讓循環死於錯誤,請設置一個自定義錯誤處理函數,該函數在出現錯誤時設置布爾值。然後你可以做類似

while ($row = mysql_fetch_array($result, MYSQL_ASSOC) or !$error_hander)