我有一个应用程序,用户可以在其中编写一些问题并将其添加到应用程序的表格行中(每个问题都会进入每一行)。在用户完成他们的问题后,他们可以将这些问题添加到数据库中。
现在如果用户只在数据库中添加一个问题,那么这很好,因为当我在数据库中插入它时,它会在数据库中插入问题。
问题是,如果用户在数据库中插入了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>
答案 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数组。在那之后,你很高兴。