Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 复选框问题,可以';无法让数组在表单提交时保持检查状态_Php_Checkbox - Fatal编程技术网

Php 复选框问题,可以';无法让数组在表单提交时保持检查状态

Php 复选框问题,可以';无法让数组在表单提交时保持检查状态,php,checkbox,Php,Checkbox,在过去的3个小时里,我一直在努力解决这个问题,我已经接近了,但我的经验不足正在显现出来。我已经尝试了我能想到的所有排列 我有一张带复选框的表格。这些值是从mysql检索的。表单正在提交到同一页。键入“Axminster”进行搜索 原始复选框代码如下所示: <?php $categories_list = split('[ ]', get_setting('categories', $db)); foreach ($categories_list AS $cat) { $cat = trim

在过去的3个小时里,我一直在努力解决这个问题,我已经接近了,但我的经验不足正在显现出来。我已经尝试了我能想到的所有排列

我有一张带复选框的表格。这些值是从mysql检索的。表单正在提交到同一页。键入“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>";
} 
?>
您可以使用

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>";
} 
?>

我有点不清楚你真正的问题是什么。你能详细说明一下预期的行为和收到的行为吗?正如它所描述的,我正试图发布一个表单,以便在下一页记住复选框值。然而,它不工作,因为更多的复选框被选中比被选中。哈哈。。。我认为我看错了你的问题,删除了我的解决方案:p无论如何,你应该重新初始化你在循环中使用的变量,否则它们将把它们的值带到下一个迭代中。工作得很好,非常感谢Sean。多有才华啊!