闪存卡程序的 PHP 帮助


php help for a flash card program

我正在开发一个查询数据库的小型Web应用程序。 我希望脚本只循环浏览每个闪存卡一次,并在最后显示"堆栈结束"警报,但是在编写脚本时,它将无限期地滚动浏览集。 我想知道是否有人可以帮助我解决这个问题? 数据库具有card_id字段 (1,2,3...[每个条目都有一个唯一的编号])、card_type(0 [基于术语],1 [基于问题])、类(主题)、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."'"/>";
}

?>

在会话、cookie 或数据库中为每个用户显示的每张卡保存唯一 ID。查询卡时,请使用WHERE unique_id NOT IN($ids)

其他海报也提到了这一点,但值得重申的是:使用 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."'"/>";
}