0

我想使用这种格式的多维数组: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 属性只包含该值所属的问题。

因此,上述输入说明的是:

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 = implode(':', $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();

        $lastID = $id->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(1) "A" 
  ["answerCRow"]=> string(1) "C" 
  ["answerBRow"]=> string(1) "B" 
  ["answerERow"]=> string(1) "E" }
}

以下是我收到的错误以及每个错误链接到的代码行:

警告:内爆():在第 226 行 /.../ 中传递的参数无效

$answer = implode(':', $value);

注意:尝试在第 250 行的 /.../ 中获取非对象的属性

$lastID = $id->insert_id;

警告:在第 252 行的 /.../ 中为 foreach() 提供的参数无效

foreach($value as $answer) {

警告:mysqli_stmt::execute(): (23000/1062): 第 242 行 /.../ 中键 'PRIMARY' 的重复条目 'MUL-0'

以上错误指向$insert查询

更多信息:

发布文本输入后我真正想要实现的结构如下:

array(2) { 
            ["numQuestion"]=> array(2) { 
                                        [0]=> string(1) "1" 
                                        [1]=> string(1) "2" 
                                       }
           ["submitDetails"]=> string(14) "Submit Details" 
           ["1"] => array(2) {
                                        [0] => string(1) "A"
                                        [1] => string(1) "C"
                                      }
           ["2"] => array(2) {
                                        [0] => string(1) "A"
                                        [1] => string(1) "B"
                                        [2] => string(1) "E"
                                      }
        }

当用户发布文本输入值时,它应该插入问题编号和属于他们相关问题编号的答案。

4

1 回答 1

0

一些东西:

  1. $result/$_POST['value']是一个一维数组,所以$value在你的foreach 循环中是一个你不能使用的字符串implode
  2. $lastID = $id->insert_id;应该是$insert->insert_id,我不确定您是否可以在调用该语句之前关闭连接;
  3. $value是一个字符串(见第一点),所以你不能foreach在那里使用(第三个警告)。
于 2012-10-12T13:28:16.820 回答