我有一个调查类型表单,在一些问题中,用户可以选择勾选多个框。
我将这些答案存储在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);
答案 0 :(得分: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”。
由于这些只是整数,因此无需转义它们。
答案 1 :(得分: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);
答案 2 :(得分:0)
目前,数据库只存储勾选的最后一个复选框。
这听起来可能是输入字段名称中的名称冲突。检查输入字段是否唯一命名。
无论如何都存储所有检查的值,可能是用昏迷或分号分隔的吗?
您似乎为每个问题都有单独的数据库列:您为什么要用逗号或分号加入它们?
答案 3 :(得分:0)
您是否检查了html复选框元素的名称? 属于某个问题(例如:1)的所有复选框元素应具有如下名称:'question1 []'。这样,所有值都将通过$ _POST作为数组返回。
例如,$ _POST [“question1”]现在是一个包含已检查值的数组。
编辑 -
好的,我刚注意到每个问题都有一个复选框,所以这不会导致问题。