JSfiddle: http://jsfiddle.net/ybZvv/57/
ここには、ユーザーが行を追加して各行の回答を選択できるフィドルがあります。フィドルを使用するには、次の手順に従ってください。
- フィドルを開いたときに、[質問を追加] ボタンを 2 回クリックします。これにより、下に 2 つの行が追加されます。
- 最初の行の選択ボタン A と B では、これらのボタンが緑色に変わり、選択したボタンのテキスト入力値が下に表示されます。
- 2 行目の選択ボタン A、C、および E では、これらのボタンが緑色に変わり、選択したボタンのテキスト入力値が下に表示されます。
ここでやりたいことは、各行の各回答に対して、独自の「AnswerId」が含まれ、回答が「回答」テーブルの「回答」列に挿入されることです。
以下は、jsfiddle の回答に従ってテーブルがどのように見えるかです。
回答表
AnswerId (auto) Answer
5 AB
6 ACE
上記の表で得られる唯一の問題は、「回答」列の下に回答が挿入されていないことです。
次に、「Answer」テーブルの「AnswerId」を「Question」テーブルに格納します。したがって、2 つの行を追加したため、「QuestionId」は 1 と 2 であり、「Question」テーブルは次のようになります。
質問表
QuestionId AnswerId
1 5
2 6
上記の表は正常に動作しています。
以下は私が受け取っているエラーです:
- Notice: 未定義のオフセット: /web/stud/QandATable3.php の 172 行目で 0
私の質問は、以下のコードを見て、「回答」列の下に回答を挿入できるように上記のエラーをどのように修正できるかということです。
以下は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);