【发布时间】:2014-10-17 14:34:21
【问题描述】:
上周刚开始使用 CI 并遇到此问题。如果我将表单数据作为数组传递,在 matches 函数中放置什么?
我使用 html 表单中的数组来定位单个数组中的所有输入字段,以防我想传递用户生成的输入,例如多个电话号码或电子邮件。所以一切都放在数组中,如下所示:
<div>
<label for="password">Password</label>
<input type="password" name="input[password]" id="password" value="<?php echo set_value("input[password]")?>"/>
</div>
<div>
<label for="password">Confirm Password</label>
<input type="password" name="input[conf_password]" id="conf_password" value="<?php echo set_value("input[conf_password]")?>"/>
</div>
注意*name="input[password]"*
验证对所有人来说都是一种魅力,除非我使用函数matches:
$this->form_validation->set_rules("input[password]", "Password", 'required|matches[input[conf_password]]');
$this->form_validation->set_rules("input[conf_password]", "Confirm Password", 'required');
matches[input[conf_password]]
这不起作用,因为在我检查了 Form_Validation.php 之后,我发现matches 将采用我放在matches 方括号之间的任何字符串,并尝试直接从$_POST 获取值。
CI 代码:
/**
* Match one field to another
*
* @access public
* @param string
* @param field
* @return bool
*/
public function matches($str, $field)
{
if ( ! isset($_POST[$field]))
{
return FALSE;
}
$field = $_POST[$field];
return ($str !== $field) ? FALSE : TRUE;
}
所以按理说不会有$_POST[input[conf_password]] 这样的东西。
我知道我可以通过使用来解决这个问题
- 自定义验证函数
- 直接比较 $_POST["input"]["password"] === $_POST["input"]["conf_password"]
我不确定我缺少什么,因为 CI 中与表单相关的所有内容都可以很好地与数组一起使用,为什么不使用这个函数?
【问题讨论】:
-
返回
!($str !== $field) -
实际上它会在 if 中返回 false ! isset($_POST[$field])
-
我在想另一种写法,与你的问题无关。
标签: php forms codeigniter validation