Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用单个按钮购买更新多个产品ID时出现问题_Php_Html_Mysql - Fatal编程技术网

Php 使用单个按钮购买更新多个产品ID时出现问题

Php 使用单个按钮购买更新多个产品ID时出现问题,php,html,mysql,Php,Html,Mysql,这段代码非常适合更新一个OrderIn\u ID或一个orderOut\u ID,它将paid列设置为Yes,然后转到显示这些结果的页面。但是,如果我订购了多个orderIn\u id或多个orderOut\u id,它将只更新第一个,而所有其他id记录保留为No。我应该使用case开关或while循环来获取订单发票中包含的所有订单id吗。我知道这需要SQL注入,这是学校第一学期的一个项目,目前我们还没有学习PDO。我没有收到任何错误,只是不会更新orderIn\u id或orderOut\u

这段代码非常适合更新一个OrderIn\u ID或一个orderOut\u ID,它将paid列设置为Yes,然后转到显示这些结果的页面。但是,如果我订购了多个orderIn\u id或多个orderOut\u id,它将只更新第一个,而所有其他id记录保留为No。我应该使用case开关或while循环来获取订单发票中包含的所有订单id吗。我知道这需要SQL注入,这是学校第一学期的一个项目,目前我们还没有学习PDO。我没有收到任何错误,只是不会更新orderIn\u id或orderOut\u id的多个记录。这是在按下“支付此发票”时调用的php代码。它是否可以一次更新多个记录,是否可以在发票表中插入多个orderIn\u id或orderOut\u id

<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') {

    if(isset($_SESSION['orderIn'])) {
        $orderIn_id = $_SESSION['orderIn'];
        $orderIn_paid = "Yes";

        $changeVal="UPDATE order_instate
                 SET orderIn_paid = '$orderIn_paid'
                 WHERE orderIn_id = '$orderIn_id'; " ; 

        $changeCheck=mysqli_query($dbhandle, $changeVal) 
                        or die(mysqli_error($dbhandle));
    }

    if(isset($_SESSION['orderOut'])) {          
        $orderOut_id = $_SESSION['orderOut'];       
        $orderOut_paid = "Yes";

        $changeVal2="UPDATE order_outstate
                 SET  orderOut_paid = '$orderOut_paid'
                 WHERE orderOut_id = '$orderOut_id'; " ; 

        $changeCheck2=mysqli_query($dbhandle, $changeVal2) 
                or die(mysqli_error($dbhandle));
    }

    $invoice_total = 0;
    $invoice_total = $gtotal;
    $invoice_shipped = "No";
    $shipped_date = "0000-00-00";

    $add ="INSERT INTO invoice(user_id, orderIn_id, orderOut_id, invoice_total, invoice_shipped, shipped_date)
                VALUES ('$user_id', '$orderIn_id', '$orderOut_id', '$invoice_total', '$invoice_shipped', '$shipped_date')"; 

    $addCheck=mysqli_query($dbhandle, $add)
                        or die(mysqli_error($dbhandle));


if($addCheck != NULL) {                         
    header("location: userOrders.php");
    mysqli_free_result ($displayResult);
} 
}
?> 
您可能会开始做这样简单的事情,然后您可以变得更聪明,构建一个单一的插入查询,而不是多次访问数据库。看看这个答案:

您的任务是构建与顶部答案中给出的查询等价的查询,您可以在循环中这样做,然后只将其发送到db一次


但这应该是一个开始。

首先,您必须向它传递一个元素数组来循环。你做过阵列吗?是的,我们已经讨论过阵列。那么我将把orderIn\u id和orderOut\u id传递到数组中,然后循环遍历数组的长度以填充发票表?
if( isset($_SESSION['orderIn'])  && is_array($_SESSION['orderIn']) ) {

 foreach($_SESSION['orderIn'] as $key => $order){

    $orderIn_id = $_SESSION['orderIn'][$key];
    $orderIn_paid = "Yes";

    $changeVal="UPDATE order_instate
             SET orderIn_paid = '$orderIn_paid'
             WHERE orderIn_id = '$orderIn_id'; " ; 

    $changeCheck=mysqli_query($dbhandle, $changeVal) ;
 }
}