次の形式の多次元配列を使用したいと思います:value [n] []、ここでnは質問番号です。この新しい設定では、次のチェックボックスフィールドが表示されます。
<input type="checkbox" value="A" name="value[1][]">
<input type="checkbox" value="B" name="value[1][]">
<input type="checkbox" value="A" name="value[2][]">
<input type="checkbox" value="C" name="value[2][]">
<input type="checkbox" value="E" name="value[2][]">
選択した値はvalue属性にエンコードされていることに注意してください。name属性には、値が属する質問のみが含まれます。
したがって、上記の入力が述べているのはこれです:
question 1: answer: A
question 1: answer: B
question 2: answer: A
question 2: answer: C
question 2: answer: E
これらの詳細を以下の「質問」および「回答」データベーステーブルに挿入したいと思います。
質問表:
SessionId QuestionId
MUL 1
MUL 2
回答表:
AnswerId (auto) SessionId QuestionId Answer
1 MUL 1 A
2 MUL 1 B
3 MUL 2 A
4 MUL 2 C
5 MUL 2 E
これらの値をデータベースに挿入するために、以下のmysqli / phpコードを書き込もうとしましたが、エラーが発生し、達成したいことを達成したくありませんでした。関連するテーブルに正しい値を正しく挿入できるようにするためのサポートが必要です。
以下はphp/mysqliコードです。
var_dump($_POST);
$i = 0;
$c = count($_POST['numQuestion']);
for($i = 0; $i < $c; $i++ ){
/*
switch ($_POST['gridValues'][$i]){
case "3":
$selected_option = "A-C";
break;
case "4":
$selected_option = "A-D";
break;
case "5":
$selected_option = "A-E";
break;
default:
$selected_option = "";
break;
}
*/ needed later on when I insert grid values
$results = $_POST['value'];
foreach($results as $id => $value) {
$answer = $value;
$questionsql = "INSERT INTO Question (SessionId, QuestionId)
VALUES (?, ?)";
$sessid = $_SESSION['id'] . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '');
if (!$insert = $mysqli->prepare($questionsql)) {
// Handle errors with prepare operation here
}
$insert->bind_param("si", $sessid, $id);
$insert->execute();
if ($insert->errno) {
// Handle query error here
}
$insert->close();
$insert->insert_id;
foreach($value as $answer) {
$answersql = "INSERT INTO Answer (SessionId, QuestionId, Answer)
VALUES (?, ?, ?)";
if (!$insertanswer = $mysqli->prepare($answersql)) {
// Handle errors with prepare operation here
}
$insertanswer->bind_param("sis" $sessid, $lastID, $answer);
$insertanswer->execute();
if ($insertanswer->errno) {
// Handle query error here
}
$insertanswer->close();
}
}
}
以下のvar_dump($_POST)
出力:
array(3) {
["numQuestion"]=> array(2) {
[0]=> string(1) "1"
[1]=> string(1) "2"
}
["submitDetails"]=> string(14) "Submit Details" ["value"]=> array(4) {
["answerARow"]=> string(2) "on"
["answerCRow"]=> string(2) "on"
["answerBRow"]=> string(2) "on" ["answerERow"]=> string(2) "on"
}
}
以下は、私が受け取っているエラーと、各エラーがリンクされているコード行です。
警告:252行目の/.../のforeach()に無効な引数が指定されました
foreach($value as $answer) {
警告:mysqli_stmt :: execute():( 23000/1062):242行目の/.../のキー「PRIMARY」のエントリ「MUL-0」が重複しています
上記のエラーは、質問番号が「0」として表示され続けるため、質問番号が挿入されていないことを示しています。