如何在数据库中插入所有这些细节

时间:2012-04-02 02:04:41

标签: php javascript mysql

我有一个应用程序,用户可以在其中编写一些问题并将其添加到应用程序的表格行中(每个问题都会进入每一行)。在用户完成他们的问题后,他们可以将这些问题添加到数据库中。

现在如果用户只在数据库中添加一个问题,那么这很好,因为当我在数据库中插入它时,它会在数据库中插入问题。

问题是,如果用户在数据库中插入了2个或更多的问题,它只会在数据库行中插入最新的问题,而不是两个问题。

例如,如果我在应用程序表行中有1个问题(2 + 2),那么它将在数据库中显示如下:

SessionId    QuestionContent

SAS          What is 2+2

但如果我在应用程序表行中有2个问题(2 + 2和3 + 3是什么),那么它将在数据库中显示如下:

 SessionId    QuestionContent

    SAS          What is 3+3

上述内容不正确,因为它只显示最新问题,而不是两个问题。它应该在数据库中显示如下:

 SessionId    QuestionContent

    SAS          What is 2+2
    SAS          What is 3+3

那么我的问题是如何在数据库中插入数据库中的所有问题?

以下是我目前拥有的INSERT VALUES代码:

     <?php

            mysql_connect('localhost',$username,$password);

            mysql_select_db($database) or die( "Unable to select database");

                     $insertquestion = array();

    foreach($_POST['questionText'] as $question)
    {
        $insertquestion[] = "' ". mysql_real_escape_string( $_SESSION['id'] ) . "' , ' ".     mysql_real_escape_string( $question ) . "'";
    }

      $questionsql = "INSERT INTO Question (SessionId, QuestionContent) 
      VALUES (" . implode('), (', $insertquestion) . ")";



    mysql_query($questionsql);

            mysql_close();

        ?>

以下是使用javascript和html查看问题添加方式的完整代码。请仔细阅读,您将了解如何将问题追加或添加到表格行中:

        <script>

        function insertQuestion(form) {

        var $tbody = $('#qandatbl > tbody'); 
            var $tr = $("<tr class='optionAndAnswer' align='center'></tr>");
            var $question = $("<td class='question'></td>");

         $('#questionTextArea').each( function() {

        var $this = $(this);
        var $questionText = $("<textarea class='textAreaQuestion'></textarea>").attr('name',$this.attr('name')+"[]")
                       .attr('value',$this.val())

        $question.append($questionText);

        });


        $tr.append($question);
        $tbody.append($tr); 

        }

        </script>

        <body>

        <form id="QandA" action="insertQuestion.php" method="post" >

<h1>SESSION (<?php echo $_SESSION['id'] ?>)</h1>

        <table id="question">
        <tr>
            <td rowspan="3">Question:</td> 
            <td rowspan="3">
                <textarea id="questionTextArea" rows="5" cols="40" name="questionText"></textarea>
            </td>
        </tr>
        </table>

        <p><input id="addQuestionBtn" name="addQuestion" type="button" value="Add Question" onClick="insertQuestion(this.form)" /></p>

        <hr/>


        <table id="qandatbl" align="center">
        <thead>
        <tr>
            <th class="question">Question</th>
        </tr>
        </thead>
        <tbody>
        </tbody>
        </table>


        <p><input id="submitBtn" name="submitDetails" type="submit" value="Submit Details" /></p>

        </form> 

        </body>

1 个答案:

答案 0 :(得分:0)

据我所知,你的$ insertquestion数组中只有1个元素:

$insertquestion[] = "' ". mysql_real_escape_string( $_SESSION['id'] ) . "' , ' ". mysql_real_escape_string( $_POST['questionText'] ) . "'";

这会插入一个元素。当你破坏这个数组时,只有一个元素,所以它与$ insertquestion [0]相同。

您的HTML表单是什么样的,允许您输入多个问题?您是使用多个表单字段还是将多个问题放入一个表单字段?如果它是后者,那么您首先需要将这些问题分开并将每个问题推入$ insertquestion。

EDIT 根据您的HTML / JS代码,问题是您插入每个具有相同名称的新textarea。提交表单时,重复的命名元素被分组,这导致只有具有该名称的最后一个元素出现在$ _POST数组中

要解决此问题,您可以附加&#34; []&#34;到元素的名称。通过这样做,该名称的$ _POST数组将包含一个数组。

因此,在您的javascript代码中将其更改为:

var $questionText = $("<textarea class='textAreaQuestion'</textarea>").attr('name',$this.attr('name')+"[]").attr('value',$this.val())

然后在你的PHP中:

$insertquestion = array();

foreach($_POST['questionText'] as $question)
{
    $insertquestion[] = "' ". mysql_real_escape_string( $_SESSION['id'] ) . "' , ' ".     mysql_real_escape_string( $question ) . "'";
}

  $questionsql = "INSERT INTO Question (SessionId, QuestionContent) 
  VALUES (" . implode('), (', $insertquestion) . ")";

这将循环遍历$ _POST [&#39; questionText&#39;]数组,并将该数组的每个元素(即每个问题)插入$ insertquestion数组。在那之后,你很高兴。