我希望使用复选框删除用户和用户角色。首先检查然后提交按钮单击。点击后,应删除所选用户和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>
答案 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