如何将复选框中的值插入MySQL?

时间:2011-06-05 15:35:56

标签: php mysql checkbox

的MySQL

`field1` tinyint(1) NOT NULL default '1',
`field2` tinyint(1) NOT NULL default '1',
`field3` tinyint(1) NOT NULL default '1',
`field4` tinyint(1) NOT NULL default '1',
`field5` tinyint(1) NOT NULL default '1',

HTML

<form method="post">
<input type="hidden" name="blah" value="blah">

<input type="checkbox" name="field1" value="1">
<input type="checkbox" name="field2" value="1">
<input type="checkbox" name="field3" value="1">
<input type="checkbox" name="field4" value="1">
<input type="checkbox" name="field5" value="1">

<button type="submit">Submit</button>

</form>

PHP

mysql_query("UPDATE `table` SET `field1` = '$_POST[field1]', .......");

所以,我想做的是:

a)如果选中该复选框,我想用1

更新相应的字段

b)如果取消选中该复选框,我想用0

更新字段

现在,请告诉我,我不必这样做,并且有更好的方法:

$field1 = isset($_POST['field1']) ? 1 : 0;
$field2 = isset($_POST['field2']) ? 1 : 0;
$field3 = isset($_POST['field3']) ? 1 : 0;
$field4 = isset($_POST['field4']) ? 1 : 0;
$field5 = isset($_POST['field5']) ? 1 : 0;

mysql_query("UPDATE `table` SET `field1` = '$field1', `field2` = '$field2' ....");

7 个答案:

答案 0 :(得分:3)

您可以使用field[]

<input type="checkbox" name="field[0]" value="1">
<input type="checkbox" name="field[1]" value="1">

所以你可以做一个简单的循环:

for($i=0;$i<5;$i++)
   $field[$i] = isset($_POST['field'][$i]) ? 1 : 0;

然后构建你的SQL

如果您想跳过isset部件,可以使用收音机类型,因此您始终可以设置1值或0值。

答案 1 :(得分:2)

你有一个SQL注入漏洞:

enter image description here 编码恐怖

mysql_query("UPDATE `table` SET `field1` = '$_POST[field1]', .......");

将其更改为:

$field1 = mysql_real_escape_string('$_POST[field1]');
....
mysql_query("UPDATE `table` SET `field1` = '$field1', .......");
/*                                         ^       ^ these quotes are vital */

不要忘记在查询中的$ vars周围添加单引号。

答案 2 :(得分:1)

您可以在每个复选框之前隐藏输入,例如

<input type="hidden" name="field1" value="0">
<input type="checkbox" name="field1" value="1">
<input type="hidden" name="field2" value="0">
<input type="checkbox" name="field2" value="1">

这样,当未选中复选框时,将发送之前的值(由隐藏输入提供),因此您将收到0未选中复选框。

但是,在将其插入SQL查询之前,您仍然需要在PHP中过滤/验证/清理输入数据(作为一个最不利的示例,假设我使用Firebug将复选框更改为value="2"然后提交了形式)

答案 3 :(得分:0)

不幸的是没有别的办法。

您必须检查该值并将1或0分配给查询中用于传递复选框响应的var。

这是因为如果取消选中该复选框PHP $_POST var不包含该复选框作为变量

答案 4 :(得分:0)

如果未选中复选框,则不会随表单一起发送,因此您在$ _POST数组中没有它。

你可以使用一个隐藏的输入和一个小的javascript,但如果你使用PHP部分它的代码就少了。

答案 5 :(得分:0)

我认为你想要的是避免编写如此多的代码行来检查复选框的值 也许你可以试试这个(我还没试过):

$field = 'field';

for(int i=1; i<=5, ++i){
    $($field.1) = isset($_POST['field'.i]) ? 1 : 0;

}

答案 6 :(得分:0)

我认为这就是SET类型存在的原因。

<input type="checkbox" name="field[0]" value="3">
<input type="checkbox" name="field[1]" value="1">
<input type="checkbox" name="field[2]" value="2">

然后内爆:

$insert = implode(",",$_POST['field']); // 1,2,3