是否可以将未设置的变量传递给函数或以其他方式验证没有isset()的表单?

时间:2011-02-23 20:03:39

标签: php json validation

我有一个在前端和后端之间传递JSON的项目。因此,前端PHP将生成语句{ "command" : "getuser", "parameters" : { "userid" : 1 } }并将其发送到后端。后端然后执行

if ($command == 'getuser') {
  validate($parameters['userid']);
  if ($this->valid) { <<get the user>> }
}

验证检查变量并设置$this->valid。如有必要,它会创建一条错误消息。我希望在前端传入{ "command" : "getuser", "parameters" : "" }时创建错误消息。在这种情况下,$parameters['userid']永远不会被设置,而validate()会抱怨它被传递了一个未设置的变量。

我想出了两个解决方案。第一个解决方案是在加载JSON之前设置$parameters['userid'] = "unset",然后在验证器中检查它。另一种解决方案是使用

if (isset($parameters['userid'])) { 
  validate($parameters['userid']);
} 
else { 
  echo("Error"); } 

如果validate()可以自己弄清楚变量是否存在,那就太好了。我应该采取更优雅的方式做事吗?

3 个答案:

答案 0 :(得分:1)

简而言之,没有。错误发生在,而不是在调用validate()之后,因此无法拦截它。

听起来更好的解决方案是拥有一个在整个$ parameters变量中传递的validateUser()函数,然后根据'user_id'进行检查。这使您可以进一步区分您的疑虑(验证和响应)。

答案 1 :(得分:0)

如果你想要这种代码,你可以通过引用将arg传递给函数 如果没有,请尝试使用此验证($ parameters,'userid');

答案 2 :(得分:0)

您必须将$parameters传递给validate并让它检查userid是否存在,如果没有,则创建错误消息。