如何验证Codeigniter中结合的多个字段?

时间:2010-11-17 07:06:00

标签: php codeigniter

是否有一种创意且简单的方法可以同时检查多个表单字段。

我有一个包含动态生成字段的表单,每个表单都有一个唯一的ID。

提交所有字段不是必需的,但在提交之前必须填写至少一个字段。

有没有办法在Codeigniter中执行此操作,或者我将如何有效地验证这一点。

我知道可以单独检查每个字段,但我正在寻求更清洁的方式。

我希望你们能清楚。感谢。

3 个答案:

答案 0 :(得分:5)

试试这个:

$_POST['data_you_want_to_validate_together'] = $_POST['first_field'] . $_POST['second_field'];
$this->form_validation->set_rules('data_you_want_to_validate_together','Some Data', 'required|callback_some_function');

现在您可以通过以下方式获取数据:

echo $this->input->post('data_you_want_to_validate_together');

答案 1 :(得分:1)

现在,我有一个自定义函数,它将批量检查表单上的每个提交,以确保它符合一组规则。我认为可以将我的表单设置为html数组(data[]),在代码点火器中检索它,然后使用CI callback_验证功能确保一切正常。这看起来很复杂,所以我还没有把头完全包裹起来,但也许这会让你的车轮转向正确的方向。

修改

$this->load->library('form_validation');

// If there is any posted data, then we should assign it to our $post_data array.

$post_data = $this->input->post('project_data');
if (empty($post_data)) {die('empty form');}

// Now, we are ready to validate the incoming data.
// We will send the data through a callback function which will check to make sure it is valid.
// If it is not valid, the callback function will trigger a codeigniter validation error.

// Let's temporarily remove any commas from the submission data to avoid delimiter confusion when sending it through the callback

$post_data = str_replace(",", "DELIMITEDCOMMA", $post_data);

$post_data_str = http_build_query($post_data);
$this->form_validation->set_rules("project_data[errors]", 'Errors', "required|callback__validate_project_data[$post_data_str]");

$this->form_validation->run();

然后,根据您需要验证的内容编写自定义验证函数。

function _validate_project_data($value, $request)
{
    // A callback rule check is being attempted by the CI validator 
    // $value is the actual value of the submission, while $request is the key and value

    $request = explode(",", $request);
    $request = str_replace("DELIMITEDCOMMA", ",", $request);

    // rename the keys in the request back to the original convention

    parse_str($request[0], $request); 
    //var_dump($request);

    // perform validation here and return true or false (valid or invalid)      

}

答案 2 :(得分:-2)

不完全确定您的意思,因为无论您采用哪种方式,都必须单独检查字段。除非你连接所有输入并检查它?也许我错过了那些东西。

只需去客户端:http://flowplayer.org/tools/demos/validator/index.html

Serverside:http://formigniter.org/

希望这会有所帮助......