2011-08-24 84 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