我试图通过选择收件箱中的多个复选框并单击提交以删除从我的数据库中删除多个私人消息。我有下面的代码,但什么也没发生。我不知道我错过了什么。
视图:
<?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;
}
在您当前的delete_checked()
方法中,一旦"发现"不存在的第一条消息,您将return
处理FALSE
,这将防止其他消息被删除,因为return
将停止执行循环。如果您想这样做,请使用continue
,并考虑使用事务。
如果您不是特别关心为每条消息生成单独的错误,您的模型函数可以简化一点:
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)
进行比较,或者使用仅检查是否至少删除了一条消息的示例方法。如果消息不存在,你也不需要删除它。
Chris Schmitz提到的所有东西都是正确的,也很重要,你有一些非常基本的错误。如果您希望将单个id(整数或字符串)传递给此函数,您可能希望将强制转换为array,而不是将 $checked_messages
赋值给空数组。这样的:
$message_ids = (array) $message_ids;
您将$checked_msg
分配给被检查的输入,但随后您将一个称为$checked_messages
的不同变量传递给模型。您需要将$checked_msg
变量传递给模型。
此外,在您的模型中,您正在重新声明$checked_messages
变量并将其设置为空数组。你需要删除它,否则它会覆盖你传递给方法的信息。