如何在数据库中插入所有这些详细信息
How to insert all these details in the database
我有一个应用程序,用户可以在其中编写一些问题,并将其添加到应用程序的表行中(每个问题都进入每一行)。在用户写完他们的问题之后,他们可以将这些问题添加到数据库中。
现在,如果用户只有一个问题要添加到数据库中,那么这是可以的,因为当我在数据库中插入这个问题时,它会将问题插入到数据库中。
但问题是,如果用户有2个或多个问题要插入数据库,它只会在数据库行中插入最新的问题,而不会同时插入两个问题。
例如,如果我在应用程序表行中有一个问题(2+2是什么),那么它将在下面的数据库中显示:
SessionId QuestionContent
SAS What is 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>
据我所知,$insertquestion数组中只有一个元素:
$insertquestion[] = "' ". mysql_real_escape_string( $_SESSION['id'] ) . "' , ' ". mysql_real_escape_string( $_POST['questionText'] ) . "'";
这将插入一个元素。当您内爆这个数组时,只有一个元素,所以它与$insertquestion[0]相同。
允许您输入多个问题的HTML表单是什么样子的?您是使用多个表单字段还是将多个问题放入一个表单字段?如果是后者,那么您首先需要将这些问题分开,并将每个问题推到$insertquestion中。
编辑根据您的HTML/JS代码,问题是您插入了每个具有相同名称的新文本区域。提交表单时,会对重复命名的元素进行分组,这只会导致$_POST数组中显示具有该名称的最后一个元素
要解决此问题,可以在元素的名称后附加"[]"。这样,该名称的$_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['questionText']数组,并将该数组的每个元素(即每个问题)插入$insertquestion数组。之后你就可以走了。
- 如何循环浏览页面源中的所有文本框元素并查找所有这些文本框的名称
- 从表单字段复制数据并将其放在echo语句中,所有这些都在$xml=simplexmlload_file函数中
- 所有这些JavaScript到底都去哪儿了
- 是否可以对 React.js DOM 树执行所有这些 jQuery 操作
- 设置同步/异步函数序列的正确方法,所有这些函数都可以停止表单提交和进一步处理
- 验证表单,检查用户是否存在,注册它们.所有这些都与阿贾克斯有关
- 从单击表单的 html 表行中预填充表单字段.(所有这些都应该发生在JSP上)
- 如何使用单选按钮禁用下拉列表中的选项,所有这些都在同一个下拉列表中.使用Javascript
- 人们如何在不透露他们的谷歌API密钥的情况下将所有这些很酷的谷歌地图示例放在jsFiddle上
- 标签式网站在 ASP.NET,想打印所有这些,推荐.
- 如何在数据库中插入所有这些详细信息
- Backbone建议在服务器端生成页面时插入所有模型
- 如何不在函数中重写所有这些值
- 包括所有这些第三方javascript文件是否会带来安全风险
- 骨干路由器路由定义,以处理所有这些条件
- 是什么导致了敲除代码中的所有这些错误
- 我想保存到mysql数据库,发送一封电子邮件,然后做一个帖子,所有这些都使用一个按钮
- Javascript运行对象和所有这些方法
- 如何使用默认值填充文本字段或将其保留为空,所有这些都取决于下拉列表中的选择
- Javascript散列和密码实现,任何脚本都可以处理所有这些