3

JavaScript に問題があります。私は、データベースから決定される正しい選択された回答ごとにマークを数えようとしています。不正解の場合、マークは「0」です。それ以外の場合、マークはデータベース内の回答のマークに依存します。

しかし、私はjavascriptに問題があります:

まず第一にconnect.php、これはdbに接続するページに移動するだけですが、これは正しいですか、それとも回答のマークを検索するクエリを実行するページにリンクすると思いますか?

2 番目に、自分のコードで undefinedresponseがあり、これを何と呼ぶべきかわかりません。

私の質問は、上記の 2 について明確にすることができますか?それぞれの正解マーク。

私はフォローしようとしている jsfiddle を持っていますが、誰かが fiddle を編集してマークをカウントするためのダミーバージョンを作成し、適切なコードがどうあるべきかを示すコードスニペットを提供できる場合、これは非常に役立ちます。

現在、jsfiddle は、選択された回答が正しいか正しくないかを判断します。フィドルは次の場所にあります: http://jsfiddle.net/bWthd/3/

実際のコード:

PHP/HTML:

    $qandaquery = "SELECT q.QuestionId, Answer, AnswerMarks, OptionType
                            FROM Question q
                            INNER JOIN Answer an ON q.QuestionId = an.QuestionId
                            INNER JOIN Option_Table o ON q.OptionId = o.OptionId
                            WHERE SessionId = ?
                            GROUP BY q.QuestionId
                            ORDER BY RAND()";

        ...

            $qandaqrystmt->bind_result($qandaQuestionId,$qandaAnswer,$qandaAnswerMarks,$OptionType);

            $arrQuestionId = array();


            while ($qandaqrystmt->fetch()) {
            $arrQuestionId[ $qandaQuestionId ] = $qandaQuestionId;

          }

        foreach ($arrQuestionId as $key=>$question) {

        ?>

        <div class="queWrap" data-q_id="<?php echo $key; ?>">

        $options = explode('-', $arrOptionType[$key]);
        if(count($options) > 1) {
            $start = array_shift($options);
            $end = array_shift($options);
            do {
                $options[] = $start;
            }while(++$start <= $end);
         }
         else{
            $options = explode(' or ', $option);
         }

    if($arrReplyType[$key] == 'Single'){
     foreach($options as $indivOption) {
         echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="radio"
        name="options_<?php echo $key; ?>[]" id="option-' . $indivOption . '" value="' . 
     $indivOption . '" /><span>' . $indivOption . '</span></label></div>';
     }
     }else if($arrReplyType[$key] == 'Multiple'){
           foreach($options as $indivOption) {
         echo '<div class="ck-button"><label class="fixedLabelCheckbox"><input type="checkbox" name="options_<?php echo $key; ?>[]" id="option-' . $indivOption . '" value="' . $indivOption . '" /><span>' . $indivOption . '</span></label></div>';
     }

}

    <p><input type='text' class='questionIds' name='questionids' value='<?php echo htmlspecialchars($arrQuestionId[$key]); ?>' /></p>

    }

JAVASCRIPT/AJAX:

$(function() {

      $('.queWrap .ck-button').change(function() {
        var $ch_box = $(this),
            $qwrap=$ch_box.closest('.queWrap')
            q_id = $qwrap.data('q_id'),
            val = $ch_box.val();

        var dataToServer = {
            q_id: q_id,
            valueSelected: val
        }

$.post('connect.php', dataToServer,function(){ 
        var status=response.status
        $qwrap.find('.status').text( status).addClass(status);
        if( status=='correct'){
            updateScore( response.points)
        }
    })

})

function updateScore( newScore){
    var score= $points.data('score')+newScore;
    $points.data('score',score).text( 'Score: '+score)
}

    });

アップデート:

現在のコード:

    function update() {
    var score = 0;
    $('.queWrap').each(function(element) {
        var $qwrap = $(element),
        q_id = $qwrap.data('q_id'),
        val = $qwrap.find('input:checked').val();

                var dataToServer = {
            q_id: q_id,
            valueSelected: val
        }

        $.post('connect.php', dataToServer,function(response){ 
            var status = response.status
            $qwrap.find('.status').text(status).addClass(status);
            if (status == 'correct'){
                score += response.points; 
                $points.data('score', score).text('Score: ' + score);
            }
        })

    });


    }

...
//HTML
<div class="status">&nbsp;</div>

エラーはありませんが、マークが表示されたり計算されたりすることはありません。connect.phpjavascript関数に含まれているためですか。データベースに接続するページに移動する必要がありますconnect.phpか、または選択した各回答の回答マークを見つけるためにクエリを実行するページに移動する必要がありますか? 時間がなくなったので、これを終わらせなければならないので、できるだけ早くコードを実装してください。私は次のことをしたい:

  • 選択された各回答のマークをカウントします。間違った回答が選択された場合、値は0それらの回答の値になります。正解の場合、そのマークはデータベースから決定されます。各正解ボタンに独自の answerId を含めるにはどうすればよいですか?

  • answerId を決定するには、テキスト入力に表示される questionId (上部の PHP/HTML コード スニペットを参照) を使用し、各回答ボタンの値に応じて、各質問の回答値に一致する answerid を取得します。

以下はデータベースの例ですAnswer Table

AnswerId (auto PK)  QuestionId  Answer  AnswerMarks
1                   72          A        2
2                   72          C        1
3                   73          B        2
4                   73          C        2
5                   73          E        1
4

1 に答える 1

1

updateScore 関数が正しく動作しません。各質問のポイントをデータ要素に保存し、 updateScore() 関数でこれらすべてを合計して、合計を $points 要素に入れる必要があります。このようなもの:

$(function() {

    $('.queWrap .ck-button').change(function() {
        update();
    });

    function update() {
        var score = 0;
        $('.queWrap').each(function(element) {
            var $qwrap = $(element);
            var q_id = $qwrap.data('q_id');
            var val = $qwrap.find('input:checked').val();

            var dataToServer = {
                q_id: q_id,
                valueSelected: val
            };

            $.post('connect.php', dataToServer, function(response){ 
                var status = response.status
                $qwrap.find('.status').text(status).addClass(status);
                if(status == 'correct'){
                    score += response.points; 
                    $points.data('score', score).text('Score: ' + score);
                }
            });  
        });

    }

}

また、この関数は、回答が変更されるたびに呼び出す必要があります。(これが単なる例として機能するかどうかはわかりません)。

于 2013-02-18T07:43:22.677 に答える