首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复选框插入到MySql数据库中

问复选框插入到MySql数据库中
EN

Stack Overflow用户
提问于 2010-09-30 22:26:39
回答 4查看 1.4K关注 0票数 1

我有一个调查类型的表单,在许多问题中,用户可以选择勾选多个框。

我将这些答案存储在mysql数据库中,但是目前,数据库只存储最后一个被勾选的复选框。有没有办法存储所有检查的值,可以用逗号或分号分隔?

下面是我的代码:

代码语言:javascript
复制
        $q1 = mysql_escape_string($_POST['q1']);
        $q2 = mysql_escape_string($_POST['q2']);
        $q3 = mysql_escape_string($_POST['q3']);            
        $q4 = mysql_escape_string($_POST['q4']);
        $q5 = mysql_escape_string($_POST['q5']);            
        $q6 = mysql_escape_string($_POST['q6']);
        $q7 = mysql_escape_string($_POST['q7']);
        $q8 = mysql_escape_string($_POST['q8']);
        $q9 = mysql_escape_string($_POST['q9']);
        $q10 = mysql_escape_string($_POST['q10']);
        $q11 = mysql_escape_string($_POST['q11']);
        $q12 = mysql_escape_string($_POST['q12']);
        $q13 = mysql_escape_string($_POST['q13']);
        $q14 = mysql_escape_string($_POST['q14']);
        $email = mysql_escape_string($_POST['email']);

        require_once('connection.php');

        $sql="INSERT INTO survey (Question1, Question2, Question3, Question4, Question5, Question6, Question7, Question8, Question9, Question10, Question11, Question12, Question13, Question14, eMail) VALUES ('$q1', '$q2', '$q3', '$q4', '$q5', '$q6', '$q7', '$q8', '$q9', '$q10', '$q11', '$q12', '$q13', '$q14', '$email')";

        if (!mysql_query($sql,$conn))
          {
      die('Error: ' . mysql_error());
          }

          mysql_close($conn);
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-30 22:31:28

首先,mysql_escape_string是折旧的--你应该使用mysql_real_escape_string。

其次,这将允许任何恶意的人在结果中插入不同的值,例如2和3。您需要使每个值都符合0或1。要做到这一点,我建议您先强制转换为布尔值,然后再转换为int:

代码语言:javascript
复制
$q1 = (int)((bool)$_POST['q1']);
$q2 = (int)((bool)$_POST['q2']);
...

对于HTML,每个复选框都需要一个值属性“1”。

因为它们只是整数,所以没有必要对它们进行转义。

票数 3
EN

Stack Overflow用户

发布于 2010-09-30 22:32:28

如果未选中该复选框,则不会将其发送到下一页。我相信$_POST‘’email‘是一个文本字段,如果它是一个完整的字段,那么它就不会被发送。

相反,试着像这样做:

代码语言:javascript
复制
$sql="INSERT INTO survey (Question1, Question2, Question3, Question4, Question5, Question6, Question7, Question8, Question9, Question10, Question11, Question12, Question13, Question14, eMail) VALUES (";

if ($_POST['q1'] == 'On') $sql .= "1, "; else $sql .= "0, ";

if ($_POST['q2'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q3'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q4'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q5'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q6'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q7'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q8'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q9'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q10'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q11'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q12'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q13'] == 'On') $sql .= "1, "; else $sql .= "0, ";
if ($_POST['q14'] == 'On') $sql .= "1, "; else $sql .= "0, ";

$sql .= mysql_escape_string($_POST['email']) . ')';

        require_once('connection.php');

        if (!mysql_query($sql,$conn))
          {
      die('Error: ' . mysql_error());
          }

          mysql_close($conn);
票数 0
EN

Stack Overflow用户

发布于 2010-09-30 22:36:58

目前,数据库只存储勾选的最后一个复选框。

这听起来可能是输入字段名称中的名称冲突。检查您的输入字段是否唯一命名。

有没有办法存储所有的校验值,可以用逗号或分号分隔?

每个问题似乎都有单独的数据库列:为什么要用逗号或分号连接它们?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3831522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档