2011-08-24 112 views
4

我试图通过在收件箱中选择多个复选框,然后点击提交删除删除从我的数据库中的多个私人信息。我有下面的代码,但没有任何反应。我不知道我错过了什么..笨删除多行与复选框

查看:

<?php echo form_open('pm/remove_checked'); ?> 

<?php foreach ($query as $row): ?> 
    <input type="checkbox" name="msg[]" value="<?php echo $row->id; ?>" /> 
    <?php echo $row->from; ?> 
    <?php echo $row->subject; ?>  
    <?php echo date("m/d/Y",strtotime($row->msg_date)); ?>   
<?php endforeach; ?> 

<?php echo form_submit('delete', 'Delete'); ?> 

</form> 

控制器:

function remove_checked() 
{ 
     //validation rules 
     $this->form_validation->set_rules('msg[]', 'Private Message', 'required|xss_clean'); 

     if ($this->form_validation->run() == FALSE) 
     { 
      $data['query'] = $this->Pm_model->received_msg(); 
      $this->load->view('pm/inbox', $data); 
     } 
     else //success 
     { 
      $checked_messages = $this->input->post('msg'); //selected messages 
      $this->Pm_model->delete_checked($checked_messages); 

      //redirect to inbox          
     } 

} 

型号:

function delete_checked($checked_messages) 
{ 
    $checked_messages = array(); 
    foreach ($checked_messages as $msg_id): 

      $this->db->select('id'); 
      $this->db->from('user_msg'); 
      $this->db->where('id', $msg_id); 
      $this->db->limit(1); 
      $query = $this->db->get(); 

      if ($query->num_rows() > 0) //if message exists 
      {    
      $this->db->where('id', $msg_id); 
      $this->db->where('recipient', $this->users->get_user_id()); //verify if recipient id is equal to logged in user id 
      $this->db->delete('user_msg'); 

      } 
      else 
      { 
       return FALSE; 
      } 

    endforeach; 
} 

回答

4

在当前的delete_checked()方法,你return尽快荷兰国际集团FALSE作为第一个消息是“发现”不存在,这将阻止消息的其余部分被删除,因为return将停止执行循环。如果您想这样做,请改用continue,并考虑使用transactions

如果不特别在意个人产生错误的每封邮件,你的模型功能,可以简化一下:

function delete_checked($message_ids) 
{ 
    $this->db 
     ->where_in('id', $message_ids) 
     ->where('recipient', $this->users->get_user_id()) 
     ->delete('user_msg'); 
    return $this->db->affected_rows() > 0; 
} 

这将只是试图删除记录。如果它们不存在,他们将被忽略,并且$this->db->affected_rows()应该返回删除的邮件数量。如果你想确保选择的所有的消息已被删除,或使用,如果至少一个只检查邮件被删除该实例方法,你可以把它比作count($message_ids)。如果该消息不存在,则无需将其删除。

All the stuff Chris Schmitz mentioned是正确和重要的,以及,你有一些非常基本的错误。如果你希望你可以路过一个ID(整数或字符串)这个函数你可能想数组,而不是分配$checked_messages为空数组。像这样:

$message_ids = (array) $message_ids; 
+0

感谢您的建议!我不知道“继续”和交易。对于循环,我不得不使用'($ checked_messages作为$ key => $ msg_id)'..我没有得到数组项的值。 – CyberJunkie

1

要指定$checked_msg到输入端这是检查,但然后你传递一个不同的变量称为$checked_messages到模型。您需要将$checked_msg var传递给模型。

而且,在你的模型,你重新声明的$checked_messages var和它设置为空数组。您需要删除它,否则它会覆盖您传递给该方法的信息。

+0

对不起,我犯了这个错误使代码可读。在我的原始脚本中,它们是相同的。 – CyberJunkie