复选框问题,无法让数组在表单提交时保持CHECKED状态

时间:2014-07-15 19:54:22

标签: php checkbox

过去3个小时我一直试图解决这个问题而且我已经接近了,但是我的经验不足。我已经尝试了所有可以想到的排列。

我有一个带复选框的表单。这些值是从mysql中检索的。表单正在提交到同一页面。 You can view it live here。输入“Axminster”进行搜索。

原始复选框代码如下:

<?php
$categories_list = split('[
]', get_setting('categories', $db));
foreach ($categories_list AS $cat)
{
$cat = trim($cat);
echo "<input type=\"checkbox\"  name=\"categories[]\" value=\"" . $cat . "\">" . $cat .     "<br>";
}
?>

所以我然后提交表单,正常情况下我希望复选框选中的值保持选中状态。对于我表单中的下拉框,我使用了代码

<?php if($radius == $_POST['radius']) echo ' selected="selected"'; ?>

并且这很有效,但是我正在尝试使用以下代码来检查已选中的复选框,并且我没有运气:

<?php

$categories_list = split('[
]', get_setting('categories', $db));
foreach ($categories_list AS $cat)
{

$cat = trim($cat);
// I've added these two lines, and added " . $select . " to the input field.
foreach ($_POST['categories'] AS $category) {
if($cat == $category) { $select = "CHECKED"; } }
echo "<input type=\"checkbox\" " . $select . " name=\"categories[]\" value=\"" . $cat . "\">" . $cat . "<br>";
} 
?>

结果是第一个选中复选框后的每个复选框也被检查。例如,我有四个复选框,即使我只检查第二个复选框,第三个和第四个也在下一页上进行检查。

我现在完全迷失了。请任何人都可以帮忙。感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用

if(isset($_POST['categories']) && in_array($cat, $_POST['categories']))

您还需要重置每个循环上的$select,或使用else{},因为一旦使用foreach设置,值就不会更改,因此所有复选框都在选中也将被选中。

代码现在看起来像 -

<?php

$categories_list = split('[
]', get_setting('categories', $db));
foreach ($categories_list AS $cat)
{

$cat = trim($cat);
// I've added these two lines, and added " . $select . " to the input field.
if(isset($_POST['categories']) && in_array($cat, $_POST['categories'])) { $select = "CHECKED"; } 
else { $select = ''; }
echo "<input type=\"checkbox\" " . $select . " name=\"categories[]\" value=\"" . $cat . "\">" . $cat . "<br>";
} 
?>