如何在复选框数组中使用2个foreach循环

时间:2018-07-30 07:00:26

标签: php mysql

在更新复选框时遇到了一些麻烦。

我有两个带有数组的不同表,并且我试图比较两个表中的数据,因为它们包含相似的信息。

ref no用作唯一标识符,因为该信息是CSV上传的,因此我不能使用主键。

至于查询,我在php admin上运行它,结果表明效果很好,我知道代码很容易受到SQL注入的影响,但是如果我能找到解决方案,我就可以进行处理。

两个表的结构: Structure of both tables

我运行以下代码

<?php
include 'DBConfig.php';

if(isset($_POST['Submit']))
{
    reconcile();
}

function reconcile(){
include 'DBConfig.php'; 

if(isset($_POST['reconciled']) && (isset($_POST['reconciled2']))){  


    foreach ($_POST['reconciled']as $recon1){

    foreach($_POST['reconciled2'] as $recon2){
        $query="select bankstatement.date,bankstatement.referenceno,bankstatement.debit,bankstatement.credit,bankstatement.status,cashbook.date,cashbook.referenceno,
        cashbook.debit,cashbook.credit,cashbook.status
            from   bankstatement cross join cashbook
        where '$recon1' = '$recon2' and cashbook.credit = bankstatement.debit and cashbook.debit = bankstatement.credit and cashbook.date = bankstatement.date and bankstatement.status = '0' and cashbook.status = '0'";
        $result= mysqli_query($db,$query);

    if($result)
    {
    $recon1 = implode(',' ,$_POST['reconciled']);
    $recon2 = implode(',' ,$_POST['reconciled2']);


    echo $change = "update bankstatement set status='1' where statementid=$recon1";
    echo $change1 = "update cashbook set status='1' where cashbookid=$recon2";


    $db->query($change);
    $db->query($change1);

    echo "<script>
        alert('Success in Reconciling Process!!!');
        window.location.href='viewreconcile.php';
        </script>
        ";


    }else{
        echo "<script>
        alert('Error in Reconciling Process!!!');
        window.location.href='managereconcile.php';
        </script>
        ";
    }
}
        }
    }
}
?>

运行代码后的结果: Results after code is run

现在,当我尝试比较两个表中的数据时出现了我的问题。结果图像显示了导入后存储在数据库中的第一个参考号,而不是搜索类似的参考号。我没有收到错误消息,但是我收到了一条成功消息,尽管实际上没有更新,也没有挂起。

A sample of the CSV test data

1 个答案:

答案 0 :(得分:1)

由于您尝试使用相同的值更新多行的数据,因此无法以where cashbookid=$recon2的形式发送,但您的代码应如下所示:

echo $change = "update bankstatement set status='1' where statementid IN($recon1)";
echo $change1 = "update cashbook set status='1' where cashbookid IN ($recon2)";

由于您的值是以逗号分隔的值发送的,因此它将查找所有这些行并进行更新。