【问题标题】:adding to database inside a foreach loop based on a specific variable in php基于php中的特定变量在foreach循环内添加到数据库
【发布时间】:2013-12-10 00:59:19
【问题描述】:

我有一个购物车,它有一个文本框来更新每件商品的数量。当用户单击更新按钮时,我会遍历每个项目并在保存购物车信息的数据库表中更新它们的数量。现在我正在添加礼品卡功能,但遇到了问题。当用户更新某个价格礼品卡的数量时,我不仅需要更新购物车表,还需要创建另一个具有唯一卡号的礼品卡。如果在 foreach 循环中该项目是礼品卡,我正在尝试弄清楚如何添加另一张礼品卡。这是我用于更新数量的代码:

foreach ($_POST['quantity'] as $sku => $qty) {
        list($pid, $szid) = explode("-", $sku);
        if ($pid) { $pid=trim($pid);}
        if ($szid) { $szid=ltrim($szid);}
        if (isset($pid, $szid)) {
            $qty = (filter_var($qty, FILTER_VALIDATE_INT, array('min_range' => 0))) ? $qty : 1;
            $r = mysqli_query($dbc, "CALL update_cart('$uid', $pid, $qty, $szid)");

        }
    }

此代码完全按照我想要的方式工作,以更新购物车商品的数量。现在我不知道如何更改它以检查 $pid 是否为 1 并在礼品卡表中添加新礼品卡(如果是)。这是我最好的尝试,但它似乎不起作用:

foreach ($_POST['quantity'] as $sku => $qty) {
        list($pid, $szid) = explode("-", $sku);
        if ($pid) { $pid=trim($pid);}
        if ($szid) { $szid=ltrim($szid);}
        if (isset($pid, $szid)) {
            $qty = (filter_var($qty, FILTER_VALIDATE_INT, array('min_range' => 0))) ? $qty : 1;
            $r = mysqli_query($dbc, "CALL update_cart('$uid', $pid, $qty, $szid)");
            while($pid == 1 ) {
                $gcn = md5(uniqid('biped', true));
                $card = 'GC'.$gcn.'';
                $amt = $_POST['price'];
                // Add to gift card table
                $r = mysqli_query($dbc, "CALL add_gift_card('$szid', '$uid', '$card', '$amt')");
            }
        }
    }

我需要代码来检查礼品卡 $pid 有多少 $qty,并为 $pid 等于 1 的每个 $qty 运行 add_gift_card 查询。

哦,这里是您想看的表格:

echo'<input type="text" class="cart-item-quantity" name="quantity['.$cart['sku'].']" value="'.$cart['quantity'].'" size="" />';
                                            echo'<input type="hidden" name="price" value="'.$price.'" />';

任何帮助或指导都会很棒。

【问题讨论】:

  • 不就是if ($pid == 1)而不是while ($pid == 1)吗?

标签: php mysqli e-commerce


【解决方案1】:
if ($pid == 1) {
    for ($i = 0; $i < $qty; $i++) {
        $gcn = md5(uniqid('biped', true));
        $card = 'GC'.$gcn.'';
        $amt = $_POST['price'];
        // Add to gift card table
        $stmt = mysqli_prepare($dbc, "CALL add_gift_card(?, ?, ?, ?)";
        mysqli_stmt_bind_param($stmt, 'sisi', $szid, $uid, $card, $amt);
        $r = mysqli_stmt_execute($stmt);
    }
}

【讨论】:

  • 非常感谢您的回答。此外,我正在使用存储过程,这就是为什么我没有包含准备好的语句。哦,为了不添加额外的卡,我需要将 th $i = 0 更改为 $i = 1 以说明购物车中已经存在的卡。
猜你喜欢
  • 1970-01-01
  • 2016-01-30
  • 2018-11-08
  • 1970-01-01
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-09-21
  • 2014-05-27
相关资源
最近更新 更多