【问题标题】:codeigniter check checkbox array if exist in databasecodeigniter 检查复选框数组是否存在于数据库中
【发布时间】:2013-03-06 23:42:40
【问题描述】:

我有一个包含复选框数组的表单,我正在尝试检查数据库是否存在某个复选框值,如果不存在则将其插入数据库:

这是我当前的代码:

查看页面:

<form action="<?php echo site_url('test/post_form')?>" method="post">  
<input type="text" name="full_name">
<input type="checkbox" name="subject[]" value="Algebra" > 
<input type="checkbox" name="subject[]" value="Trigonometry" > 
<input type="checkbox" name="subject[]" value="Geometry" > 
<input type="submit" name="submit"> 

控制器页面:

public function post_form()
{
$post_data = array(
'subject'=>$this->input->post('subject'),
'full_name'=>$this->input->post('full_name'),
);  

$this->load->model('subject_model');  
if($this->subject_model->check_subject($post_data)===true)  
 {  
  $this->session->set_flashdata('msg', 'Already Exist');  
  redirect('test/error_page');  
 }
else  
{  
  insert to database
}
}

模型页面:

public function check_subject($post_data=array())  
{
extract($post_data);  
foreach($post_data as $key=>$value)  
{  
$this->db->select('subject');
$this->db->where('subject',$value['subject']);
$this->db->where('full_name',$value['full_name']);
$this->db->from('subject_table');  
$query=$this->db->get();  

  if ($query->num_rows() > 0)  
  {
      return true;
  } 
  else  
  {
  return true;  
  }

}

示例场景:

  • 假设 db 中存在三角函数,
  • 如果我选中所有复选框并提交,它仍然会插入三角函数。
  • 但是如果代数存在于 db 中,
  • 我检查了所有的复选框,它说已经存在。
  • 似乎只检查第一个值是否重复。

【问题讨论】:

  • 那么实际的问题是什么?得到错误?不能正常工作?会发生什么?
  • 为什么你定义你的$post_data 数组没有$this-&gt;input-&gt;post('subject') 数组?我在任何地方都没有看到$this-&gt;input-&gt;post('dept') 的任何输入数据...

标签: php codeigniter


【解决方案1】:

我认为您必须在单独的数组中跟踪在数据库中找到的主题并返回结果,它可能看起来像这样,您可以将其设置为 True FALSE 组合或其他任何适合您的东西

public function check_subject($post_data=array())  
{
extract($post_data); 
$subjects=array(); 
foreach($post_data as $key=>$value)  
  {  
$this->db->select('subject');
$this->db->where('subject',$value['subject']);
$this->db->where('full_name',$value['full_name']);
$this->db->from('subject_table');  
$query=$this->db->get();  

  if ($query->num_rows() > 0)  
      $subjects[$value['subject']]=true;
  else  
      $subjects[$value['subject']]=FALSE; 
  }
return $subjects;
}

【讨论】:

    【解决方案2】:

    实际上你的主题是作为一个数组发布的,所以你可以这样检查

    public function check_subject($post_data=array())  
    {
    $val = " '". implode( "', '",$post_data['subject']) ."' " ;
    
    $this->db->select('subject');
    $this->db->where(" subject in {$val} ");
    $this->db->where('full_name',$value['full_name']);
    $this->db->from('subject_table');  
    $query=$this->db->get();  
    
      if ($query->num_rows() > 0)  
      {
        return true;
      } 
      else  
      {
        return false;  
      }
    
    }
    

    检查一下,我认为它会起作用

    【讨论】:

      猜你喜欢
      • 2012-06-08
      • 2011-05-16
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2019-07-04
      • 2023-02-10
      • 2019-03-28
      • 1970-01-01
      相关资源
      最近更新 更多