验证国家/地区下拉表单

时间:2012-02-13 23:25:02

标签: codeigniter validation drop-down-menu

首先,我已经提到过: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...
      }

}

我的想法“没问题”还是有更好的解决办法来解决这些问题?

1 个答案:

答案 0 :(得分:1)

回调正是您所需要的。我认为这就是为什么他们被创造出来的原因。在用户指南中:

  

“验证系统支持回调您自己的验证   功能。这允许您扩展验证类以满足   你的需求。“

因此,如果您需要检查提交的值是否来自定义的范围,请使用它。 当然,根据结果,它应该返回false或true。 user guide for callbacks 对我来说,这是最好的解决方案。特别是因为您需要在提交表单后检查这些值。

至于阻止选择0,例如,如果in_array$input,请不要将0添加到!empty或先检查并设置正确的错误消息。如果您正在创建自己的回调,则可以根据需要验证$input