0

データベースに各質問の各回答を挿入しようとしています。問題は、質問に回答がない可能性があることです。そのため、以下のコードを試しましたが、質問に回答がない場合は 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 に回答BC設定し、質問 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" } 
} 
4

1 に答える 1

0

var_dumps から、質問は 2 つあるが、回答のセットは 1 つしかないことがわかります。あなたの設計上の欠陥は、私が見る限り、質問への回答をリンクしていません。

$results に 2 番目のインデックスがない場合は、2 番目の回答セットがないことを意味するため、挿入はありません ...

しかし、3 つの質問と 2 つの回答セットがある場合、それらの回答は質問 1&2 または 2&3、または 1&3 に属しますか。質問IDを結果セットにどのように一致させるかわかりません。

于 2013-02-04T20:44:09.770 に答える