我正在尝试使用codeigniter的表单验证库来验证表单。我有一些问题,我需要帮助。 1.假设用户填写表格进行提交 2.验证库在db表中查找重复项,并为字段设置错误消息 3.表格显示消息 在这种方法中,我看到了退缩。假设表中有5个字段设置为唯一。因此验证将运行查询以查找5次唯一字段。
其他方法
让用户插入并且db产生错误。这里没有在表单验证库中调用callback_find_duplicate函数。表格已填充。在这种方法中,很难找到哪个字段是重复的,因此为此设置错误消息将是麻烦的。最糟糕的情况是该用户输入重复的名称。填写表格,然后填写电子邮件。然后其他一些继续。
我需要找到一种方法,或者我们可以编写一个查询,它将查找所有字段的所有重复项。并且在没有调用callback_find_duplicate的情况下为所有字段设置错误消息五次。因为我认为调用单个查询将花费更少的执行时间。
答案 0 :(得分:1)
尽管form_validation很盛大,但我发现自己有时会更喜欢其他解决方案。
添加:
<强>库/ My_Form_validation.php 强>
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class MY_Form_validation extends CI_Form_validation {
/* Custom function to create errors manually
* */
function create_error($str_field, $str_message) {
$str_message = t($str_message, $str_line);
$this->_field_data[$str_field] =
array('error' => $str_message,
'is_array' => FALSE,
'postdata' => $this->CI->input->post($str_field),
'rules' => '',
'field' => $str_field);
$this->_error_array[$str_field] = $str_message;
}
}
然后您可以在->run()
之前在控制器中手动运行它。
尽可能获取查询,并为每种情况设置一个if:
$arr_uniques = array('email', 'name', 'snn'); // whatev
foreach($arr_uniques as $h)
if ($row->$h == $this->input->post($h))
$this->form_validation->create_error($h, "{$h} is not unique!");
答案 1 :(得分:0)
对数据库的五次调用并不多。第一种方法就是我这样做的方式,而不是使CodeIgniter可以很好地处理的事情复杂化。