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

时间:2010-12-19 17:57:44

标签: php mysql checkbox

您好我正在尝试使用复选框构建一个表单,在提交表单时,我想查看检查了哪些复选框并相应地更新数据库。这是怎么做到的?我尝试了很多不同的代码,但没有一个能够工作。我最接近的是只更新已检查的。我还需要更新数据库,如果它们未被选中,就像切换一样。

到目前为止,我的代码对于表单

是这样的
<form action="" method="post">
<input type=checkbox" value="<?php echo member['id']; ?>" name="member[]" />
<input type="submit" name="update" value="Update" />
</form>

对于我有的PHP循环(摘录)

foreach ((array)$_POST['test'] as $member) :
$sql = "UPDATE `sp_members` SET `allow_test` = '1' WHERE `id` = '$member'";

由于我认为循环只选中了经过检查的复选框,因此它不会选择那些经过检查并且现在未经检查的复选框......

任何帮助表示赞赏!

5 个答案:

答案 0 :(得分:0)

只需更新所有内容,而不是试图找出改变的内容 - 如果您自己编程,则必须使代码更加复杂,并且由于数据库已针对速度进行了优化,因此最好将其填入DB让它处理它。

答案 1 :(得分:0)

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

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

它检查$ _REQUEST ['checkbox']是否为非null非零字符串,如果为true,则返回1,如果为false,则返回0.

答案 2 :(得分:0)

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

答案 3 :(得分:0)

之所以没有工作(并且不会在已经提供的答案中),是因为$ _POST / $ _ REQUEST数组中不存在未选中的复选框。另一方面,如果它们存在,它们必须是真的。

当您进行检查以查看值是什么时,您将导致错误,因为数组的键不存在。

相反,您需要知道可用的复选框,然后检查数组中的每个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>

PHP:

$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'";
}

答案 4 :(得分:0)

当遇到这种情况时,我通常会依靠交易来为我更新这些东西。正如您所发现的那样,未经检查的复选框将不会随表单一起提交,因此您必须进行繁琐的比较,以确定每次更改的内容并构建适当的更新和/或删除查询序列。

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