偶尔PHP / JSON数组中缺少一条记录

时间:2013-03-18 14:13:58

标签: php javascript arrays json multidimensional-array

我正在调用PHP脚本来获取结果,然后将数组转换为javascript数组。我的数组是一个多项选择测验,可以有2到6个答案,它会回答问题。

我一直在做很多测试,有时会在预期时丢失记录。例如,在提取下一个应该有5个答案的问题后,只会拉出4个答案。即使我重新加载测验,也会丢失相同的结果。

这似乎是随机的,没有关于何时出现此问题的模式,例如,第一个测试发现第一个有六个答案的问题缺少答案结果。另一个测试发现第三个问题是一个四个答案的问题是错过了答案结果。

我使用了Javascript控制台,这是我能识别的唯一一种模式,当其中一个问题的结果丢失时,它始终是第一个的答案,即如果答案是285,286,287,那么285将是失踪者。

在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

1 个答案:

答案 0 :(得分:0)

您丢失的行来自PHP中的逻辑错误。

在示例$questionrows = pg_fetch_array($questionquery);的第4行中,您正在调用pg_num_rows()。这将获取第一行,然后由于while循环while($row = pg_fetch_array($questionquery))的测试条件再次取出数据集的下一行,您将忽略该行。

由于看起来在循环之前不需要任何行内容,我建议评论或删除第4行。