苦苦于将值正确插入数据库

时间:2012-10-12 13:20:17

标签: php html sql database mysqli

我想以这种格式使用多维数组: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" }
}

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

  

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

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

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

$lastID = $id->insert_id;
  

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

foreach($value as $answer) {
  

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

以上错误指向$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"
                                      }
        }

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

1 个答案:

答案 0 :(得分:0)

一些事情:

  1. $result / $_POST['value']是一维数组,$value foreach loop是一个不能使用implode的字符串;
  2. $lastID = $id->insert_id;应为$insert->insert_id,我不确定您是否可以在致电之前关闭连接 那个陈述;
  3. $value是一个字符串(请参阅第一点),因此您无法使用foreach(第三个警告)。