繁体   English   中英

努力将值正确插入数据库

[英]Struggling to insert values correctly into database

我想使用这种格式的多维数组:值[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):/ 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"
                                      }
        }

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

一些东西:

  1. $result / $_POST['value']是一维数组,因此在foreach循环中的$value是一个字符串,不能implode进行内implode
  2. $lastID = $id->insert_id; 应该是$insert->insert_id ,我不确定在调用该语句之前是否可以关闭连接;
  3. $value是一个字符串(请参阅第一个要点),因此您不能在那里使用foreach (第三个警告)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM