PHP foreach无效值

时间:2010-09-10 14:07:25

标签: php post foreach

我的HTML代码中有几个这样的:

<input class="table" type="checkbox" name="interest[]" value="finger food" />

这在我的PHP代码中:

$checkboxes = stripslashes($_POST['interest']);

//process the checkboxes
foreach ($checkboxes as $value) {
    $selectedChkbx .= $value . ", ";
}

我得到了:

  

警告:为foreach()foreach()

提供的参数无效

并且我的$selectedChkbx变量未获取任何值。有谁知道我做错了什么?

6 个答案:

答案 0 :(得分:3)

stripslashes可能会将数组转换为字符串。这意味着$checkboxes是一个字符串,您不能在foreach中使用字符串。

stripslashes内的数组的每个值应用foreach

foreach ($_POST['interest'] as $value) {
    $selectedChkbx .= stripslashes($value) . ", ";
}

或使用array_map对数组的每个值应用函数:

$checkboxes = array_map('stripslashes', $_POST['interest']);

然后,您可以使用implode加入值:

$selectedChkbx = implode(',', $checkboxes);

如果您的stripslashes代码要恢复Magic Quotes的效果,最好尝试disable them

答案 1 :(得分:2)

只是摆脱了这个无用的striplashes功能

我只用一行就可以了:

$selectedChkbx = implode(", ",$_POST['interest']);

答案 2 :(得分:0)

你有这个:$checkboxes = stripslashes($_POST['interest']);

stripslashes函数会将数组$ _POST ['interest']转换为空字符串。

相反,你应该只是:

foreach ($_POST['interest'] as $value) {
    $selectedChkbx .= stripslashes($value) . ", ";
}

此外,不推荐使用魔术引号。建议您将其关闭。

答案 3 :(得分:0)

使用以下方法将其转换为字符串:

$checkboxes = stripslashes($_POST['interest']);

我敢打赌它会将名为“Array”的值指定为字符串。如果要从整个数组中删除斜杠,请使用array_filter()。但是,在服务器上禁用magic_quotes会更明智,因此您不必strip_slashes

$checkboxes = array_filter($_POST['interest'], 'stripslashes');

我强烈建议你研究一下神奇的报价问题并将问题解决到核心。

答案 4 :(得分:0)

Stripslashes会将返回值强制转换为字符串。在这里回答的人仍然没有“花花公子只是摆脱striplashes”或“去禁用魔法引言!!”的奢侈品。

如果您或您的朋友需要使用striplashes并且出于某种原因使用魔术引号(可能是共享主机),那么应该为数组包装stripslashes函数。

例如:

function myStripper($value) {
    if(is_array($value)) {
        foreach($value as $newValue) {
            return myStripper($newValue);
        }
    } else {
        return stripslashes($value);
    }
}

$checkboxes = myStripper($_POST['interest']);

//process the checkboxes
foreach ($checkboxes as $value) {
    $selectedChkbx .= $value . ", ";
}

应该做的伎俩并递归剥离你的变量。

http://uk3.php.net/manual/en/function.stripslashes.php

答案 5 :(得分:-1)

的stripslashes($ _ POST [ '兴趣']);

stripslashes对数组不起作用!

这样做:

$checkboxes = $_POST['interest'];

//process the checkboxes
foreach ($checkboxes as $value) {
    $selectedChkbx .= stripslashes($value) . ", ";
}

回答你的意见:

$array = array('zero', array('one', array('two', 'three', 'four'), 'five'), 'six', 'seven', array('eight'));

echo r_implode(", ", stripslashes_deep($array));

# code from http://ch.php.net/manual/en/function.stripslashes.php
function stripslashes_deep($value)
{
    $value = is_array($value) ?
                array_map('stripslashes_deep', $value) :
                stripslashes($value);

    return $value;
}


# code from http://php.net/manual/en/function.implode.php
function r_implode( $glue, $pieces )
{
  foreach( $pieces as $r_pieces )
  {
    if( is_array( $r_pieces ) )
    {
      $retVal[] = r_implode( $glue, $r_pieces );
    }
    else
    {
      $retVal[] = $r_pieces;
    }
  }
  return implode( $glue, $retVal );
} 

这会给你:

zero, one, two, three, four, five, six, seven, eight

修改 将个人递归功能替换为更优雅的功能;)