データベースに各質問の各回答を挿入しようとしています。問題は、質問に回答がない可能性があることです。そのため、以下のコードを試しましたが、質問に回答がない場合は db 行を挿入しません。私がしようとしていたのは、回答がない場合は、その質問の列の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');
以下は、テーブルの SHOW CREATE TABLE です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
以下は var ダンプです。ここで、質問 1 を回答B
ありC
、質問 2 を回答なし、質問 3 を回答B
あり、質問 4 を回答なしに設定すると、var ダンプから次のように出力されます。
var_dump($question_ids);
var_dump($results);
array(4) {
[1]=> int(265)
[2]=> int(266)
[3]=> int(267)
[4]=> int(268)
}
[1]=> array(2) {
[0]=> string(1) "B"
[1]=> string(1) "C"
}
[3]=> array(1) {
[0]=> string(1) "B"
}
そのため、質問 1 と 3 の一連の回答が出力されます。ただしNo Answer
、質問 2 と 4 は投稿されません。
すべての質問にこのような答えがあった場合 L
question 1: B C
question 2: A
question 3: B
question 4: A C
次に、var ダンプはこれを var ダンプに表示します。
array(4) {
[1]=> int(277)
[2]=> int(278)
[3]=> int(279)
[4]=> int(280)
}
array(4) {
[1]=> array(2) {
[0]=> string(1) "B"
[1]=> string(1) "C" }
[2]=> array(1) {
[0]=> string(1) "A"
}
[3]=> array(1)
{
[0]=> string(1) "B"
}
[4]=> array(2)
{
[0]=> string(1) "A"
[1]=> string(1) "C"
} }}
ご覧のとおり、各質問には関連する回答が挿入されています。問題は、質問に答えがない場合、db行と状態を挿入しないことNo Answer
です。私の質問はNo Answer
、これらの質問で回答が選択されていないデータベースに for each の質問を含める方法です。