Я хочу использовать многомерный массив в этом формате: значение [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 = "AC"; break; case "4": $selected_option = "AD"; break; case "5": $selected_option = "AE"; 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" } }
Ниже приведены ошибки, которые я получаю, и строка кода, с которой связана каждая ошибка:
Предупреждение: неверный аргумент для foreach () в /…/ в строке 252
foreach($value as $answer) {
Предупреждение: mysqli_stmt :: execute (): (23000/1062): Дублировать запись «MUL-0» для ключа «PRIMARY» в /…/ в строке 242
Вышеприведенная ошибка показывает, что номер вопроса не вставлен, поскольку он продолжает отображать его как '0'