所以我使用以下代码样式if(array_key_exists('some_value', $_POST)){echo 'hi';}
对于PHP 5.2.17我从这种代码风格中收到警告。这是警告:
WARNING: argument 2 for array_key_exists() is not either an array or an object on line: 123
这对我来说很奇怪,因为我认为应该始终定义$ _POST数组。那不是这样吗?我不确定是什么原因导致$ _POST数组不被视为数组。我没有将$ _POST重置为任何东西,所以它应该始终作为数组存在。有谁知道什么是错的。如果需要更多信息,请告诉我,谢谢你的帮助。
编辑:我应该注意,这只发生在生产服务器上。我的本地环境没有这个问题。
答案 0 :(得分:2)
请改用if(isset($_POST['some_value'])) { echo 'hi'; }
。没问题。
同时检查您是否覆盖或取消设置 $ _POST(或者您正在使用的某个框架正在为您执行此操作)。我避免使用超全局变量这样做,因为我认为这是一个不好的做法,并且可能会让人感到头疼。
答案 1 :(得分:2)
Superglobals
$_POST
和$_GET
仅在脚本为POST
或GET
时填充。在您的示例中,您获得该错误的原因是,如果脚本没有发布操作。在检查某个帖子值之前,您应该检查以确保有帖子:
if(isset($_POST)) {
//The form was posted
}
以那种方式。在那里,您可以使用array_key_exist
检查某些值,或者您可以进一步检查isset($_POST['myKey'])
。