我搜索了论坛——在这里和其他地方——试图找到一种方法,从POST表单中打印出选中的选项,该表单使用名为areas[]
的复选框组,其中VALUE从1
开始,然后再打印另外6个选项。因此,在每种情况下,NAME都是areas[]
,但VALUE从1到6。
(此表格中的所有其他条目,如姓名、电话号码等,都会顺利结转。(
充其量,当我尝试(举一个我尝试过的例子(时
$arr = $_POST[areas]
然后尝试为数组上的每个数组打印单词"array"。太棒了
如果我尝试$_POST['areas']
我收到一个服务器错误。我在论坛上发现的很多事情都会导致服务器错误。
我已经尝试了所有显而易见的事情——用for
而不是for each
循环。。。我最多得到Array
,或者更奇怪的是,A
。我在测试中总是选择3个选项。
我使用的是PHP 5.3.8。
有人能提出一些可行的建议吗?
如果显示的每个复选框的值在$_POST[‘reas’]:中,则必须对其进行检查
$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.'"/>';
您的问题很可能与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中(由coma分隔的元素列表。另一个错误是,尽管它可以正常工作,但您正在引用未定义的常量areas
,而不是像$_POST['areas']
中那样引用字符串文字'areas'
(注意密钥名称周围的单引号'
(。最后一个错误将$_POST['areas']
分配给$areas[]
,而不是$areas
(没有[]
(。您在那里所做的是将数组的一个新元素添加到数组(区域(中,为其分配$_POST['areas']
的值,因此如果没有第一个错误("
(,它将创建二维数组areas => array(array('a','b','c'))
修复(php(:
$areas = $_POST['areas'];
foreach ($areas as $value) {
echo $value . " ";
}