2

areas[]我已经搜索了论坛 - 在这里和其他地方 - 试图找到一种方法从 POST 表单中打印出选中的选项,该表单使用名称为VALUE 开始的复选框组1并继续另外 6 个选项。因此,在每种情况下,NAME 都是areas[]但 VALUE 从 1 变为 6。

(此表格中的所有其他条目 - 例如姓名、电话号码等 - 都可以毫无问题地结转。)

充其量,当我尝试时(举一个我尝试过的例子)

$arr = $_POST[areas] 

然后尝试为每个数组,打印单词“Array”。伟大的。

如果我尝试 $_POST['areas'],我会收到服务器错误。我在论坛上发现的很多东西都会导致服务器错误。

我已经尝试了所有明显的东西 - 循环for而不是for each... 充其量我得到Array或者,更奇怪的是,A. 我总是在测试中选择 3 个选项。

我正在使用 PHP 5.3.8。

任何人都可以提出一些可能有用的东西吗?

4

2 回答 2

2

如果其值在 $_POST['areas'] 中,则必须检查显示的每个复选框:

$areas = $_POST['areas']; // if you get an error here, check your code cause it must work
//Some code...
$checked = '';
if (in_array($value, $areas)){
    $checked = 'checked="CHECKED"';
}
echo '<input type="checkbox" name="areas[]" '.$checked.' value="'.$value.'"/>';
于 2013-03-20T12:42:51.840 回答
2

您的问题很可能与 html 返回复选框值的方式有关。

如果一个复选框被签入,它的值被返回,如果它没有被签入,则不返回任何值。

在一种情况下,您将从称为name='colours[]'您的值的复选框中选择颜色,如下所示:(第一行是选择,第二行是 php 中返回的数组)

[x] red  [ ] green  [ ] blue  [x] yellow  [ ] black  [ ] white

    array('red','yellow')

[ ] red  [ ] green  [ ] blue  [x] yellow  [ ] black  [x] white

    array('yellow','white')

[ ] red  [ ] green  [ ] blue  [ ] yellow  [ ] black  [ ] white

    null (no array returned)

一种方法是为每个选项使用不同的名称,并以这种样式检查您的值:

$red = isset($_POST['ck_red']);
$green = isset($_POST['ck_green']);
...

当然,如果您将红色复选框定义为name='ck_red'等。

编辑
(您的代码如下)

html:

<INPUT TYPE="CHECKBOX" NAME="areas[]" VALUE="1">The Homeless</INPUT><BR />
<INPUT TYPE="CHECKBOX" NAME="areas[]" VALUE="2">The Elderly</INPUT><BR />
<INPUT TYPE="CHECKBOX" NAME="areas[]" VALUE="3">Refugees</INPUT><BR />
<INPUT TYPE="CHECKBOX" NAME="areas[]" VALUE="4">The handicapped</INPUT><BR /> 

php:

$areas[] = "$_POST[areas]"; 
foreach ($areas as $value) { 
    echo $value . " "; 
} 

答案:你有一个错误是在分配中$areas[] = "$_POST[areas]";,即在使用"周围$_POST[areas]- 通过这样做你告诉解析器你想知道变量 $_POST[areas] 的文本值,它是一个数组和 php 的方式处理它是返回 TEXT 'array'而不是(例如在 javascript 中)由逗号分隔的元素列表。另一个错误是,尽管它可以按您的方式工作,但您引用的是未定义的常量areas而不是字符串文字'areas'$_POST['areas']请注意键名周围的单引号'。最后一个错误是分配$_POST['areas']to$areas[]而不是$areas(没有[])。你在那里做的是你正在将数组的一个新元素添加到你要为其分配值的数组(区域),$_POST['areas']以防万一它没有第一个错误(")它会创建二维数组areas => array(array('a','b','c'))

修复(PHP):

$areas = $_POST['areas'];
foreach ($areas as $value) { 
    echo $value . " "; 
} 
于 2013-03-20T12:43:09.937 回答