我正在开发一个查询数据库的小型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."'"/>";
}