codeigniter php如何在多行数据库中插入,更新和删除多个复选框值?

pxy2qtax  于 2023-08-01  发布在  PHP
关注(0)|答案(1)|浏览(94)

我正在使用CodeIgniter 3。我必须在数据库的多行中插入和更新多个复选框值,而不是以逗号分隔的值。我首先删除所有记录,然后再次插入,它的工作。但在这种情况下,我必须先删除所有记录,然后再插入。我想如果任何记录已经存在,然后更新,否则插入。如果未选中任何值,则仅删除该记录。有没有办法更新和记录。
这是我的表格。

<form role="form" method="post" action="<?php echo base_url(); ?>admin/update-assignment">
<input type="hidden" id="inputName" name="propertyId" class="form-control" value="<?php echo $PropVal->property_id ?>">
<?php
                    $catArray = array("category_1"=>'Site',"category_2"=>'Unit',"category_3"=>'Areas');
                    $test_seq = 0;
                    foreach($catArray as $k=>$values)
                    {
                    
                    $userAssigned = getassignedUserData($PropVal->property_id,$values);
                                        
                    $arr = array(); 
                    foreach($userAssigned['data'] as $innerRow => $value)
                    {
                        $arr[$innerRow] =  $value['validation_code'];
                    }
                    foreach($usersListtoAssign as $key => $value) 
                    { 
                                
                                $uidandCode =  $value['user_id'].'--'.$value['validation_code'].'--'.$values;
                                $checked = "";
                                if(in_array($value['validation_code'],$arr))
                                {
                                    
                                    $checked = 'checked=checked';
                                }
                    
                    ?>
                    <div class="checklist-div"> 
                        <input type="checkbox" <?php echo $checked; ?> name="<?php echo $inputName."[]" ?>" id="chkbx<?= $value['user_id']; ?>" value="<?php echo $uidandCode ?>" class="chkbox select-<?= $values ?>" <?php echo $disable; ?>>&nbsp;<?php echo $value['first_name'].' '.$value['last_name'].'--'.$value['validation_code'] ?>
                    </div>
                    <?php } } ?>
</form>

字符串
Controller.php

<?php
function update_assignment()
{
    $inputs_ary = $this->input->post(); 
    $pId = $inputs_ary['propertyId'];
    
    if (isset($inputs_ary['validationCode1'])) 
            {
                    $codeVal = $inputs_ary['validationCode1'];
                    $category = 'Site';
                    
                    $this->PropertyModel->deletePropAssignNotExist($pId,$category);
                    foreach ($codeVal as $value) 
                    {
                        $explode = explode('--', $value);
                        $uId = $explode[0];
                        $validation_code = $explode[1];
                        
                        
                        $assignArr = array(
                                'user_id' => $uId,
                                'validation_code' => $validation_code,
                                'property_id' => $pId,
                                'category_name' => $category,
                                'created_on' => date('Y-m-d h:i:s')
                            );

                        $propAssignStatus = $this->PropertyModel->addPropertyAssignment($assignArr);

                        
                    }

                    
            }
            
            if(isset($inputs_ary['validationCode2']))
            {
                $codeVal2 = $inputs_ary['validationCode2'];
                $category = 'Unit Interior';
                $this->PropertyModel->deletePropAssignNotExist($pId,$category);             
                foreach($codeVal2 as $value)
                {
                    
                    $explode = explode('--',$value);
                    $uId = $explode[0];
                    $validation_code = $explode[1];
                                            
                        $assignArr = array(
                                'user_id' => $uId,
                                'validation_code' => $validation_code,
                                'property_id' => $pId,
                                'category_name' => $category,
                                'created_on' => date('Y-m-d h:i:s')
                            );

                        $propAssignStatus = $this->PropertyModel->addPropertyAssignment($assignArr);    
                    
                } 
                            
            
            }
}


PropertyModel.php

public function addPropertyAssignment($array)
{
    if(!empty($array) && count($array) > 0)
    {
        $res = $this->db->insert("property_assignment", $array);
        $result = custom_db_error_log($this->db);
        if($result['status'] == 1)
            $result['data'] = $this->db->insert_id();
        return $result;
    }
}

public function deletePropAssignNotExist($pId,$catName) 
{
    $sql = "delete from property_assignment where property_id='$pId' and category_name='$catName';";
    $res = $this->db->query($sql);
}

kcwpcxri

kcwpcxri1#

要在CodeIgniter的数据库中更新或插入多个复选框值,可以使用以下方法:
1.修改表单以包含现有分配的隐藏输入和新分配的复选框:

<form role="form" method="post" action="<?php echo base_url(); ?>admin/update-assignment">
    <!-- Your other form inputs -->
    
    <?php foreach($catArray as $k => $values): ?>
        <?php
        $userAssigned = getassignedUserData($PropVal->property_id, $values);

        $existingAssignments = [];
        foreach ($userAssigned['data'] as $innerRow => $value) {
            $existingAssignments[] = $value['validation_code'];
        }

        foreach ($usersListtoAssign as $key => $value):
            $uidandCode = $value['user_id'].'--'.$value['validation_code'].'--'.$values;
            $checked = in_array($value['validation_code'], $existingAssignments) ? 'checked' : '';
        ?>
            <div class="checklist-div">
                <?php if (in_array($value['validation_code'], $existingAssignments)): ?>
                    <input type="hidden" name="existing_assignments[]" value="<?= $uidandCode ?>">
                <?php else: ?>
                    <input type="checkbox" name="new_assignments[]" value="<?= $uidandCode ?>" class="chkbox select-<?= $values ?>" <?php echo $disable; ?>>
                <?php endif; ?>
                <?= $value['first_name'].' '.$value['last_name'].'--'.$value['validation_code'] ?>
            </div>
        <?php endforeach; ?>
    <?php endforeach; ?>
</form>

字符串
1.修改控制器以处理更新或插入分配:

function update_assignment()
{
    $inputs_ary = $this->input->post();
    $pId = $inputs_ary['propertyId'];

    // Handle existing assignments
    if (isset($inputs_ary['existing_assignments'])) {
        $existingAssignments = $inputs_ary['existing_assignments'];
        foreach ($existingAssignments as $value) {
            $explode = explode('--', $value);
            $uId = $explode[0];
            $validation_code = $explode[1];
            $category = $explode[2];

            $assignArr = array(
                'user_id' => $uId,
                'validation_code' => $validation_code,
                'property_id' => $pId,
                'category_name' => $category,
                'created_on' => date('Y-m-d h:i:s')
            );

            $propAssignStatus = $this->PropertyModel->updatePropertyAssignment($assignArr);
        }
    }

    // Handle new assignments
    if (isset($inputs_ary['new_assignments'])) {
        $newAssignments = $inputs_ary['new_assignments'];
        foreach ($newAssignments as $value) {
            $explode = explode('--', $value);
            $uId = $explode[0];
            $validation_code = $explode[1];
            $category = $explode[2];

            $assignArr = array(
                'user_id' => $uId,
                'validation_code' => $validation_code,
                'property_id' => $pId,
                'category_name' => $category,
                'created_on' => date('Y-m-d h:i:s')
            );

            $propAssignStatus = $this->PropertyModel->addPropertyAssignment($assignArr);
        }
    }

    // Redirect or show a message based on the result
}


1.修改模型以处理更新现有分配:

public function updatePropertyAssignment($array)
{
    if (!empty($array) && count($array) > 0) {
        // Check if the assignment already exists in the database
        $existingAssignment = $this->db->get_where('property_assignment', [
            'user_id' => $array['user_id'],
            'property_id' => $array['property_id'],
            'category_name' => $array['category_name']
        ])->row();

        if ($existingAssignment) {
            // If the assignment exists, update it
            $this->db->where('id', $existingAssignment->id);
            $this->db->update('property_assignment', $array);
        } else {
            // If the assignment does not exist, insert it
            $this->db->insert('property_assignment', $array);
        }
    }
}

相关问题