验证无效。所有表单字段都是动态的。这取决于用户他选择了多少个字段。如果他选择2,它将在视图中显示2个字段。如果选择3,那么它将显示3个字段,依此类推。我有超过30个字段
我在表单验证页面中设置了3个数组(用于测试目的,我只设置了3个。这将是字段总数)。如果我删除最后一个数组而不是验证工作,因为我在视图中只获得了2个字段。我无法在表单验证页面中使用超过2个数组。
是否必须要求视图中的字段数等于表单验证中的多组规则数组?
查看
这是我的动态视图页
*tags = _tags
Form_validation.php
<?php
echo form_open('formbuilder_control/enxample_from_view');
foreach ($data as $key) {// I am getting output
$exp_fields_name=$key->fields_name;
$exp_fields_type=$key->fields_type;
$exp_form_elements=$key->form_elements;
$abc=explode(',',$exp_form_elements);
foreach ($abc as $value) {
if ($exp_fields_name == $value) {?>
<div class="form-group row label-capitals">
<label class="col-sm-5 col-form-label"><?php echo $exp_fields_name;?></label>
<div class="col-sm-7">
<input type="<?php echo $exp_fields_type;?>" name="<?php echo $exp_fields_name;?>" placeholder="<?php echo $value;?>" class="form-control" />
<?php echo form_error($exp_fields_name); ?>
</div>
</div>
<?php
}}}?>
<div class="form-buttons-w btn_strip">
<input type="submit" name="submit" value="Save" class="btn btn-primary margin-10">
</div>
<?php echo form_close(); ?>
控制器
$config = array(
'test'=>array(
array('field' =>'firstname',
'label' => 'First Name',
'rules' => 'required'
),
array('field' => 'lastname',
'label' => 'lastname',
'rules' => 'required'
),
array('field' => 'middlename',
'label' => 'middlename',
'rules' => 'required'
)
),
);
答案 0 :(得分:2)
当然会失败。您的验证规则将“中间名”字段定义为required
,该字段甚至不存在于表单中。
缺少的字段不能满足required
规则。
答案 1 :(得分:0)
好吧,因为您希望拥有一组验证规则,并且您有两种不同的表单需要验证,您可以使用Codeigniter的验证callback
函数使用非常好的选项。
我将在这里发布一个简单的例子:
您的观看文件:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<?php echo form_open('formbuilder_control/test');?>
<input type="text" name="firstname">
<input type="hidden" name="which_form" value="first_form">
<?php echo form_error('firstname'); ?>
<input type="text" name="lastname">
<?php echo form_error('lastname'); ?>
<input type="submit" name="submit" value="submit">
<?php echo form_close(); ?>
<?php echo form_open('formbuilder_control/test');?>
<input type="text" name="firstname">
<input type="hidden" name="which_form" value="second_form">
<?php echo form_error('firstname'); ?>
<input type="text" name="lastname">
<?php echo form_error('lastname'); ?>
<input type="text" name="middlename">
<?php echo form_error('middlename'); ?>
<input type="submit" name="submit" value="submit">
<?php echo form_close(); ?>
</body>
</html>
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class YourController extends CI_Controller {
public function save()
{
//.... Your controller method called on submit
$this->load->library('form_validation');
// Build validation rules array
$validation_rules = array(
array(
'field' => 'A',
'label' => 'Field A',
'rules' => 'trim|xss_clean'
),
array(
'field' => 'B',
'label' => 'Field B',
'rules' => 'trim|xss_clean'
),
array(
'field' => 'C',
'label' => 'Field C',
'rules' => 'trim|xss_clean|callback_required_inputs'
)
);
$this->form_validation->set_rules($validation_rules);
$valid = $this->form_validation->run();
// Handle $valid success (true) or failure (false)
}
public function required_inputs()
{
if( $this->input->post('which_form') == "second_form" && !$this->input->post('middlename'))
{
$this->form_validation->set_message('middlename', 'Middle name is required!');
return FALSE;
}
return TRUE;
}
}
从上面的例子中你可以看到required_inputs
函数就像一个普通的函数,你可以编写任何PHP代码。
所以我建议的是,在两个表单中都有一个隐藏字段,jus来检查提交的表单,然后为middlename
验证规则设置回调函数,在该函数中,检查用户提交的表单,并基于它,返回TRUE或FALSE。
我希望这能让你完全了解自己能做些什么。
您只需在每个表单中添加一个具有不同值的隐藏字段,并检查回调函数中的值以决定是否应该应用第三个验证规则。
答案 2 :(得分:0)
可以使用最少的代码来设置灵活的规则集。考虑这个form_validation.php
示例
<?php
$first_last = array(
array('field' => 'firstname',
'label' => 'First Name',
'rules' => 'required'
),
array('field' => 'lastname',
'label' => 'lastname',
'rules' => 'required'
),
);
$middle_name = array(
array('field' => 'middlename',
'label' => 'middlename',
'rules' => 'required'
)
);
$config = array(
'fullname' => array_merge($first_last, $middle_name), //first, middle and last name fields
'shortname' => $first_last, //only first and last name fields
);
这提供了两组不同的字段供form_validation->run()
使用。
例如:在使用第一个,中间名和姓氏字段的表单上
if($this->form_validation->run('fullname'))
{
...
或者,表单只包含名字和姓氏字段
if($this->form_validation->run('shortname'))
{
...
答案 3 :(得分:0)
正如其他人所提到的,你需要一个不存在的领域。你要么:
middlename
middlename
存在的验证规则没有为您的问题做出贡献,但在可用性方面,您可能希望更改lastname
和middlename
规则中的标签,以使其更加用户友好。
$config = array('test'=>array(
array('field' =>'firstname',
'label' => 'First Name',
'rules' => 'required'
),
array('field' => 'lastname',
'label' => 'lastname',
'rules' => 'required'
),
array('field' => 'middlename',
'label' => 'middlename',
'rules' => 'required'
)
),
);
此外,如果您未尝试要求middlename
但希望在插入数据库之前清理或验证其格式,则该文档还提供了有关不同自定义规则的其他有用提示。
https://www.codeigniter.com/userguide3/libraries/form_validation.html#form-validation-tutorial