Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果选中复选框,则插入布尔值_Php_Mysql - Fatal编程技术网

Php 如果选中复选框,则插入布尔值

Php 如果选中复选框,则插入布尔值,php,mysql,Php,Mysql,我试图将表单中的值作为布尔类型输入数据库 基本上,每个问题都有许多复选框,如果用户选中该复选框,我希望它输入1为真,并且无论哪个未选中,都插入0 我曾试图让他们进来,但运气不好 请参阅下面的其他代码/片段 有人能帮忙吗 <h1>Question 1</h1><br> </br> <input type="checkbox" name="1" value="1">Item1 <input type="checkbox"

我试图将表单中的值作为布尔类型输入数据库

基本上,每个问题都有许多复选框,如果用户选中该复选框,我希望它输入1为真,并且无论哪个未选中,都插入0

我曾试图让他们进来,但运气不好

请参阅下面的其他代码/片段

有人能帮忙吗

  <h1>Question 1</h1><br>
   </br>
 <input type="checkbox" name="1" value="1">Item1
 <input type="checkbox" name="2" value="2">Item2
<input type="submit" name="submit" value="save" class="button-form">

如果未选中复选框,则不会发送该复选框。这意味着如果未选中,它将未设置为零

这是什么意思?这意味着您需要检查它是否已发送。如果是,则为1,如果不是,则为0

您要查找的代码如下所示:

$stmt->execute(array(
            ':UserID' =>$_POST['UserID'],
            ':B1' => isset($_POST['B1']) ? 1 : 0,
            ':B2' => isset($_POST['B2']) ? 1 : 0, 
            ':B2' => isset($_POST['B3']) ? 1 : 0,
            ':B2' => isset($_POST['B4']) ? 1 : 0,
            ':B2' => isset($_POST['B5']) ? 1 : 0,
            ':B2' => isset($_POST['B6']) ? 1 : 0
            ));

如果未选中复选框(请参阅“选中”-输入类型复选框的属性),则不会向服务器发送任何内容。
$\u POST['B1']
获取名为“B1”的元素的值(如果该元素被发送到服务器)

所以

我们应该做到这一点$如果复选框未选中,b1将为0;如果选中,b1将为1

选项1 SQL看起来像是要将01100之类的内容放入数据库字段“B2”中。 通常,您会将每个复选框的结果存储在单个数据库列中。但是,如果您真的想对它们进行编码,您的代码应该如下所示:

$stmt = $conn->prepare('INSERT INTO Results ($UserID, B1, B2 ) VALUES (:UserID, :B1, :B2, :B3, :B4, :B5, :B6);');
    $stmt->execute(array(
        ':UserID' =>$_POST['UserID'],
        ':B1' =>$_POST['B1'],
        ':B2' =>(isset($_POST['B2'])) ? 1 : 0 + (isset($_POST['B3'])) ? 1 : 0 + (isset($_POST['B4'])) ? 1 : 0 + (isset($_POST['B5'])) ? 1 : 0 + (isset($_POST['B6'])) ? 1 : 0
        ));
选项2 如果每个B1…B6值都有一个数据库字段,那么您忘记将这些列纳入SQL INSERT语句:

INSERT INTO Results ($UserID, B1, B2, B3, B4, B5, B6) [...]
您的stmt execute错误,应该是:

$stmt->execute(array(
        ':UserID' =>$_POST['UserID'],
        ':B1' => isset($_POST['B1']) ? 1 : 0,
        ':B2' => isset($_POST['B2']) ? 1 : 0, 
        ':B3' => isset($_POST['B3']) ? 1 : 0,
        ':B4' => isset($_POST['B4']) ? 1 : 0,
        ':B5' => isset($_POST['B5']) ? 1 : 0,
        ':B6' => isset($_POST['B6']) ? 1 : 0
        ));

如果您想要
1
,为什么要将值设置为与名称相同?请注意,未选中的复选框不会发送到服务器。B1是数据库中定义的名称,如果选中,我希望它的值为1?您可能希望使用array_key_exists()。谢谢。我已经把它放进去了,但是数据库的所有答案仍然是0?你的查询只插入3个值<代码>插入结果($UserID、B1、B2)。我看不出http头是什么,所以如果没有您的额外输入,就有点不可能进一步提供帮助..按照上面提到的注意事项执行:':B1'=>isset($\u POST['B1'])?1 : 0, ... 但是要小心——您的SQL还不完整。您只插入($UserID,B1,B2)。您还应该选择其他栏目。有没有更简单的方法:':B1'=>$\u POST['B1'],因为我可能有30个复选框,还是必须这样做?如果您可以提供更多关于您正在做什么的信息-选项1(将所有问题的0/1存储在一个数据库字段中)或选项2,答案会更简单(将每个0/1存储在单个数据库字段中)。选项2-将每个0/1存储在单个数据库字段中。
INSERT INTO Results ($UserID, B1, B2, B3, B4, B5, B6) [...]
$stmt->execute(array(
        ':UserID' =>$_POST['UserID'],
        ':B1' => isset($_POST['B1']) ? 1 : 0,
        ':B2' => isset($_POST['B2']) ? 1 : 0, 
        ':B3' => isset($_POST['B3']) ? 1 : 0,
        ':B4' => isset($_POST['B4']) ? 1 : 0,
        ':B5' => isset($_POST['B5']) ? 1 : 0,
        ':B6' => isset($_POST['B6']) ? 1 : 0
        ));