的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' ....");
答案 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注入漏洞:
编码恐怖
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