Ho una raccolta di file di testo (ciascun file contiene un esercizio di grammatica), e una tabella del database dove i file sono descritti in base a tre variabili: topic, tense e type.
Utilizzando un form PHP, gli utenti possono selezionare topic, tense e type che desiderano, e visualizzare i file che corrispondono alla loro ricerca. Il numero massimo dei file visualizzati corrisponde alla variabile $limit.
Codice PHP:
if(isset($_POST['limit'], $_POST['topic'], $_POST['tense'], $_POST['type']))
{
$counter = 0;
$limit = intval($_POST['limit']);
$result = '';
foreach ($_POST['topic'] as $key_topic => $value_topic)
{
foreach ($_POST['tense'] as $key_tense => $value_tense)
{
foreach ($_POST['type'] as $key_type => $value_type)
{
$q_to_te_ty = "SELECT * FROM items WHERE topic = '".$value_topic."' AND tense = '".$value_tense."' AND type = '".$value_type."' ORDER BY RAND()";
$qu_to_te_ty = mysql_query($q_to_te_ty);
while ($rows = mysql_fetch_array($qu_to_te_ty) and ($counter < $limit))
{
$result = $rows['file'];
readfile("files/$result");
echo "----------------------------------------"."\n"."\n";
$counter++;
}
}
}
}
if(!$result)
{
echo "SORRY. There are no exercises in the database which match your search."."\n"."Please try selecting different values.";
}
}
else
{
echo "ERROR: You forgot to check something."."\n"."Please select at least one type, topic and tense value. And don't forget to set a number of exercises.";
}
?>
Tutto funziona bene, ma c'è un piccolo problema: lo script sfoglia la tabella da cima a fondo, estraendo i file desiderati, e si ferma quando raggiunge il numero $limit.
In questo modo però le righe in fondo alla tabella non vengono mai prese in considerazione. In altre parole, ho bisogno di mescolare i risultati candidati e poi estrarre un numero n (dove n=$limit). Ho pensato alla funzione SHUFFLE, ma non so come utilizzarla in questa situazione.
Grazie!