Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    19

    php scelta random di candidati

    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!

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Prendi tutti i risultati della query, senza limit, li metti in un array, passi l'array alla funzione php shuffle() e poi mostri i primi "limit" elementi dell'array.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2013
    Messaggi
    19
    Sì, è quello a cui penso.
    Ma non riesco ad implementarlo. Tu sapresti come fare?

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.