【问题标题】:Codeigniter form validation many conditions in checking duplicateCodeigniter 表单验证检查重复的许多条件
【发布时间】:2017-11-05 03:21:00
【问题描述】:

如果我考虑这样的条件,codeigniter 表单验证库中是否有办法确定人员数据的重复条目: 名字、中间名、姓氏、出生日期在 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 表单验证中做到这一点?

这是我在 Controller 中的代码:

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);
    }

【问题讨论】:

    标签: php forms codeigniter validation


    【解决方案1】:

    创建您自己的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
    } 
    

    【讨论】:

    • 谢谢你的回复先生,你的回答只是名字,如果考虑到我需要fname,middlename,lastname和生日在我的情况下怎么办? ..
    • Codeigniter 表单验证一次只传入一个参数。由于您的验证需要所有字段,因此您需要在自定义验证中从 $_POST 数据中提取所有字段
    猜你喜欢
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多