0

PHPとJavascriptを使用して多肢選択式のクイズゲームを作成しています。質問には2〜6の回答があります。以下のコードでPHPクエリを使用して、クイズの質問の配列と各質問の回答を取得しています。

このデータをJavascriptで使用し、ユーザーが次の質問をクリックするたびに質問と対応する回答が表示されるようにします。

これを行う最良の方法は、JavaScript配列に変換する前に、質問配列に回答配列が含まれる配列に配列を結合することだと思います(ただし、確かではありません)。

これは本当に私がこれを行うべき方法ですか?もしそうなら、私はどのようにそうしますか?

$thisquizid = $_POST['quizidvalue'];
    for ($j = 0; $j < $questionrows; ++$j)
        {
            $questionresult = pg_fetch_array($questionquery); 
            $answerquery = pg_query($db_handle, "SELECT * FROM answer WHERE questionid = '$questionresult[0]'");
            $answerrows = pg_num_rows($answerquery);  

        for ($i = 0; $i < $answerrows; ++$i)
            {
                $answerresult = pg_fetch_array($answerquery); 
            }

    }
4

2 に答える 2

0

もちろん、Javascriptですべてが必要なだけではないことを前提として、この方法でそれを行うことができます(つまり、実際には人々がだまそうとするクイズなので、サーバーに回答を保存する必要があります...)。

AJAXを使用してPHPページを呼び出し、表示する必要のある値を変数、JSON配列などとして返すだけです...基本的なAJAX呼び出しは次のようになります。

var xmlhttpMain=new XMLHttpRequest();
function changeContent(){
    xmlhttpMain.open("GET", true);
    xmlhttpMain.send(null);
    xmlhttpMain.onreadystatechange=function(){
    if (xmlhttpMain.readyState==4 && xmlhttpMain.status==200){
            newStuff=xmlhttpMain.responseText;//This is your JSON or Array that you create in the PHP file... 
            //Then run whatever code you want here
    }
}

PHPファイルでは、「echo($ someString);」を使用するだけです。あなたの情報をJSランドに戻すために...

于 2013-03-16T23:06:26.800 に答える
0

これを別の方向から見てみましょう。JSでのデータはどのようになりますか?むしろ、JSが素晴らしくクリーンであるためにPHPが返す必要があるJSON。何かのようなもの:

var json = { // From PHP via AJAX
  "questions_and_answers": [
    {
      "question": "What is the airspeed velocity of an unladen swallow?",
      "answers": [
        "11 meters per second",
        "24 miles an hour",
        "African or European?"
      ]
    },
    {
      "question": "If a tree falls in an empty forest does it make a sound?",
      "answers": [
        "Unequivocally, yes.",
        "Unequivocally, no.",
        "It's all subjective."
      ]
    }
  ]
};

for(var i = 0, j = json.questions_and_answers.length; i < j; i++) {
  var question = json.questions_and_answers[i].question;
  var answers = json.questions_and_answers[i].answers.join("\n");
  alert(question + "\n" + answers);
}

さて、それはPHPではどのように見えるでしょうか?質問と回答オブジェクトまたはある種のORMを使用していないため、json_encodeを渡す最も簡単な方法は、ネストされた配列です。

<?php
$questions_and_answers = array(
    array(
        "question" => "What is the airspeed velocity of an unladen swallow?",
        "answers" => array(
            "11 meters per second",
            "24 miles an hour",
            "African or European?"
        )
    ),
    array(
        "question" => "If a tree falls in an empty forest does it make a sound?",
        "answers" => array(
                "Unequivocally, yes.",
                "Unequivocally, no.",
                "It's all subjective."
            )
    )
);

// Wrap in a parent object, assuming you're delivering to JS with via AJAX.
echo json_encode(array("questions_and_answers" => $questions_and_answers));
?>

したがって、サーバー側のコードは正しい方向に進んでいますが、データベースの結果をループするときに空の配列を入力する必要があります。

<?php

$thisquizid = $_POST['quizidvalue'];

    $json_output = array();

    for ($j = 0; $j < $questionrows; ++$j)
        {
            $questionresult = pg_fetch_array($questionquery); 
            $answerquery = pg_query($db_handle, "SELECT * FROM answer WHERE questionid = '$questionresult[0]'");
            $answerrows = pg_num_rows($answerquery);             
            $json_output[$j] = array( "question" => $questionresult["text"], "answers" => array());

        for ($i = 0; $i < $answerrows; ++$i)
            {
                $answerresult = pg_fetch_array($answerquery);
                $json_output[$j]["answers"][] = $answerresult["text"];
            }

    }

    echo json_encode(array("questions_and_answers" => $json_output));

?>
于 2013-03-16T23:28:21.690 に答える