JSfiddle:http://jsfiddle.net/ybZvv/57/
我在这里有一个小提琴,用户可以附加行并为每行选择答案。要使用小提琴,请按照以下步骤操作:
- 打开小提琴时,单击"添加问题"按钮两次这将在下面追加两行
- 在第一行选择按钮A和B,这些按钮将变为绿色在下面,您将看到这些选定的文本输入值按钮
- 在第二行选择按钮A、C和E,这些按钮将转动绿色,下面是这些的文本输入值所选按钮
现在我想做的是,对于每一行中的每个答案,它们都将包含自己的"AnswerId",答案将插入"answer"表的"Anwer"列中。
以下是jsfiddle回答后的表格:
应答表
AnswerId (auto) Answer
5 AB
6 ACE
我在上表中遇到的唯一问题是,它没有在"答案"列中插入答案。
然后我想将"Answer"表中的"AnswerId"存储在"Question"表中。因此,我添加了2行,"QuestionId"是1和2,下面是"Question"表的样子:
问题表
QuestionId AnswerId
1 5
2 6
上表工作正常。
以下是我收到的错误:
- 注意:未定义的偏移量:第172行的/web/stro/KandATable3.php中为0
我的问题是,通过查看下面的代码,如何修复上述错误,以便能够在"answer"列下插入答案?
下面是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);
我在客户端和服务器端都看到了问题。我将首先解决客户端问题。
您创建的输入字段的名称格式为: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
// ...
}
您将这些值作为数组发布,但它们不会是,var_dump出$_POST值,看看它实际返回了什么。
记录在案,那段代码简直一团糟。我在这里并不想刻薄,但你的JS允许对同一个问题有多个答案。PHP中的选择完全是浪费,整个部分可以用代替
$selected_answer = $_POST['value'];
您正在运行一个select以将变量设置为post值。。。