0

PHP スクリプトを呼び出して結果を取得し、配列を JavaScript 配列に変換しています。私の配列は多肢選択式クイズ用です.2から6の答えがあり、答えで質問を引き出します.

私は多くのテストを行ってきましたが、予想されるときにレコードが欠落していることがあります。たとえば、5 つの回答があるはずの次の質問を取得した後、4 つの回答のみが取得されます。クイズをリロードしても、同じ結果が表示されません。

これは一見ランダムに見えます。この問題がいつ発生するかについてのパターンはありません。たとえば、最初のテストで、6 つの回答がある最初の質問に回答結果がないことがわかりました。別のテストでは、4 回答の質問である 3 番目の質問に回答結果がないことがわかりました。

私は Javascript コンソールを使用しましたが、これらの質問のいずれかで結果が欠落している場合に特定できる唯一のパターンは、最初になるのは常に answerid です。つまり、answerid が 285、286、287 の場合、285 が1つ欠けています。

テストされた 25 の質問のうち、結果が得られなかったのは 3 つだけでした。

これが私のコード、PHPスクリプトです...

$thisquizid = $_REQUEST['quizidvalue'];
$questionquery = pg_query($db_handle, "SELECT * FROM question LEFT JOIN answer USING (questionid) WHERE quizid = '$thisquizid'");
$questionrows = pg_num_rows($questionquery); 
$questionresult = pg_fetch_array($questionquery); 

$questions = array();

while($row = pg_fetch_array($questionquery)) {
    $questions[$row['questionid']][] = $row;
}
die(json_encode($questions));

そして私のJavascript

var questions;
var currentquestion = 0;


$(document).ready(function(){

        console.debug("in ajax");
        jQuery.ajax({

                    error: function (data, textStatus, errorThrown){
                        console.log(data);
                        console.log(textStatus);
                        console.log(errorThrown);
                    },
                    url:"quizajax.php",
                    dataType: "json",
                    data: { 
                        quizidvalue: <?=$thisquizid?>
                    },


            }).done(function(data) {
                    questions = data;
                    for(i in data){
                        console.log(data[i]);

                    }
                });


        $("#nextquestionbtn").click(function () {
            nextQuestion();
        });
    });

function nextQuestion (){
    for(i in questions) {
        if(i<=currentquestion)
            continue;

        currentquestion = i;


        for(y in questions[i]) {
            console.log("CurrentA: "+ currentquestion);
            console.log("I: " + i);
            console.log(questions[i][y].answerid);
        }


        console.log("CurrentQ: "+ currentquestion);
        console.log("I: " + i);
        console.log(questions[i]);

        questionVariables ();


        break;
    }

そして、これが私のデータベースのレコードに関する質問です

questionid | quizid | questiontype | qdescription | qfilelocation | noofanswers | answertype | answerid | adescription | afilelocation | iscorrect 
------------+--------+--------------+--------------+---------------+-------------+------------+----------+--------------+---------------+-----------
        295 |     57 | text         | 6mark work   | null          |           6 | text       |      795 | sadfds       | null          | t
        295 |     57 | text         | 6mark work   | null          |           6 | text       |      796 | asdfsd       | null          | f
        295 |     57 | text         | 6mark work   | null          |           6 | text       |      797 | asfsadf      | null          | f
        295 |     57 | text         | 6mark work   | null          |           6 | text       |      798 | asdfsadf     | null          | f
        295 |     57 | text         | 6mark work   | null          |           6 | text       |      799 | asdfsadf     | null          | f
        295 |     57 | text         | 6mark work   | null          |           6 | text       |      800 | sadfasdf     | null          | f
4

1 に答える 1

0

欠落している行は、PHP の論理エラーが原因です。

example の 4 行目では、$questionrows = pg_fetch_array($questionquery);pg_num_rows() を呼び出しています。これにより最初の行がフェッチされますが、データセットの次の行を再びフェッチするwhileループのテスト条件のために無視されます。while($row = pg_fetch_array($questionquery))

ループの前に行の内容が必要ないように見えるので、4 行目をコメントするか削除することをお勧めします。

于 2013-03-18T14:25:28.600 に答える