2

データベースにクエリを実行する小さな Web アプリに取り組んでいます。スクリプトが各フラッシュ カードを 1 回だけ循環し、最後に「スタックの終わり」のアラートを表示するようにしたかったのですが、スクリプトが記述されると、セットが無期限にスクロールされます。誰かがこれで私を助けることができるかどうか疑問に思っていましたか? データベースには、card_id (1,2,3...[各エントリに一意の番号がある])、card_type (0 [用語ベース]、1 [質問ベース] のいずれか)、class (件名)、sub_class (区分) のフィールドがあります。その件名)、side_1 (データ)、side_2 (データ)。これまでのコードは次のとおりです。

   <?php

//Sample Database Connection Syntax for PHP and MySQL.
    //Connect To Database
    $hostname="";
    $username="";
    $password="";
    $dbname="";
    $usertable="flash_cards";
    $question = "side_1";
    $answer = "side_2";
    $connection = mysql_connect($hostname, $username, $password);
    mysql_select_db($dbname, $connection);
    $count=0;

    // this section generates the flashcards
    $query = "SELECT * FROM $usertable ";
    if(empty($_GET)) {

    }
    else {
        $query .= " WHERE ";

        if($_GET["sub_class"] != null){
            $query .= "sub_class = '".$_GET["sub_class"]."'";
            if($_GET["card_type"] != null){
                $query .= " AND card_type = ".$_GET["card_type"];
            }
        }
        else if($_GET["card_type"] != null){
            $query .= " card_type = ".$_GET["card_type"];
        }
    }

    $query .= " ORDER BY RAND() ";

    //echo $query;

    $result = mysql_query($query);
    if($result){
        while($row = mysql_fetch_array($result)){
            if($count == 0){
                $class = $row["class"];
                $sub_class = $row["sub_class"];
                echo "<input type=\"hidden\" id=\"".$count."\" value=\"".$class." - ".$sub_class."\"/>";
                $count += 1;
                echo "<input type=\"hidden\" id=\"".$count."\" value=\""."\"/>";
                $count += 1;
            }

            $name = $row["$question"];
            $name2 = $row["$answer"];
            echo "<input type=\"hidden\" id=\"".$count."\" value=\"".$name."\"/>";
            $count += 1;
            echo "<input type=\"hidden\" id=\"".$count."\" value=\"".$name2."\"/>";
            $count += 1;
        }
        echo "<input type=\"hidden\" id=\"count\" value=\"".$count."\"/>";

}


?>
4

2 に答える 2

0

他の投稿者もこれに言及していますが、繰り返します。PDO を使用して SQL ステートメントを準備し、インジェクション攻撃やハッキングを回避してください。

あなたの質問のポイントまで; おそらくやりたいことは、結果を取得してからランダム化することです。これにより、より効率的になります。

$result = mysql_query($query);
$shuffled_deck = array();
if($result) {
    while ($row = mysql_fetch_array($result)){
        $shuffled_deck[] = $row;
    }

    shuffle($shuffled_deck);

    foreach ($shuffled_deck as $row) {
        //output your stuff here
    }
    echo "<input type=\"hidden\" id=\"count\" value=\"".$count."\"/>";
}
于 2012-04-26T22:31:13.587 に答える
0

セッション内の配列、Cookie、またはデータベースのいずれかに、各ユーザーに表示される各カードの一意の ID を保存します。カードの使用を照会するときWHERE unique_id NOT IN($ids)

于 2012-04-26T21:56:08.967 に答える