2012-04-19 212 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)