0

我在使用 php 的 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>';
} ?>

设置一个临时变量是行不通的,因为它只是具有相同的行为。

怎么了?

提前致谢!

4

2 回答 2

0

可能是您的数组空了。您应该添加一个捕获以防万一。

你会想要做这样的事情,使用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>';
 }
?>
于 2012-06-24T18:33:02.057 回答
0

在我看来,您的查询总是返回一行?但是您尝试使用$r[$i].

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

尝试显示你的数组的内容,print_r($r)看看它是什么样子的。

于 2012-06-24T18:43:19.903 回答