对于用户访问,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
数据中。
而且,我没有得到任何不被选中的值,这甚至不是那个复选框的名称。换句话说,只设置这些值,并对其进行检查。
现在,我必须通过比较数据库中的数据和post数据来更改数据库中所有数据的值。
我怎么才能解决这个问题?
发布于 2017-08-24 07:59:44
您需要发送隐藏的输入以及下面这样的复选框:
<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');
}
}
}
发布于 2017-08-22 03:29:00
考虑到您知道复选框的数量(例如存储在$checkBoxCount
中),您可以使用这样的循环:
for ($i = 1; $i <= $checkBoxCount; $i++)
{
$access = ((isset($_POST["PREFIX_" . $i])) ? ('1') : ('0')));
//manage DB
}
https://stackoverflow.com/questions/45816166
复制相似问题