Php 如何使用与数据库相关的复选框?

Php 如何使用与数据库相关的复选框?,php,mysql,checkbox,Php,Mysql,Checkbox,嗨,我正在尝试建立一个带有复选框的表单,在提交表单时,我想查看选中了哪些复选框,并相应地更新数据库。这是怎么做到的?我试过很多不同的代码,但都不管用。我得到的最接近的结果是只更新选中的。我还需要更新数据库,如果他们被取消选中,以及像一个切换 到目前为止,我的表单代码是这样的 <form action="" method="post"> <input type=checkbox" value="<?php echo member['id']; ?>" name="me

嗨,我正在尝试建立一个带有复选框的表单,在提交表单时,我想查看选中了哪些复选框,并相应地更新数据库。这是怎么做到的?我试过很多不同的代码,但都不管用。我得到的最接近的结果是只更新选中的。我还需要更新数据库,如果他们被取消选中,以及像一个切换

到目前为止,我的表单代码是这样的

<form action="" method="post">
<input type=checkbox" value="<?php echo member['id']; ?>" name="member[]" />
<input type="submit" name="update" value="Update" />
</form>
因为我认为循环只会选择选中的复选框,它不会选择最初选中的和现在未选中的复选框


感谢您的帮助

只需更新所有内容,而不是试图找出发生了什么变化-如果你自己编程,你将不得不使代码更加复杂,而且由于数据库已经针对速度进行了优化,最好只将其填充到数据库中,让它处理。

你可以使用三元运算符来设置正确的值

$sql = "UPDATE `sp_members` SET `allow_test` = '" 
     . ( $_REQUEST['checkbox'] ? 1 : 0 ) 
     . "' WHERE `id` = '" . mysql_real_escape_string( $member ) . "'";

它会检查$\u REQUEST['checkbox']是否为非空、非零字符串,如果为true,则返回1,如果为false,则返回0。

这一直不起作用(并且不会出现在已提供的答案中)的原因是$\u POST/$\u请求数组中不存在未选中的复选框。另一方面,如果它们确实存在,那么它们一定是真的

(($_post['member']) ?$allow_test = 1 : $allow_test = 0;
$sql = "UPDATE `sp_members` SET `allow_test` = $allow_test  WHERE `id` = '$member'";
当您执行检查以查看值是什么时,会导致错误,因为数组的键不存在

相反,您需要知道可用的复选框,然后检查数组中的每个
isset()

网络表单:

<form action="foo.php" method="post">
<input type="checkbox" value="<?php echo $value1; ?>" name="checkbox1" />
<input type="checkbox" value="<?php echo $value2; ?>" name="checkbox2" />
<input type="submit" name="update" value="Update" />
</form>

当遇到这种情况时,我通常会下注并依靠事务为我更新这些内容。正如您所发现的,未选中的复选框不会随表单一起提交,因此您必须进行冗长的比较,以找出每次更改的内容,并建立适当的更新和/或删除查询序列


相反,我启动一个事务,删除数据库中存储的所有旧复选框值,然后插入随此请求提交的新值。除非您在DB级别设置了充当外键和/或触发器的复选框,否则这是一个相对轻量级的选项,可以省去比较新旧列表进行更改的麻烦。

所以您基本上希望在任何情况下都对其进行更新吗?是的,如果选中,我想更新数据库,反之亦然。如果说我有1000条记录,那不是效率低下吗?你能把你的方法所需的代码发布出来吗?@Rick:我的解决方案是要么把旧数据隐藏在隐藏的输入中,要么让客户端只发送需要使用javascript的差异。你知道,过早优化是万恶之源。构建工作代码,识别瓶颈,然后仅优化这些瓶颈。它们可能出现在与您想象中非常不同的地方。我尝试了这种方法,它对checked有效。但它不允许我取消选中项…您的表结构是什么:sp_成员?&是realtion中复选框值的值提供实时性例如:1:在数据库中只保留选中的一个2:对于下一次更新,请从数据库中删除与该成员id和fire update查询相关的记录。3:根据结果决定保持选中或取消选中复选框如果是,为什么还需要更新数据库未选中bcoz您可以从数据中获取选中的复选框,并将其显示为选中状态,其余为未选中状态
<form action="foo.php" method="post">
<input type="checkbox" value="<?php echo $value1; ?>" name="checkbox1" />
<input type="checkbox" value="<?php echo $value2; ?>" name="checkbox2" />
<input type="submit" name="update" value="Update" />
</form>
$checkboxes = array(
    'column1' => 'checkbox1', 
    'column2' => 'checkbox2',
);

foreach ($checkboxes as $column => $checkbox)
{
    $value = (isset($_POST[$checkbox]) ? 1 : 0);
    $sql = "UPDATE `table` SET `$column` = '$value' WHERE `id` = '$member'";
}