使用php和db更新处理表单提交中的复选框


handling checkboxes in form submission with php and db updates

我在表单中使用复选框来允许用户打开/关闭某些设置。我通过从数据库返回的值中提供正确的"state"来加载表单。然后,他们可以更改这些内容,并将表单提交到进行处理的位置。实例

<input type="checkbox" name="settings[something]" '.($settings[one] == 1 ? 'value="1" checked' : 'unchecked').'/>
<input type="checkbox" name="settings[somethingelse]" '.($settings[one] == 1 ? 'value="1" checked' : 'unchecked').'/>
... and so on...

在接收端,我似乎无法想出一个好的解决方案来处理这些问题。

如果其中任何一个未选中,则该值甚至不会发送。如果选中,则值为"1"。

所以,除了做一些类似的事情:

$something = $_POST['settings'][something']
$somethingelse = $_POST['settings'][somethingelse']
... and so on
if (!$something == 1)
{
    $something = null;
}
... and so on

对于我期望的每个值。。。有没有更简单的方法让我在这里失踪?我必须检查每个值是否已发送,因为我还包括一个选项,可以将这些值设置为数据库中多行的默认值,而不仅仅是它们正在编辑的行。

编辑:

我花了一些时间思考这个问题。在我的数据库中,我将这些值存储为1或0。与其检查它们是否被张贴(设置)在表格的接收端,我要检查它们是否是!=至1。我可以向下运行值列表,所有不等于1的值都设置为0。这样,我就有了数据库中要更新的所有值的完整列表,并且在将数据插入数据库(1或0)之前,我正在验证数据的完整性。

我现在正试图想出一种更快的方法来浏览我的"列表"进行检查,而不是对每个列表都使用if语句。去玩一些数组,看看我能想出什么。

复选框有点特殊,因为当它们没有被选中时,它们不会被发送到服务器。

因此,检查复选框的最佳方法不是根据其值,而是简单地检查是否设置了:

if (isset($_POST['settings']['something']))
{
  // Do what you need to do
}
else
{
  // The checkbox was not on the form (you should know that already) OR unchecked
}