JSfiddle:http://jsfiddle.net/ybZvv/57/
我在这里有一个小提琴,用户可以在其中添加行并为每行选择答案。要使用小提琴,请按照以下步骤操作:
现在我要做的是,对于每一行中的每个答案,它们将包含它自己的“AnswerId”,答案将被插入“答案”表中的“答案”栏。
以下是jsfiddle答案后的表格:
答案表
AnswerId (auto) Answer
5 AB
6 ACE
我在上表中遇到的唯一问题是它没有在“答案”栏中插入答案。
然后我想从“问题”表中的“答案”表中存储“AnswerId”。因此,我添加了2行,“QuestionId”为1和2,以下是“问题”表的外观:
问题表
QuestionId AnswerId
1 5
2 6
上表工作正常。
以下是我收到的错误:
我的问题是,通过查看下面的代码,如何解决上述错误,以便能够在“答案”栏下插入答案?
下面是php / mysqli代码(我已经评论了发生错误的行):
$i = 0;
$c = count($_POST['gridValues']); //Counts each appended row which works
for($i = 0; $i < $c; $i++ ){
$selected_answer = $_POST['value'];
$answersql = "INSERT INTO Answer (Answer)
VALUES (?)";
if (!$insertanswer = $mysqli->prepare($answersql)) {
// Handle errors with prepare operation here
}
$insertanswer->bind_param("s", $selected_answer);
$insertanswer->execute();
if ($insertanswer->errno) {
// Handle query error here
}
$insertanswer->close();
$lastID = $mysqli->insert_id;
$questionsql = "INSERT INTO Question (QuestionId, AnswerId)
VALUES (?, ?)";
if (!$insert = $mysqli->prepare($questionsql)) {
// Handle errors with prepare operation here
}
$insert->bind_param("ii", $_POST['numQuestion'][$i], $lastID);
$insert->execute();
if ($insert->errno) {
// Handle query error here
}
$insert->close();
}
?>
以下是成功为每行添加问题编号的代码:
var qnum = 1;
var $qid = $("<td class='qid'></td>").text(qnum);
$('.num_questions').each( function() {
var $this = $(this);
var $questionNumber = $("<input type='hidden' class='num_questionsRow'>").attr('name',$this.attr('name')+"[]")
.attr('value',$this.val());
$qid.append($questionNumber);
++qnum;
$(".questionNum").text(qnum);
$(".num_questions").val(qnum);
$tr.append($qid);
答案 0 :(得分:1)
你正在把这些值当作一个数组发布而不是,var_dump out $ _POST值来看看它实际返回的是什么。
对于记录,该代码绝对是一团糟。我不是想在这里说法,但你的JS允许对同一个问题的多个答案。 PHP中的选择完全是浪费,整个部分可以替换为:
$selected_answer = $_POST['value'];
您正在运行一个选择以将变量设置为post值...
答案 1 :(得分:1)
我在客户端和服务器端都看到了问题。我将首先解决客户端问题。
您创建的输入字段的格式为:value[answerXRow]
,其中X
是选定的答案字符。如果用户在多个答案中选择相同的字符,则会有多个具有相同名称的输入字段(例如,根据您的说明,两个value[answerARow]
字段)。此外,您的PHP代码无法区分哪个value
针对哪个问题,因为它们都将在同一个value
数组中提交。
我的建议是使用这种格式的多维数组:value[n][]
,其中n
是问题编号。使用这个新设置,您应该得到以下输入字段:
<input type="hidden" value="A" name="value[1][]">
<input type="hidden" value="B" name="value[1][]">
<input type="hidden" value="A" name="value[2][]">
<input type="hidden" value="C" name="value[2][]">
<input type="hidden" value="E" name="value[2][]">
请注意,所选值在value
属性中进行编码。 name
属性仅包含值所属的问题。
现在,在服务器端,您需要遍历$_POST['value']
数组:
// $questionNumber is simply n in value[n][]
// $answers is an array of value attributes from <input>s for this question
foreach ($_POST['value'] as $questionNumber => $answers) {
// combine all the answers into a single string (e.g. ACE)
$selected_answer = implode('', $answers);
// continue onto inserting rows into the Answer and Questions tables
// ...
}