在更新复选框时遇到了一些麻烦。
我有两个带有数组的不同表,并且我试图比较两个表中的数据,因为它们包含相似的信息。
ref no用作唯一标识符,因为该信息是CSV上传的,因此我不能使用主键。
至于查询,我在php admin上运行它,结果表明效果很好,我知道代码很容易受到SQL注入的影响,但是如果我能找到解决方案,我就可以进行处理。
两个表的结构:
我运行以下代码
<?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>
";
}
}
}
}
}
?>
运行代码后的结果:
现在,当我尝试比较两个表中的数据时出现了我的问题。结果图像显示了导入后存储在数据库中的第一个参考号,而不是搜索类似的参考号。我没有收到错误消息,但是我收到了一条成功消息,尽管实际上没有更新,也没有挂起。
答案 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)";
由于您的值是以逗号分隔的值发送的,因此它将查找所有这些行并进行更新。