我想使用这种格式的多维数组:值[n][],其中n是问题号。使用此新设置,您最终应该使用以下复选框字段:
<input type="checkbox" value="A" name="value[1][]">
<input type="checkbox" value="B" name="value[1][]">
<input type="checkbox" value="A" name="value[2][]">
<input type="checkbox" value="C" name="value[2][]">
<input type="checkbox" value="E" name="value[2][]">
请注意,选定的值编码在value属性中。name属性只包含值所属的问题。
因此,上述输入说明的是:
question 1: answer: A
question 1: answer: B
question 2: answer: A
question 2: answer: C
question 2: answer: E
我想在下面的“问题”和“答案”数据库表中插入这些详细信息:
问题表:
SessionId QuestionId
MUL 1
MUL 2
答题表:
AnswerId (auto) SessionId QuestionId Answer
1 MUL 1 A
2 MUL 1 B
3 MUL 2 A
4 MUL 2 C
5 MUL 2 E
现在,我已经尝试编写下面的mysqli/php代码,将这些值插入数据库,但我收到错误,并在想要实现我想要实现的目标时严重失败。我需要帮助能够正确地在相关表中插入正确的值。
下面是php/mysqli代码:
var_dump($_POST);
$i = 0;
$c = count($_POST['numQuestion']);
for($i = 0; $i < $c; $i++ ){
/*
switch ($_POST['gridValues'][$i]){
case "3":
$selected_option = "A-C";
break;
case "4":
$selected_option = "A-D";
break;
case "5":
$selected_option = "A-E";
break;
default:
$selected_option = "";
break;
}
*/ needed later on when I insert grid values
$results = $_POST['value'];
foreach($results as $id => $value) {
$answer = $value;
$questionsql = "INSERT INTO Question (SessionId, QuestionId)
VALUES (?, ?)";
$sessid = $_SESSION['id'] . ($_SESSION['initial_count'] > 1 ? $_SESSION['sessionCount'] : '');
if (!$insert = $mysqli->prepare($questionsql)) {
// Handle errors with prepare operation here
}
$insert->bind_param("si", $sessid, $id);
$insert->execute();
if ($insert->errno) {
// Handle query error here
}
$insert->close();
$insert->insert_id;
foreach($value as $answer) {
$answersql = "INSERT INTO Answer (SessionId, QuestionId, Answer)
VALUES (?, ?, ?)";
if (!$insertanswer = $mysqli->prepare($answersql)) {
// Handle errors with prepare operation here
}
$insertanswer->bind_param("sis" $sessid, $lastID, $answer);
$insertanswer->execute();
if ($insertanswer->errno) {
// Handle query error here
}
$insertanswer->close();
}
}
}
var_dump($_POST)
输出如下:
array(3) {
["numQuestion"]=> array(2) {
[0]=> string(1) "1"
[1]=> string(1) "2"
}
["submitDetails"]=> string(14) "Submit Details" ["value"]=> array(4) {
["answerARow"]=> string(2) "on"
["answerCRow"]=> string(2) "on"
["answerBRow"]=> string(2) "on" ["answerERow"]=> string(2) "on"
}
}
下面是我收到的错误以及每个错误链接到的代码行:
警告:为/…/中的foreach()提供的参数无效在线252
foreach($value as $answer) {
警告:mysqli_stmt::execute():(23000/1062):在/…/在线242
上面的错误显示没有问题号被插入,因为它一直显示为'0'
因此,看起来你要做的主要事情是绕过无法屏蔽复选框的问题。我以前做过这件事。我这样做的方式是使用一个绑定到隐藏复选框的跨度。
我之所以使用span,是因为我不确定表单字段中的按钮在提交表单时是否会发布值。我知道一个跨度不会。这保证只提交您的复选框值,而不是“掩盖”值。
在JSFIDLE的updateAnswer()
函数中,您有以下代码:
if (!bDisableAppend) {
// append those values to the form
var input = '<input type="checkbox" id="' + hid + '" name="value[' + id + ']" checked /><label for="' + hid + '">' + value + '</label>';
_oCurrAnswerContainer.append(input);
}
在该代码中,您将复选框的name
属性设置为类似value[answerARow]
的内容。这就是你的问题所在。
TBH,我很难理解您的代码,所以我提出的解决方案可能需要一些调整,以添加我在您的示例中遗漏的任何隐藏的技巧。但我想到的是:
JSFIDLE
jS/jQuery:
var options = ["A", "B", "C", "D", "E", "F", "G", "H"];
// this will bind the event handler to the document element, so that even when a new element is created,
// the event will be automatically bound to it.
$(document).on("click", "span.checkbox", function() {
$("#chk"+ $(this).attr("id")).click();
$(this).toggleClass("unselected selected");
});
$("#btnAddQuestion").click(function() {
var questionNum = $("#tblQuestions tbody tr").length+1;
var cell = $(document.createElement("td")).addClass("optAns").html("Answer:<br />");
// loop through the options and add them to the cell
for (var i in options)
{
$(cell).append(
// the front-end overlay for the checkbox
$(document.createElement("span"))
.addClass("checkbox unselected")
.attr("id", "Value"+ questionNum + options[i])
.html(options[i])
).append(
// the hidden checkbox that will post the actual value
$(document.createElement("input"))
.attr("type", "checkbox")
.addClass("hidden")
.attr("id", "chkValue"+ questionNum + options[i])
.attr("name", "value["+ questionNum +"][]")
.attr("value", options[i])
);
}
// create a new table row, append the "option and answer" cell
// and question number cell, and append it to the table body
$(document.createElement("tr"))
.append(cell)
.append($(document.createElement("td")).addClass("questionNum").html(questionNum))
.appendTo("#tblQuestions tbody");
});
HTML:
<div id="detailsBlock">
<button id="btnAddQuestion">Add Question</button>
</div>
<hr />
<div id="details">
<table id="tblQuestions">
<thead>
<tr>
<th>Option and Answer</th>
<th>Question No</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
您当前的代码会生成以下内容(请注意“坏名称”属性):
<input type="button" onclick="btnclick(this, 1);" style="display:inline-block;" class="answerBtns answers answerBtnsOff" name="value[answerF]" value="F" id="answerHRow">
请注意,name属性是value[回答F]
,而不是你在问题中写的value[1][]
。
更新您的javascript并将$newBtn
行更改为:
var $newBtn = $(("<input class='answerBtnsRow answers' type='button' style='display:%s;' onclick='btnclick(this, " + gQuestionIndex + ");' />").replace('%s', $this.is(':visible') ? 'inline-block' : 'none')).attr('name', "value[" + gQuestionIndex + "][]").attr('value', $this.val()).attr('class', $this.attr('class')).attr('id', $this.attr('id') + 'Row');
我想使用以下格式的多维数组:value[n][],其中n是问题编号。使用此新设置,您将得到以下输入字段: 请注意,选定的值编码在value属性中。name属性只包含值所属的问题。 因此,上述输入说明的是: 我想在下面的“问题”和“答案”数据库表中插入这些详细信息: 问题表: 答案表: 现在,我已经尝试编写下面的mysqli/php代码来将这些值插入数据库,但是我收到了错误,并且在想要实现我想要实现
我想发出一个将数据插入数据库的请求。该表有4列:ID_DOCUMENT(PK)、ID_TASK、DESCRIPTION、FILEPATH 当我运行我的测试时,我得到了这个错误:由:org.hibernate.hql.ast.querysyntaxException引起的:预期打开,在第1行第32列附近发现'c'[insert into TaskDocumentEntity c(c.IDTask,c
问题内容: 我想使用Web服务在远程Web服务器上的MYSQL数据库中插入文件。 我的问题是:什么类型的表列(例如varchar等)将存储文件?对于文件,insert语句会有所不同吗? 问题答案: BLOB数据类型最适合存储文件。 请参阅:如何使用PHP将.pdf文件作为BLOB存储到MySQL中? MySQL BLOB参考手册有一些有趣的注释
我有一个电子邮件订阅我的网站,我想插入到我的Wordpress数据库,所以我可以导出电子邮件列表。我已经创建了表wp_email_subscription,其中包含4个字段ID、名称、电子邮件和创建日期。对此将进行什么查询?有没有wordpress数据库脚本可以使用?
我有2列的jtable,然后我想把它的值插入数据库; 我知道这可以用像.. 问题是..getRowCount不知道该行是否为空,那么在数据库中,该空值仍将被插入(它将在数据库中生成我的自动增量值) 我的问题是如何从jtable中插入数据库,但是空行不会插入? 如果我要求太多,请给我一个处理空行的线索, 原谅我的英语 下面是向数据库中添加数据的坏方法
我将Rails6与WebPack一起使用。我想使用库,但我不知道我必须如何将它包含到文件中。 我的步骤: null 我的 我的