我正在尝试为数据库中的每个问题插入每个答案。问题是有可能一个问题可能没有答案,所以我尝试了下面的代码,但是如果一个问题没有答案就不插入数据库行,我试图做的是如果没有答案那么显示针对该问题的No Answer
列下的字符串Answer
:
$answersql = "INSERT INTO Answer (QuestionId, Answer)
VALUES (?, ?)";
if (!$insertanswer = $mysqli->prepare($answersql)) {
// Handle errors with prepare operation here
echo __LINE__.': '.$mysqli->error;
}
if( $insert && $insertanswer)
{
$c = count($_POST['numQuestion']);
$question_ids = array();
for($i = 0; $i < $c; $i++ )
{
... //Question INSERT goes here
$questionId = $mysqli->insert_id;
$question_ids[$questionNo] = $questionId;
}
$results = $_POST['value'];
foreach($results as $id => $value)
{
$answer = $value;
$quesid = (int)$question_ids[$id];
foreach($value as $answer)
{
if($answer == '' || $answer === null){
$answer = 'No Answer';
}
$insertanswer->bind_param("is", $quesid, $answer);
$insertanswer->execute();
if ($insertanswer->errno) {
// Handle query error here
echo __LINE__.': '.$insertanswer->error;
break 7;
}
}
}
//close your statements at the end
$insertanswer->close();
}
['value']
来自输入:
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');
更新:
以下是 下面是一个var转储,如果我将问题1设置为答案Answer
表的CREATE TABLE `Answer` (
`AnswerId` int(10) NOT NULL AUTO_INCREMENT,
`QuestionId` int(10) NOT NULL,
`Answer` varchar(10) DEFAULT NULL,
PRIMARY KEY (`AnswerId`)
) ENGINE=InnoDB AUTO_INCREMENT=280 DEFAULT CHARSET=utf8
B
和C
并将问题2设置为根本没有答案,则会输出以下内容:var_dump($question_ids);
var_dump($results);
array(2) {
[1]=> int(247)
[2]=> int(248)
}
array(1) {
[1]=> array(2) {
[0]=> string(1) "B"
[1]=> string(1) "C" }
}
答案 0 :(得分:0)
您可以从var_dump中了解到您有两个问题,但只有一组答案。从我所看到的,你的设计缺陷并没有将问题的答案联系起来。
$ result中没有第二个索引,表示没有第二组答案,因此没有插入......
但如果您有三个问题和两个答案集,那么这些答案是否属于问题1&amp; 2或2&amp; 3或1&amp; 3。我不知道你是如何将你的问题id加到结果集上的。