2017-06-04 93 views
1

是否有笨表单验证库的方式来确定一个人的数据的重复录入,如果我认为像这样的情况很多条件: 名字,中间名,姓,出生日期是在db中匹配。名,中间名,姓和生日:笨表单验证在检查重复

例如,我需要检查,如果这个人已经是如果数据匹配来自DB认为,同样存在。

在这种情况下,我不能使用每种输入类型的is_unique,因为如果此人具有相同的名字,姓氏和中间名,但生日是不同的。我如何在codeigniter中做这样的表单验证?

事情是这样的查询:

SELECT COUNT(patient_id) AS patient_id FROM patients WHERE patients.firstname = "" AND patients.middlename = "" AND patients.lastname = "" AND patients.birthdate = "" 

如果查询结果大于1,那么它被认为是一个重复的条目。我怎么能在codeigniter表单验证中做到这一点?

这是我在控制器代码:

public function addpatient() { 

     $this->form_validation->set_rules('pafname', 'pafname', 'trim|required', 
      array('required' => 'First name is required') 
      ); 

      $this->form_validation->set_rules('pamname', 'pamname', 'trim|required', 
      array('required' => 'Middle name is required') 
      ); 

      $this->form_validation->set_rules('palname', 'palname', 'trim|required', 
      array('required' => 'Last name is required') 
      ); 

      $this->form_validation->set_rules('paaddress', 'paaddress', 'trim|required', 
      array('required' => 'Address is required') 
      ); 

      $this->form_validation->set_rules('pacontact', 'pacontact', 'trim|required', 
      array('required' => 'Contact # is required') 
      ); 

      $this->form_validation->set_rules('pabdate', 'pabdate', 'trim|required', 
      array('required' => 'Birthdate is required') 
      ); 

      $this->form_validation->set_rules('psex', 'psex', 'trim|required', 
      array('required' => 'Gender is required') 
      ); 

      $this->form_validation->set_rules('pmartialstat', 'pmartialstat', 'trim|required', 
      array('required' => 'Martial status is required') 
      ); 

      if ($this->form_validation->run() == TRUE) { 

        $result['status'] = true; 
        $result['message'] = "This patient has no duplicate"; 
      }else { 
       $result['status'] = false; 

       $result['message'] = $this->form_validation->error_array(); 
      } 
      echo json_encode($result); 
    } 

回答

0

创建您自己的custom validation method。在自定义验证方法中,调用SQL以查看是否存在所有字段匹配的记录,并根据匹配返回TRUE/FALSE。

喜欢的东西:

$this->form_validation->set_rules('pafname', 'pafname', 'trim|required|callback__duplicate_validation', 
     array('required' => 'First name is required', 
       'callback__duplicate_validation' => 'Duplicate record') 
     ); 

function _duplicate_validation($pafname) { 
    // Get _POST data for all fields since only pafname is passed in 
    // Call SQL to see if duplicate 
    // if duplicate, return FALSE 
    // else return TRUE 
} 
+0

谢谢您的回复,先生,你已经回答是只为姓,如果认为我需要FNAME,中间名,姓氏和生日我的病情? .. –

+0

Codeigniter表单验证一次只传入一个参数。由于您的验证需要所有字段,因此您需要从自定义验证中的$ _POST数据中提取所有字段 –