1

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

我将这些答案存储在 mysql 数据库中,但是目前,数据库仅存储最后一个选中的复选框。无论如何存储所有检查的值,可能用逗号或分号分隔?

这是我的代码:

        $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);
4

4 回答 4

3

首先,mysql_escape_string 已被贬值——你应该使用 mysql_real_escape_string。

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

$q1 = (int)((bool)$_POST['q1']);
$q2 = (int)((bool)$_POST['q2']);
...

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

由于这些只是整数,因此无需转义它们。

于 2010-09-30T14:31:28.493 回答
0

at the moment, the database only stores the very last checkbox that is ticked.

This sounds like it could be a name collision in your input field names. Check that your input fields are named uniquely.

Is there anyway to store all the checked values, possible separated by a coma, or semi-colon?

You seem to have separate database columns for each question: why would you want to join them with commas or semicolons?

于 2010-09-30T14:36:57.810 回答
0

如果未选中复选框,则不会发送到下一页。我相信 $_POST['email'] 是一个文本字段,如果它是全字段的,它会被发送。
相反,尝试这样的事情:

$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);
于 2010-09-30T14:32:27.873 回答
0

您是否检查过您的 html 复选框元素的名称?属于某个问题(例如:1)的所有复选框元素的名称应类似于:'question1[]'。这样,所有值都将通过 $_POST 作为数组返回。

例如,$_POST["question1"] 现在是一个包含检查值的数组。

编辑 -

好的,我刚刚注意到每个问题都有一个复选框,所以这不会导致问题。

于 2010-09-30T15:09:45.830 回答