PHP5 foreach $ _POST抛出错误?

时间:2012-06-06 13:30:04

标签: php foreach

我收到了这个错误:

  

警告:stristr()期望参数1为字符串,数组为   /nfs/c09/h03/mnt/12345/domains/mydomainname.com/html/inyoni/fabrics.php   在第385行

来自此代码:

foreach ($_POST as $field => $value) {

    if ($value && (stristr($value,"Content-Type: "))){
    header("Location: error.php");
    exit;
    }

}

我不明白为什么。事实上,我没有看到错误,但我的客户端确实如此。我的理解是,当图像文件包含在表单中时会发生这种情况(但是,此错误之前没有出现过,现在才出现)。

该网站托管在Mediatemple上,并向客户发送了一条PHP通知,告知客户关于PHP5在其服务器上全面使用的时间 - 这是PHP5冲突还是什么?

有点疑惑 - 任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:3)

错误很清楚。它说stristr()的第一个参数必须是一个字符串。但是,您提供的是数组,这就是代码产生错误的原因。要修复它,只需确保您只是检查字符串值。

if (is_string($value))
{
    if (stristr(...))
}

答案 1 :(得分:2)

$value包含一个数组,而不是一个字符串。当你有这样的表格时会发生这种情况:

<input type="text" name="form[foo]"/>
<input type="text" name="form[bar]"/>

$_POST['form']将包含这两个变量的数组。检查是否发生了这样的事情。

文件上传,多个复选框等也可能发生这种情况。

正如Kemal Fadillah建议的那样,对$value变量进行简单的类型检查。

答案 2 :(得分:1)

在循环中执行var_dump($value)。如果任何表单包含数组,例如上传的文件http://www.php.net/manual/en/features.file-upload.post-method.php或一堆复选框,则$value将是一个数组,而不是字符串。