2016-12-07 3 views
0

Я пытаюсь сохранить текст вопроса и ответить в другую таблицу. Во-первых, я могу хранить текстовое значение вопроса, но в дальнейшем, когда я ввожу значение для ответа, это отображениеКак вставить несколько значений в один столбец с разными строками?

Fatal error: Uncaught exception 'PDOException' with message
'SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1'

Моя цель состоит в том, чтобы сохранить текст вопроса на вопрос и ответ таблицы в варианте таблицы. Я пробовал несколько методов, но до сих пор не могу заставить его работать. Эти прокомментированные строки - некоторые из моих методов.

HTML код:

<div class="container"> 
    <button type="button" class="btn btn-success" onclick="goBack()"> 
    <span class="glyphicon glyphicon-arrow-left"></span> Back 
    </button><br><br> 
    <p></p> 
    <form class="table" method="post" id="mcq-form"> 
    <table class="table"> 

     <tbody> 
     <tr> 
      <td>Question:</td> 
      <td><input type="text" size="80" name="questiontext"></td> 
     </tr> 
     <tr> 
      <td>1. </td> 
      <td><input type="text" size="70" name="ans1"><input value="1" name="ans" type="radio"></td> 
     </tr> 
     <tr> 
      <td>2. </td> 
      <td><input type="text" size="70" name="ans2"><input value="2" name="ans" type="radio"></td> 
     </tr> 
     <tr> 
      <td>3. </td> 
      <td><input type="text" size="70" name="ans3"><input value="3" name="ans" type="radio"></td> 
     </tr> 
     <tr> 
      <td>4. </td> 
      <td><input type="text" size="70" name="ans4"><input value="4" name="ans" type="radio"></td> 
     </tr> 
     <tr> 
      <td align="center"><input type="submit" name="submit" value="Create"></td> 
     </tr> 
     </tbody> 

    </table></form> 
</div> 

PHP код:

<?php 

require_once 'dbConn.php'; 

if(!empty($_POST{'submit'})) { 

    //$questiontext = $_POST['questiontext']; 
    $anstext1 = $_POST['ans1']; 
    $anstext2 = $_POST['ans2']; 
    $anstext3 = $_POST['ans3']; 
    $anstext4 = $_POST['ans4']; 
    //$radiobtn = $_POST['ans']; 

    //add the first record into question table 
    /*$stmt1 = $conn->prepare("INSERT INTO `question`(question_text) VALUES(:questiontext)"); 
    $stmt1->bindParam(":questiontext",$questiontext); 
    $stmt1->execute();*/ 

    //$answerArray = array["$anstext1", "$anstext2", "$anstext3", "$anstext4"]; 
    /*$value = array(':ans1', 'ans2', ':ans3', 'ans4'); 
    for($i=0; $i<=count($value); $i++) { 
     $i = $value[$i]; 
    }*/ 

    $stmt2 = $conn->prepare("INSERT INTO `option_tbl`(option_answer) VALUES(':ans1', ':ans2', 'ans3', 'ans4')"); 

    $stmt2->bindParam(":ans1",$anstext1); 
    $stmt2->bindParam(":ans2",$anstext2); 
    $stmt2->bindParam(":ans3",$anstext3); 
    $stmt2->bindParam(":ans4",$anstext4); 
    $stmt2->execute(); 
    //$stmt2->execute(); 

    /*$conn->beginTransaction(); 

    //insert first query to question table 
    $questionsql = ("INSERT INTO `question`(question_text) VALUES(:questiontext)"); 
    $q = $conn->prepare($questionsql); 
    $q->bindValue(":questiontext",$questiontext); 
    $q->execute(); 

    //insert second query to option table 
    $answersql = ("INSERT INTO `option_tbl`(option_answer) VALUES(:ans1, :ans2, :ans3,:ans4)") ; 
    $a = $conn->prepare($answersql); 
    $a->bindValue("anstext1",$anstext1); 
    $a->bindValue("anstext2",$anstext2); 
    $a->bindValue("anstext3",$anstext3); 
    $a->bindValue("anstext4",$anstext4); 
    $a->execute(); 
    $conn->commit();*/ 

} 
?> 

ответ

3

Прежде всего, вы не хранить несколько значений в одном столбце. Вы храните их в нескольких строках. Ошибка у вас есть приходит непосредственно из этого

$stmt2 = $conn->prepare("INSERT INTO `option_tbl`(option_answer) VALUES(':ans1', ':ans2', 'ans3', 'ans4')"); 

Вы рассказываете SQL, которые вы хотите сохранить что-то в option_answer колонки, но вы отправляете 4 различных значения.

это должно выглядеть примерно так:

$stmt2 = $conn->prepare("INSERT INTO `option_tbl`(option_answer) VALUES(:ans)"); 

Тогда

$stmt2->bindParam(":ans",$anstext1); 
$stmt2->execute() 
... 
$stmt2->bindParam(":ans",$anstext4); 
$stmt2->execute() 

Это еще не получает вас из леса. Как вы узнаете, к какому вопросу относится этот ответ? Вы, вероятно, хотите что-то вроде

$stmt2 = $conn->prepare("INSERT INTO `option_tbl`(question, option_answer) VALUES(':question, :ans')"); 
+0

Как сохранить тип ввода текста, так как использование «ans» хранит значение переключателя? – jwalkerman

+0

Он напечатал 8 раз этого «: ans» в столбце option_answer. Интересно, в чем тут ошибка. – jwalkerman

+0

Он работает, удаляя знак цитаты из [: ans]. – jwalkerman

0

@ e4c5 объяснил, что это достаточно хорошо, почему это не работает ....

Попробуй как (Вы можете также сохранить вопрос идентификатор еще это будет никакой пользы ... Предполагая, что вы можете отредактировать его самостоятельно в соответствии с вашими потребностями ...)

<?php 

require_once 'dbConn.php'; 

if(!empty($_POST{'submit'})) { 

    //$questiontext = $_POST['questiontext']; 
    $answers[] = $_POST['ans1']; 
    $answers[] = $_POST['ans2']; 
    $answers[] = $_POST['ans3']; 
    $answers[] = $_POST['ans4']; 
    //$radiobtn = $_POST['ans']; 

    //add the first record into question table 
    /*$stmt1 = $conn->prepare("INSERT INTO `question`(question_text) VALUES(:questiontext)"); 
    $stmt1->bindParam(":questiontext",$questiontext); 
    $stmt1->execute();*/ 

    //$answerArray = array["$anstext1", "$anstext2", "$anstext3", "$anstext4"]; 
    /*$value = array(':ans1', 'ans2', ':ans3', 'ans4'); 
    for($i=0; $i<=count($value); $i++) { 
     $i = $value[$i]; 
    }*/ 
foreach($answers as $answer){ 
    $stmt2 = $conn->prepare("INSERT INTO `option_tbl`(option_answer) VALUES(':ans')"); 

    $stmt2->bindParam(":ans",$answer); 
    $stmt2->execute(); 
    //$stmt2->execute(); 
} 
    /*$conn->beginTransaction(); 

    //insert first query to question table 
    $questionsql = ("INSERT INTO `question`(question_text) VALUES(:questiontext)"); 
    $q = $conn->prepare($questionsql); 
    $q->bindValue(":questiontext",$questiontext); 
    $q->execute(); 

    //insert second query to option table 
    $answersql = ("INSERT INTO `option_tbl`(option_answer) VALUES(:ans1, :ans2, :ans3,:ans4)") ; 
    $a = $conn->prepare($answersql); 
    $a->bindValue("anstext1",$anstext1); 
    $a->bindValue("anstext2",$anstext2); 
    $a->bindValue("anstext3",$anstext3); 
    $a->bindValue("anstext4",$anstext4); 
    $a->execute(); 
    $conn->commit();*/ 

} 
?> 
+0

Я все еще не могу сохранить текст входного значения. Это привело к 8 рядам «: ans» в столбце. – jwalkerman

Смежные вопросы