我正在尝试通过在收件箱中选中多个复选框并单击“提交以删除”来从我的数据库中删除多个私人邮件。我有下面的代码,但没有任何反应。我不确定我错过了什么..
查看:
<?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;
}
答案 0 :(得分: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;
答案 1 :(得分:1)
您正在为已检查的输入分配$checked_msg
,但是您正在将另一个名为$checked_messages
的变量传递给模型。您需要将$checked_msg
var传递给模型。
此外,在您的模型中,您将重新声明$checked_messages
var并将其设置为空数组。您需要删除它,否则它将覆盖您传递给方法的信息。