【问题标题】:PHP: For loop is done before the code is executedPHP:在代码执行之前完成 For 循环
【发布时间】:2012-06-26 03:27:40
【问题描述】:

我遇到了 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>';
} ?>

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

怎么了?

提前致谢!

【问题讨论】:

  • 怎么了?你的预期结果是什么?你现在得到了什么?
  • “在内部的 html 代码被回显之前完成”是什么意思?听起来你遇到了错误,所以代码停止了。
  • 你确定这是你的确切代码吗,$i++); 之后没有;
  • $shppingCart的内容是什么?
  • @Rocket 不,我的意思是在 for 循环结束后 ) 在后续代码之前执行它。

标签: php for-loop indexing echo


【解决方案1】:

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

您会想要使用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>';
 }
?>

【讨论】:

    【解决方案2】:

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

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

    尝试使用print_r($r) 显示数组的内容,看看效果如何。

    【讨论】:

    • 是的!这就是问题所在。很抱歉没有提供更多信息。
    • 没问题。如果我的回答对你有帮助,你能接受吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2015-03-04
    • 2021-02-15
    • 2018-05-12
    • 2017-05-10
    相关资源
    最近更新 更多