我正在为我们的空手道学校开发一个应用程序,希望从数据库中获取技术名称,将其以随机顺序存储在一个数组中,并能够单击一个按钮以在整个数组中移动一个时间。
我以几种不同的方式考虑了这一点,包括只是从数据库中随机进行,这很容易,但是它多次提取相同的技术,而我只希望执行一次。
下面的示例代码按其应有的方式随机列出了它们,当我刷新浏览器时,它会按照我的意愿创建一个新列表。现在,我想知道如何一次只显示一个,并将其保留在浏览器中,直到所有内容都通过为止。
$sqlQuery= "Select * from Techniques Order BY Rand()";
$statement = $db->prepare($sqlQuery);
$statement->execute();
while($row = $statement->fetch(PDO::FETCH_ASSOC)):
$techniqueName = $row['Technique_name'];
?>
<ul>
<li><?php echo $techniqueName; ?></li>
</ul>
<?php endwhile; ?>
我真的不知道这是否有意义。如果可能的话,我也想远离javascript,尽管这并不是必须的。基本上,这是一个有趣的小游戏构想,它使学生可以练习而不必多次练习相同的技术,而不会错过其他练习。
任何想法都将不胜感激。
答案 0 :(得分:3)
如果要“远离javascript”,可以将值保存在存储在会话中的数组中。重新加载时,将读取会话中的数组,并从中弹出一个随机值。在每次请求时,会话中的数组都会变小,直到该数组为空。然后,您可以从数据库中重新加载一组新技术。源代码如下所示:
<?php
session_start();
if (!isset($_SESSION['data'])) {
/*
* Access the database here. For testing purposes
* create a dummy array instead
*/
$array = range(1, 10);
shuffle($array);
$_SESSION['data'] = $array;
}
$value = array_pop($_SESSION['data']);
if (!count($_SESSION['data'])) {
// array is empty, delete it so a new one gets created on the next request
unset($_SESSION['data']);
}
echo "The current value is: ".$value."<br />\n";
// only for debugging:
if (isset($_SESSION['data'])) {
var_dump($_SESSION['data']);
} else {
echo "No array in 'data' set\n";
}
如果要使用javascript,可以将所有值加载到javascript数组中。然后,您可以使用javascript遍历数组并显示所需的值,直到到达结尾为止。之后,您可以发送一个新请求,以从数据库中获取一组新技术。