过去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>";
}
?>
结果是第一个选中复选框后的每个复选框也被检查。例如,我有四个复选框,即使我只检查第二个复选框,第三个和第四个也在下一页上进行检查。
我现在完全迷失了。请任何人都可以帮忙。感谢。
答案 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>";
}
?>