如何将答案插入表格"Answer"



JSfiddle:http://jsfiddle.net/ybZvv/57/

我在这里有一个小提琴,用户可以附加行并为每行选择答案。要使用小提琴,请按照以下步骤操作:

  1. 打开小提琴时,单击"添加问题"按钮两次这将在下面追加两行
  2. 在第一行选择按钮A和B,这些按钮将变为绿色在下面,您将看到这些选定的文本输入值按钮
  3. 在第二行选择按钮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值。。。

最新更新