2016-12-07 4 views
0

質問のテキストと回答を別のテーブルに保存しようとしています。まず、私は質問のテキスト値を保存することができますが、私は答えのために値を挿入すると、その後、それは異なる行の1つの列に複数の値を挿入するにはどうすればよいですか?

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

まず、あなたは1列に複数の値を格納しないでください。それらを複数の行に格納します。あなたが持っているエラーは、あなたがoption_answer列に何かを保存するSQLを言っているが、あなたは4つの異なる値を送信している。この

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

から直接来ます。

それは次のようになります。これは、まだ森のあなたを取得していません

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

その後

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

を。どのような質問がこの回答に関係しているかをどのように知っていますか?おそらく、

あなたはまた、他の本がありません使用されるであろう質問IDを保存することもできます(のようにそれを試してみてください.... e4c5 @

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

)...あなたはあなたの必要性に応じてそれを自分で編集することができますと仮定すると? – jwalkerman

+0

option_answer列にこの ":ans"を8回印刷しました。私はここで何が間違っているのだろうか。 – jwalkerman

+0

[:ans]から引用符を削除して動作します。 – jwalkerman

0

のようなものは、これが機能しない理由、それは十分に説明したいです...「ANS」を使用すると、ラジオボタンの値を記憶しているので、私は、テキストの入力タイプを格納することができますどのように

<?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

関連する問題