根据选中的复选框更新数据库

时间:2014-07-09 11:44:28

标签: php mysql sql database

我的数据库中有以下表格布局和一些数据。 Table Layout in database

我正在通过复选框输入,以便用户可以选择所有适用的事故路况并将其输入数据库。我想说如果你添加一条新记录就可以了,你只需通过checkboex检查并将它们插入数据库

First screen user checked some road conditions

第一个信息现在保存在数据库中,现在用户决定根据用户回来的任何原因更改道路状况并将其更改为以下内容。

User change the checkboexs values

现在我的问题是,我应该如何更新我的表格。我想到的第一件事就是删除已经存在的记录并插入新的记录。

我真正的问题是,假设用户之前选择了3个项目,但是将其更改为两个或一个,那么我将如何删除那些未检查的项目,你知道我在说什么。以下是我一直在尝试的一些代码片段。

$accidentRoadConditions = AccidentRoadConditions::findAccidentRoadConditions($acc_det_id);
$wc_array = [];

while ($roadConditions = $accidentRoadConditions ->fetch(PDO::FETCH_OBJ)) {
    $wc_array[] = $roadConditions ->rc_id;
}

上面我选择了已经存储在数据库中的所有道路状况。

if (isset($_POST['rta_ad_rc'])) {
    foreach ($_POST['rta_ad_rc'] as $rc_id) {
        //AccidentRoadConditions::save(array(null, $ad_lsid, $rc_id));
        // $tmprory = AccidentRoadConditions::findByADAndRCIds($acc_det_id, $rc_id);
        // if(!$tmprory){
        //  AccidentRoadConditions::save(array(null, $acc_det_id, $rc_id));
        // }
        if(in_array($rc_id, $wc_array)){
            $errors[] =  "in array <br />";
            unset($wc_array[0]);
        }
    }
}

所以我的问题是如何根据用户检查的内容更新数据库中的值,并删除之前检查过的未选中的值。变得有点复杂以至于如何根据上述情况更新数据库。

任何想法?

2 个答案:

答案 0 :(得分:1)

我认为这是你应该做的。

  • 在ad_id和rc_id
  • 上创建复合唯一约束
  • 删除不在所选复选框ID中的所有行。
  • 尝试插入所有行但用户INSERT IGNORE。如果记录不存在,它将插入记录,否则它将忽略它。当您使用某个框架时,请参阅如何做到这一点。 如果你不能然后使用try / catch包装它,并忽略如果错误与约束违规有关。

这样您无需检查值是否存在,也不会有任何不必要的插入。

答案 1 :(得分:1)

我认为您需要执行以下操作

  • 将所选支票存储在数组中
  • 检查数据库中是否有任何已保存
  • 如果是,则跳过它们,否则将它们添加到数组中

    $ old_rc_array = []; $ new_rc_array = [];

    while($ roadConditions = $ accidentRoadConditions-&gt; fetch(PDO :: FETCH_OBJ)){     $ old_rc_array [] = $ roadConditions-&gt; rc_id; }

    if(isset($ _ POST [&#39; rta_ad_rc&#39;])){

    foreach($ _POST [&#39; rta_ad_rc&#39;]为$ rc_id){

    if(in_array($rc_id, $old_rc_array)){
        unset($old_rc_array[array_search($rc_id, $old_rc_array)]);
    }else{
        $new_rc_array[] = $rc_id;
    }
    

    } }

    foreach($ old_rc_array as $ rc_to_delete){     AccidentRoadConditions :: deleteByADIdAndRCId($ hidden_​​acc_det_id,$ rc_to_delete); }

    foreach($ new_rc_array as $ rc_to_insert){     AccidentRoadConditions :: save(array(null,$ hidden_​​acc_det_id,$ rc_to_insert)); }