-2

我收到下面的愚弄错误,但不知道为什么。$_Post 都有数据。

错误:警告:在第 19 行的 /home/soc/process_member.php 中为 foreach() 提供的参数无效

    $valid = true; 
    foreach($_POST['add'] && $_POST['cpl'] as $value) { 
        if(!isset($value)) { 
            $valid = false;
        } 
    }
    if(!$valid) { 
        $err .= 'please fill in all fields';
        $en['reg_error'] = '<div class=err style="color: #FF0000;"><b>'._error.': '.$err.'</b></div><br>';
        load_template('modules/members/templates/s_reg.tpl');   
    }
4

3 回答 3

3

您应该阅读有关 PHP 的更多信息。“foreach”有两种语法:

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

这是完全错误的:

foreach($_POST['add'] && $_POST['cpl'] as $value) { 

让我给你举个例子:

<?php
foreach (array(1, 2, 3, 4) as &$value) {
    $value = $value * 2;
}
?>

有关更多信息,请查看有关 foreach 的官方 PHP 文档:http: //php.net/manual/en/control-structures.foreach.php

于 2013-01-27T14:43:28.500 回答
2

我认为你想要的是一个合并的数组:

foreach(array_merge($_POST['add'], $_POST['cpl']) as $value) {
  // ...
于 2013-01-27T14:50:05.720 回答
1

首先,在 PHP 中,&&操作的结果总是布尔值(即,truefalse) - 你不能将它提供给foreach(以及为什么你可能希望?),因此会出现错误。

其次,即使有可能,在isset这里使用仍然没有什么意义:如果其中一个$_POST['add']$_POST['cpl']确实未设置,则发出通知

因此,您可以像这样重写代码的第一部分:

$valid = isset($_POST['add']) && isset($_POST['cpl']);

...或者,考虑到isset构造的灵活性,就...

$valid = isset($_POST['add'], $_POST['cpl']);

...因为,正如其官方文档中所说:

如果提供了多个参数,则仅当设置了所有参数时 isset() 才会返回 TRUE。评估从左到右进行,并在遇到未设置的变量时立即停止。

如果实际上有一大堆 args 需要检查和/或您懒得每次都输入 '$_POST',请使用它们的名称foreach数组(而不是实际值!)来代替:

$valid = true;
foreach (array('add', 'cpl', 'whatever', 'it', 'takes') as $argName) {
  if (! isset($_POST[$argName])) {
    $valid = false;
    break;
  }
}
于 2013-01-27T14:41:35.270 回答