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"> </div>
エラーはありませんが、マークが表示されたり計算されたりすることはありません。connect.php
javascript関数に含まれているためですか。データベースに接続するページに移動する必要があります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