【发布时间】:2014-02-23 19:32:11
【问题描述】:
所以搜索了互联网和 stackoverflow 以查找之前可能讨论过的任何相关内容或任何文章,但我无法找到任何内容,所以我发现自己创建了这个主题。
我正在做一个项目,我在 POST 上提出了很多 ajax 请求。 Therfor 验证必须发挥重要作用。
所以我创建了如下所列的一些验证函数
//only numeric (integer) regexp [1-9]
Validation::isInteger($a);
//numeric and alphabetic (integer&string) regexp [a-z1-9]
Validation::isAlphaNum($c);
//(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday) Regexp
Validation::isDay($d);
//Array numeric (integer) Regexp
Validation::isArrayNum($sortTo);
我在我的代码中这样使用它,但这看起来很丑! 在模型中:
if(Validation::isInteger($a))
{
if(Validation::isAlphaNum($c))
{
if(Validation::isDay($d))
{
if(Validation::isArrayNum($sortTo))
{
//do process here!
}}}}
然后我想像这样进行验证;不知道它是否安全! 在模型中:
if(!Validation::isInteger($a) &&
!Validation::isAlphaNum($c) &&
!Validation::isDay($d) &&
!Validation::isArrayNum($sortTo)) exit;
//do process here anyway without "if" closure if you dont pass validation above you won't see me!
我的问题是:
- 我应该验证控制器还是模型中的数据?有关系吗?
- 我的第二种方法安全吗?
- 如何验证您的数据? (你的代码设计是什么)
- 我可以使用哪些其他方法/技术来美化这种丑陋。
注意:我不太担心由于验证失败而引发错误。
编辑:(23.02.2014) 但是,如果您在验证方面遇到相同类型的问题或想知道我真的建议您观看,我在 youtube.com 上找到了一个视频,其中对 phpacademy 的验证有很好的解释。 http://www.youtube.com/watch?v=rWon2iC-cQ0&index=13&list=PLfdtiltiRHWF5Rhuk7k4UAU1_yLAZzhWc
【问题讨论】:
-
您可以使用标志并将它们和字符串传递给一个执行所有验证的函数。
-
并不是说它实际上是问题的一部分,但如果你在一个条件下进行所有测试,它应该是
||而不是&&(如果上面的嵌套相同)。或者去掉 not 运算符。 -
1) 如果发现错误,则进行否定检查并返回/抛出异常以避免丑陋的嵌套结构 2) 使用可以包含可以用验证器装饰的元素的表单对象是一件好事。查看一些框架(Zend、Symfony 等)以了解它应该如何工作
-
我找到了解决方案,我在一个数组中创建了一堆规则,并将它们与 $_POST 一起传递到我的验证检查函数中。然后在那里过滤数据并添加错误(如果发现任何错误)。然后简单地 if(count(errors) flag = false; else flag = true;
标签: php validation xss csrf