从多个复选框中删除处理错误


Delete from Multiple Checkbox process error

我有一百万行数据,但主键上并没有不同的数据,我想从包含多列的复选框表单中删除多行,但失败了。

如果我尝试将其用作数据库的插入,则它正在工作。

以下是错误详细信息:

您的SQL语法有错误;查看对应于MySQL服务器版本的手册,以获得在第13行的"("71","03","090","005","001","附近使用的正确语法

HTML代码

 <input type="hidden" name="bayar[NM_WP_SPPT][]" value="<?=$NM_WP_SPPT?>">
                <input type="hidden" name="bayar[KD_PROPINSI][]" value="<?=$itung['KD_PROPINSI']?>">
                <input type="hidden" name="bayar[KD_DATI2][]" value="<?=$itung['KD_DATI2']?>">
                <input type="hidden" name="bayar[KD_KECAMATAN][]" value="<?=$itung['KD_KECAMATAN']?>">
                <input type="hidden" name="bayar[KD_KELURAHAN][]" value="<?=$itung['KD_KELURAHAN']?>">
                <input type="hidden" name="bayar[KD_BLOK][]" value="<?=$itung['KD_BLOK']?>">
                <input type="hidden" name="bayar[NO_URUT][]" value="<?=$itung['NO_URUT']?>">
                <input type="hidden" name="bayar[KD_JNS_OP][]" value="<?=$itung['KD_JNS_OP']?>">
                <input type="hidden" name="bayar[THN_PAJAK_SPPT][]" value="<?=$tahun?>">
                <input type="hidden" name="bayar[TGL_JATUH_TEMPO_SPPT][]" value="<?=$itung['TGL_JATUH_TEMPO_SPPT']?>">
                <input type="hidden" name="bayar[PEMBAYARAN_SPPT_KE][]" value="<?=$itung['PEMBAYARAN_SPPT_KE']?>">
                <input type="hidden" name="bayar[KD_KANWIL_BANK][]" value="<?=$itung['KD_KANWIL_BANK']?>">
                <input type="hidden" name="bayar[KD_KPPBB_BANK][]" value="<?=$itung['KD_KPPBB_BANK']?>">
                <input type="hidden" name="bayar[KD_BANK_TUNGGAL][]" value="<?=$itung['KD_BANK_TUNGGAL']?>">
                <input type="hidden" name="bayar[KD_BANK_PERSEPSI][]" value="<?=$itung['KD_BANK_PERSEPSI']?>">
                <input type="hidden" name="bayar[KD_TP][]" value="<?=$itung['KD_TP']?>">
                <input type="hidden" name="bayar[DENDA_SPPT][]" value="<?=$jumlah_tunggakan?>">
                <input type="hidden" name="bayar[SEJUMLAH_RP][]" value="<?=$jumlah_yg_harus_dibayar?>">
                <input type="hidden" name="bayar[JML_SPPT_YG_DIBAYAR][]" value="<?=$itung['PBB_YG_HARUS_DIBAYAR_SPPT']?>">
                <input type="hidden" name="bayar[TGL_PEMBAYARAN_SPPT][]" value="<?=date('Y-m-d', time())?>">
                <input type="hidden" name="bayar[TGL_REKAM_BYR_SPPT][]" value="<?=date('Y-m-d', time())?>">
                <input type="hidden" name="bayar[NIP_REKAM_BYR_SPPT][]" value="<?="060000000"?>">

要从数据库中删除的代码

$values = array();
for ($i=0; $i < count($_POST['bayar']['THN_PAJAK_SPPT']); $i++) {
  $values[] = '(
    "'.$_POST['bayar']['KD_PROPINSI'][$i].'",
    "'.$_POST['bayar']['KD_DATI2'][$i].'",
    "'.$_POST['bayar']['KD_KECAMATAN'][$i].'",
    "'.$_POST['bayar']['KD_KELURAHAN'][$i].'",
    "'.$_POST['bayar']['KD_BLOK'][$i].'",
    "'.$_POST['bayar']['NO_URUT'][$i].'",
    "'.$_POST['bayar']['KD_JNS_OP'][$i].'",
    "'.$_POST['bayar']['THN_PAJAK_SPPT'][$i].'",
    "'.$_POST['bayar']['PEMBAYARAN_SPPT_KE'][$i].'",
    "'.$_POST['bayar']['KD_KANWIL_BANK'][$i].'",
    "'.$_POST['bayar']['KD_KPPBB_BANK'][$i].'",
    "'.$_POST['bayar']['KD_BANK_TUNGGAL'][$i].'",
    "'.$_POST['bayar']['KD_BANK_PERSEPSI'][$i].'",
    "'.$_POST['bayar']['KD_TP'][$i].'",
    "'.$_POST['bayar']['DENDA_SPPT'][$i].'",
    "'.$_POST['bayar']['JML_SPPT_YG_DIBAYAR'][$i].'",
    "'.$_POST['bayar']['TGL_PEMBAYARAN_SPPT'][$i].'",
    "'.$_POST['bayar']['TGL_REKAM_BYR_SPPT'][$i].'",
    "'.$_POST['bayar']['NIP_REKAM_BYR_SPPT'][$i].'"
  )';
}

$delete = "DELETE FROM PEMBAYARAN_TES WHERE (KD_PROPINSI , KD_DATI2 , KD_KECAMATAN , KD_KELURAHAN , KD_BLOK , NO_URUT , KD_JNS_OP ,
                THN_PAJAK_SPPT , PEMBAYARAN_SPPT_KE , KD_KANWIL_BANK , KD_KPPBB_BANK , KD_BANK_TUNGGAL , KD_BANK_PERSEPSI , KD_TP ,
              DENDA_SPPT , JML_SPPT_YG_DIBAYAR , TGL_PEMBAYARAN_SPPT , TGL_REKAM_BYR_SPPT , NIP_REKAM_BYR_STTS) = " . implode(',', $values);
mysqli_query($conn, $delete) or die (mysqli_error($conn));
}

这个错误是什么意思?以及如何解决?

如果"删除查询"不能是这样的,那么从带有'where multiple column name'的复选框中删除多行的其他方法是什么?

HTML复选框表单元素如果选中则返回'on',如果取消选中则不返回任何内容。所以,要查看复选框是否被选中,您必须使用isset()命令(如果您事先知道应该/不应该出现什么复选框)并相应地检查数据库列。在这里,您只收到选中的复选框,并为它们设置where子句。如果需要为未选中的复选框设置IS NOT,则必须提前列出它们。

$where=[];
$bayars=$_POST['bayar'];//gets 2D array
foreach($bayars as $midbayars)
{
  foreach($midbayars as $key=>$bayar)
  {
    $where[]=$key.'='.1; //or whatewer is in database
  }
}
$SQL='DELETE FROM PEMBAYARAN_TES WHERE '.implode(' AND ',$where)