Я работал с 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>
Я поместил идентификатор каждой строки в массив сеанса, чтобы я мог записать все предыдущие вопросы и
что я могу сравнить, если новый вопрос уже задан, используя in_array.
Проблема в том, что если новые данные выборки уже находятся в массиве, программа останавливается, поскольку у меня все еще нет другого значения,
[идея-01]
Я подумываю над тем, чтобы добавить новый оператор select в else, но я знаю, что это неправильно, потому что оно внутри цикла, и нет уверенности в том, что значение будет уникальным.
[идея-02]
С записями массива идентификаторов строк, которые я имею в сеансе, я подумываю поставить условие where для выбора выше
WHERE qid != $_SESSION['xy']
Проблема в том, что я должен зациклить этот сеанс, чтобы сравнить каждое значение с утверждением. Также вопрос состоит из 20 пунктов и может быть расширен в будущем.