错误未定义偏移量:PHP代码点火器中的2

时间:2017-09-28 08:25:36

标签: php codeigniter

我希望使用复选框删除用户和用户角色。首先检查然后提交按钮单击。点击后,应删除所选用户和user_role。

在491行获得了php undefined offset 2错误

这是我的模特:

public function add_participation(){
    $user = $this->input->post('user');
    $role = $this->input->post('role');
    $delete = $this->input->post('delete');
    for($i=0;$i<count($user);$i++){
        if($user[$i] !=""){

            $this->db->where('workflow_activity_id',$this->input->post('batch'));
            $this->db->where('role_id',$role[$i]);
            $this->db->where('user_id',$user[$i]);
            $exist = $this->db->get('workflow_participation');  

            $data = array(
                'user_id'                   => $user[$i],
                'role_id'                   => $role[$i],
                'workflow_activity_id'      => $this->input->post('batch'),
            );
            if($exist->num_rows() == 0){
                $this->db->insert('workflow_participation',$data);
            }else{
                $this->db->where('workflow_activity_id',$this->input->post('batch'));
                $this->db->where('role_id',$role[$i]);
                $this->db->where('user_id',$user[$i]);              
                $this->db->update('workflow_participation',$data);
            }                
                if($delete[$i] == '1'){  //**error on this line**
                $this->db->where('workflow_activity_id',$this->input->post('batch'));
                $this->db->where('role_id',$role[$i]);
                $this->db->where('user_id',$user[$i]);
                $this->db->delete('workflow_participation');
            }
        }
    }
    return true;
}

在此视图页面中,user和user_role显示在下拉列表中。

这是我的观看页面

<div class="form-group">
<label class="control-label col-md-3">User :</label>
<div class="col-md-8">
    <select id="user" name="user[]" class="select form-control">
        <option value="" selected="selected">-------</option>
        <?php 
        if(!empty($user)){
        foreach($user as $user_result){?>
            <option value="<?=$user_result->id;?>" <?php if(!empty($participent) && !empty($participent[1]) && $participent[1]->user_id == $user_result->id){?>selected="selected"<?php }?>><?=$user_result->username;?></option>
        <?php }}?>
    </select>
</div>
<label class="control-label col-md-3">Role :</label>
<div class="col-md-8">
    <select id="role" name="role[]" class="select form-control">
        <option value="" selected="selected">-------</option>
        <?php 
        if(!empty($role)){
            foreach($role as $role_result){?>
        <option value="<?=$role_result->id;?>" <?php if(!empty($participent) && !empty($participent[1]) && $participent[1]->role_id == $role_result->id){?>selected="selected"<?php }?>><?=$role_result->name;?></option>
        <?php }}?>
    </select>
</div>
<label class="control-label col-md-3">Delete :</label>
<div class="col-md-8">
    <input type="checkbox" name="delete[]" value="1">
</div>

2 个答案:

答案 0 :(得分:0)

首先检查变量$ role是否与$ user具有相同数量的数据,如果不是,那么你有问题。

接下来的第for($i=0;$i<count($user);$i++)行,为你的计数创建一个外部变量,这里每次你输入for,调用count(),坏的优化。

答案 1 :(得分:0)

由于您使用delete []作为数组,我希望您的视图处于循环中。 复选框值仅在选中时提交。因此,您将收到错误顺序的输入。 即,您选择了第一个用户和角色并检查了最后一次删除,您可能会收到第一个用户的删除。第二次和第三次删除将是未定义的。 Please see this link for details and hidden field hack for this issue

所以我建议你在html中更改以下3行,如下所示。您可以使用$ participent [1] - &gt; user_id(或计数器)作为视图文件中的索引。

<select id="user" name="user[<?php echo $participent[1]->user_id;?>]" class="select form-control">
...
<select id="role" name="role[<?php echo $participent[1]->user_id;?>]" class="select form-control">
...
<input type="checkbox" name="delete[<?php echo $participent[1]->user_id;?>]" value="1">

从此

更改循环
for($i=0;$i<count($user);$i++){

foreach( $user as $i => $unused ) {

然后而不是等于检查

if($delete[$i] == '1'){  //**error on this line**

使用

if( isset($delete[$i]) ){  //**error on this line**
    // if( $delete[$i] == '1' ){  //uncomment if you need double confirmation