从多个复选框进程中删除进程错误

时间:2016-08-01 05:02:24

标签: php mysql sql

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

如果我尝试使用插入数据库,它就可以了。

以下是错误详情:

  

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

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'的复选框中删除多行的另一种方法是什么?

1 个答案:

答案 0 :(得分:0)

HTML复选框表单元素如果选中则返回'on',如果未签名则返回任何内容。因此,要查看是否已选中复选框,您必须使用isset()命令(如果您事先知道应该/不应该出现什么复选框)并相应地检查数据库列。在这里,您只会收到已选中的复选框,并为它们设置where子句。如果你需要为未经检查的checkbx设置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)