【问题标题】:Combine PHP foreach loop with a SQL foreach loop将 PHP foreach 循环与 SQL foreach 循环结合使用
【发布时间】:2013-04-26 04:30:16
【问题描述】:

转发:

我已经检查过 Stack Overflow 上措辞相似的问题,但没有一个是针对我正在尝试的问题。

我有什么:

我有会话数据、两个循环和一个 SQL 表。

  1. 第一个循环检查特定的现有会话数据并使用 此数据的键(而不是值)以确定哪些 id 应从表中选择 (SQL)。
  2. 第二个循环逐行输出 SQL 结果。

...这也可以用一种不那么抽象和更友好的方式来描述:

  1. 第一个循环查找当前添加到购物车的商品 (key = product id, value = quantity) 确定什么产品 应列在“您的订单”页面上。
  2. 第二个循环列出与每个产品 ID 关联的数据行 例如标题、描述和单位成本。

我需要什么:

由于我的会话数据由产品 ID(键)和相应的数量(值)组成,我需要将数量显示为每个输出行的一部分。

id                | title         | description   | unit cost     | amount             | subtotal
session data key  | from database | from database | from database | session data value | basic PHP math
(also in database)                                                                       (unit cost * amount)

我的代码:

使用会话数据键查询所需产品的第一个循环:

$id_from_session = "WHERE id = '9999999999'"; //fix due to not being sure how to simuataneously incorporate "WHERE" and "OR" into query loop (only looping the "OR" condition).

foreach($_SESSION['post'] as $key=>$value)
    {       
        $id_from_session .= "OR id ='".$key."'";
    } 

输出查询结果行的第二个循环:

foreach ( $yourorders as $yourorder ) 
    {
    ?>
        <?php echo $yourorder->title; ?></br>
        <?php echo $yourorder->description; ?></br>
        <?php echo $yourorder->value; ?></br>
        <?php /* I NEED THE QUANTITY HERE */ ?></br>
        <?php /* VALUE * QUANTITY HERE */ ?></br>
    <?php
    }
<?php /* OVERALL TOTAL OUTSIDE OF LOOP */ ?></br>

我的问题:

如何将会话数据循环中的数量(以及数量 * 单位值)合并到 SQL 结果循环中?

【问题讨论】:

    标签: php sql loops foreach


    【解决方案1】:
    $_SESSION['post'][$yourorder->id] 
    

    应该给你正确的数量吗?所以,

    <?php echo $_SESSION['post'][$yourorder->id]; ?>
    

    或者如果允许短标签

    <?= $_SESSION['post'][$yourorder->id]; ?> 
    

    也是构建 WHERE 字符串的更好方法。

    $where = array();
    foreach($_SESSION['post'] as $key=>$value)
    {       
        $where[] = "id ='".$key."'";
    } 
    
    $id_from_session = "WHERE " . implode(' OR ', $where);
    

    【讨论】:

    • 您获得数量的解决方案很有效,并且很容易让我计算出小计 (VALUE * QUANTITY)。我目前正在审查您对 WHERE 字符串的建议,并试图弄清楚如何获得总体总数。
    • 您可以在 foreach 循环中保留一个运行总计。
    • 您的 WHERE 字符串解决方案有效,是的,它更好,谢谢。
    • 是的,foreach 循环内的运行总计有效。这只是在循环外调用运行总变量以获得最终总和的情况。可以在这里查看代码:pastebin.com/dE9dfNqv。感谢您涵盖我问题的三个方面。
    【解决方案2】:

    $_SESSION['post'][$yourorder->id] 为您提供数量,因为键是产品 ID :)

    好吧..如果您可以绝对确定您的购物车键不需要转义,您可以这样写:

    $id_from_session = "WHERE id IN ('" . implode( "', '", array_keys($_SESSION['post']) ) . "')";
    

    【讨论】:

    • 感谢您的回答。变形者大约提前 10 分钟回答。老实说,不确定是否应该转义 id。它源自文本框的名称,而不是文本框的值。文本框的值代表数量。为了安全起见,最好同时逃脱吗?
    • 任何来自浏览器的数据(用户可以更改)都应该被转义,或者必须被转义
    猜你喜欢
    • 2016-09-26
    • 2012-07-19
    • 2014-12-05
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    相关资源
    最近更新 更多