PHP:For循环在代码执行之前完成

时间:2012-06-24 17:48:41

标签: php for-loop indexing echo

我遇到了php for for循环的问题 循环迭代太快,并且在内部的html代码被回显之前完成。

<?php for($i = 0; $i < sizeof($shoppingCart); $i++) { 
    $sql = "SELECT * FROM products_test WHERE id = " . substr($shoppingCart[$i], 5) . "";
    $q = $DBH->query($sql) or die("failed!");
    $q->setFetchMode(PDO::FETCH_ASSOC);
    $r = $q->fetchAll();
    echo '<tr>';
    echo '<td><img src="' . $r[$i]['image']. '" /></td>';
    echo '<td>' . $r[$i]['title'] . '</td>';
    echo '<td>' . $r[$i]['desc'] . '</td>';
    echo '<td>' . $r[$i]['price'] . '</td>';
    echo '<td><input type="number" id="qty"></td>';
    echo '<td>Remove</td>';
    echo '</tr>';
} ?>

设置临时变量不起作用,因为它只会有相同的行为。

怎么了?

提前致谢!

2 个答案:

答案 0 :(得分:0)

可能是你的阵列空了。你应该添加一个catch以防万一。

您可能希望使用empty函数:

来制作类似的内容
<?php 
 if (!empty($shoppingCart))
 {
  for($i = 0; $i < sizeof($shoppingCart); $i++) { 
     $sql = "SELECT * FROM products_test WHERE id = " . substr($shoppingCart[$i], 5) . "";
     $q = $DBH->query($sql) or die("failed!");
     $q->setFetchMode(PDO::FETCH_ASSOC);
     $r = $q->fetchAll();
     echo '<tr>';
     echo '<td><img src="' . $r[$i]['image']. '" /></td>';
     echo '<td>' . $r[$i]['title'] . '</td>';
     echo '<td>' . $r[$i]['desc'] . '</td>';
     echo '<td>' . $r[$i]['price'] . '</td>';
     echo '<td><input type="number" id="qty"></td>';
     echo '<td>Remove</td>';
     echo '</tr>';
  } 
 }
 else
 {
     echo '<tr><td>Your shopping cart is empty</td></tr>';
 }
?>

答案 1 :(得分:0)

在我看来,你的查询总是返回一行?但您尝试使用$r[$i]访问不存在的行。

这可以解释为什么你在浏览器中看不到任何东西。但是尝试查看浏览器源代码,如果它显示空的html标签,那就是这个问题。

尝试使用print_r($r)显示数组的内容,并查看其外观。