有多个复选框,大约50+用于用户访问,复选框如下;
<input name="PREFIX_1" type="checkbox">
<input name="PREFIX_2" type="checkbox">
<input name="PREFIX_3" type="checkbox">
...........
我有多个复选框及其各自的值,我循环以添加/更新数据库中的值,如下所示:
foreach ($_POST as $field => $value ) {
if ( preg_match('/^PREFIX_/', $field) ) {
$access = isset($value)?'1':'0';
$file = substr($field, 4);
$this->db->query('UPDATE_DESIRED_TABLE');
}
}
问题是当我使用循环foreach ($_POST as $field => $value )
添加/更新数据库中的值并检查前缀时,我只获取已选中的复选框值以及未检查的数据值不在$_POST
数据。
并且,我没有得到任何未经检查的值,这甚至不是该复选框的名称。换句话说,只设置那些被检查的值。
现在我必须通过比较数据库中的数据和发布数据来更改数据库中所有数据的值。
我该如何解决这个问题?
答案 0 :(得分:1)
您需要发送隐藏的输入以及如下所示的复选框:
<form action="" method="post">
<input type="hidden" id="PREFIX_1_" name="PREFIX_1" value="0">
<input type="checkbox" id="PREFIX_1" name="PREFIX_1" value="1" />
<input type="hidden" id="PREFIX_2_" name="PREFIX_2" value="0">
<input type="checkbox" id="PREFIX_2" name="PREFIX_2" value="1" />
<input type="hidden" id="PREFIX_3_" name="PREFIX_3" value="0">
<input type="checkbox" id="PREFIX_3" name="PREFIX_3" value="1" />
<input type="submit" name="sub" value="Go" />
</form>
但是你不能再使用isset
了,改变这样的PHP:
if(isset($_POST['sub']))
{
foreach ($_POST as $field => $value )
{
if ( preg_match('/^PREFIX_/', $field) )
{
$access = $value;
$file = substr($field, 4);
$this->db->query('UPDATE_DESIRED_TABLE');
}
}
}
答案 1 :(得分:0)
考虑到您知道$checkBoxCount
中示例中存储的复选框的数量,您可以使用这种循环:
for ($i = 1; $i <= $checkBoxCount; $i++)
{
$access = ((isset($_POST["PREFIX_" . $i])) ? ('1') : ('0')));
//manage DB
}