首先,我已经提到过:Validating form dropdown in CodeIgniter
但它并没有解决我的问题:
如您所知,<option>
值可以伪造,例如使用firebug。
我的选择选项如下所示:
<option value="ger">Germany</option>
<option value="uk">United Kingdom</option>
<option value="usa">United States of America</option>
[...]
现在,如何验证选择和发布的值是否正确? 这些值构建在大型阵列上。它看起来如下:
$countries = array (
'ger' => 'Germany',
'uk' => 'United Kingdom',
'usa' => 'United States of America'
);
那么如何验证选择值是否正确?我是否必须在表单验证中使用带有函数回调的array_key_exist
?
如果我的选择选项如此,该怎么办?
<option value="0">Choose Something</option>
<option value="1">Select-1</option>
<option value="2">Select-2</option>
[..]
如何使用表单验证器验证上述内容,以便检查发布的值是否正确而不是伪造,以及如何阻止选择0
值?
在我看来,最好的想法是创建函数回调,它将如下所示:
public function validate_values($input)
{
$allowed = array(1, 2, 3, 4); //[..]
if ( !in_array( $input, $allowed ) )
{
//throw error, and do the rest...
}
}
我的想法“没问题”还是有更好的解决办法来解决这些问题?
答案 0 :(得分:1)
回调正是您所需要的。我认为这就是为什么他们被创造出来的原因。在用户指南中:
“验证系统支持回调您自己的验证 功能。这允许您扩展验证类以满足 你的需求。“
因此,如果您需要检查提交的值是否来自定义的范围,请使用它。 当然,根据结果,它应该返回false或true。 user guide for callbacks 对我来说,这是最好的解决方案。特别是因为您需要在提交表单后检查这些值。
至于阻止选择0,例如,如果in_array
为$input
,请不要将0添加到!empty
或先检查并设置正确的错误消息。如果您正在创建自己的回调,则可以根据需要验证$input
。