CodeIgniter中如何仅向勾选复选框的联系人发送邮件
我来帮你搞定这个需求,其实核心逻辑就是把选中的联系人ID传到后台,再针对性获取他们的邮箱发送邮件,分这几步来实现:
1. 完善前端复选框与表单结构
你已经用array_unshift给表格加了复选框列,现在要确保每个复选框的命名是数组形式,这样提交后能正确拿到多个选中的ID。调整表格数据的构建逻辑:
// 假设你从模型获取的联系人数据是$contacts数组 foreach ($contacts as &$row) { // 给每行开头插入带正确命名的复选框 array_unshift($row, '<input type="checkbox" name="contact_ids[]" value="' . $row['id'] . '">'); } // 把整个表格包裹在表单里,指定提交到控制器的处理方法 echo form_open('your_controller/send_selected_emails'); // 输出CodeIgniter生成的表格 echo $this->table->generate($contacts); // 添加提交按钮 echo form_submit('submit_btn', '发送邮件给选中联系人'); echo form_close();
2. 控制器中处理表单提交
在你的控制器里新增一个方法,负责接收选中的ID、调用模型获取数据,最终发送邮件:
public function send_selected_emails() { // 检查是否有选中的联系人ID if ($this->input->post('contact_ids')) { $selected_ids = $this->input->post('contact_ids'); // 加载所需的模型和邮件库 $this->load->model('Contacts_model'); $this->load->library('email'); // 从模型获取选中联系人的邮箱信息 $target_contacts = $this->Contacts_model->get_selected_contacts($selected_ids); // 配置邮件基础信息(根据你的实际需求调整) $this->email->from('your_email@example.com', '你的名称'); $this->email->subject('专属邮件通知'); $this->email->message('这是发送给选中联系人的邮件内容'); // 批量添加收件人 foreach ($target_contacts as $contact) { $this->email->to($contact['email']); } // 执行发送并反馈结果 if ($this->email->send()) { $this->session->set_flashdata('success', '邮件已成功发送给选中联系人!'); redirect('your_controller/display_contacts'); // 跳回联系人列表页 } else { $this->session->set_flashdata('error', '邮件发送失败:' . $this->email->print_debugger()); redirect('your_controller/display_contacts'); } } else { $this->session->set_flashdata('warning', '请至少选择一个联系人!'); redirect('your_controller/display_contacts'); } }
3. 模型中实现选中联系人的查询逻辑
在Contacts_model里添加一个方法,根据传入的ID数组,安全获取对应的联系人邮箱:
public function get_selected_contacts($contact_ids) { // 使用where_in筛选指定ID的联系人,CodeIgniter会自动处理SQL注入防护 $this->db->where_in('id', $contact_ids); // 只查询需要的email字段,减少数据传输 $query = $this->db->get('contacts'); // 替换成你的联系人表名 // 返回查询结果的数组格式 return $query->result_array(); }
额外注意事项
- 确保你的联系人表中有
id和email字段,根据实际表结构调整字段名 - 提前在
config/email.php中配置好邮件发送的SMTP参数,避免发送失败 - 如果选中的联系人数量较多,建议分批发送邮件,避免请求超时
- 可以给前端加个“全选”复选框,用JS实现一键选中所有联系人,提升用户体验
内容的提问来源于stack exchange,提问作者Jim123
相关产品推荐
相关产品推荐

