【发布时间】:2011-07-04 23:42:46
【问题描述】:
我一直在使用 PHP 测验程序,但我对从数据库中获取唯一的随机值有点迷茫。目前这是我的脚本。
<?php $num = 1;
$sql = "SELECT * FROM questions ORDER BY RAND() LIMIT ".$num;
$sql_exec = mysql_query($sql, $connection);
if(isset($_POST['start']) || isset($_SESSION['xy'])){
while($row = mysql_fetch_array($sql_exec)){
if(!in_array($row['qid'], $_SESSION['xy'])){
echo $row['qid']." -".$row['question']."<br />";
if(isset($_POST['num'])){
$_SESSION['xy'][] .= $row['qid'];
}
}else{
// WHAT WILL I PUT HERE
}
}
} ?>
<form action="<?php $_SERVER[PHP_SELF]; ?>" method="post">
<input type="hidden" name="num" value="1" />
<input type="submit" name="start" value="Start" <?php if(isset($_POST['start']) || isset($_SESSION['xy'])) echo "disabled"; ?> />
<input type="submit" name="submit" value="Continue" />
<input type="submit" name="destroy" value="Destroy" />
</form>
我将每一行的 id 放在一个会话数组中,这样我就可以记录所有以前的问题和 如果新问题已经使用 in_array 提出,我可以进行比较。
问题是如果新获取的数据已经在数组中,程序停止,因为我仍然没有其他值,
[idea-01] 我正在考虑在 else 上添加一个新的 select 语句,但我知道这是错误的,因为它在循环中,并且无法保证该值是唯一的。
[idea-02] 使用我在会话中的行 ID 的数组记录,我想在上面的选择上放置一个 where 条件
WHERE qid != $_SESSION['xy']
问题是我必须循环此会话以将每个值与语句进行比较。而且题目是20道题,以后可以扩充。
【问题讨论】: