Categories: PHP

Domande e Risposte in una Pagina PHP

In uno scorso articolo avevamo posto le basi per creare un questionario utilizzando pagine PHP, in questo articolo vedremo come visualizzare le domande ed ottenere le risposte, immagazzinando il punteggio fatto fino a quel momento, alla fine della prova chiederemo di inserire un nickname e salveremo il tutto in un’altra tabella della classifica finale.
Tutte le operazioni verranno effettuate in un’unica pagina dinamica, vediamone il codice per prelevare i valori e proporre le domande ed immagazzinare il valore delle risposte:

<?php
   $hostname = "mio_host";
   $database = "mio_database";
   $username = "mio_utente";
   $password = "mia_password";

   $domande = mysql_connect($hostname, $username, $password)
       or trigger_error(mysql_error(),E_USER_ERROR);
   mysql_select_db($database, $domande);

   $argomento = $_REQUEST['argomento'];
   if (strlen($argomento) <= 0)
   {
      mysql_close($domande);
      header("location:../");
      exit();
   }

   $nDomanda = $_REQUEST['numdomanda'];
   if (strlen($nDomanda) <= 0)
     $nDomanda = 0;

   $bFinish = false;
   if ($nDomanda >= 10000)
      $bFinish = true;

   mysql_select_db($database, $domande);

   $bError = false;
   if (!$bFinish)
   {
      $domande_set = mysql_query("SELECT * FROM Domande
         WHERE Argomento = ".$argomento." ORDER BY Domanda", $domande)
          or die(mysql_error());
      $row_domande = mysql_fetch_assoc($domande_set);
      $num_domande = mysql_num_rows($domande_set);

      if ($num_domande <= 0)
      {
          mysql_free_result($domande_set);
          mysql_close($domande);
          header("location:../");
          exit();
       }

       $bDomanda = true;
       if ($nDomanda <= $num_domande)
       {
           for ($i = 1; $i < $nDomanda; $i++)
 $row_domande = mysql_fetch_assoc($domande_set);
       }
       else
           $bDomanda = false;

       $nDomanda++;

       $punteggio = $_REQUEST['punteggio'];
       if (strlen($punteggio) <= 0)
         $punteggio = 0;

       $vRisposta = $_REQUEST['vRisposta'];
       if (strlen($vRisposta) <= 0)
           $vRisposta = 0;

       $punteggio += $vRisposta;
   }
   else
   {
       $punteggio = $_REQUEST['punteggio'];
        if (strlen($punteggio) <= 0)
 $punteggio = 0;

        $strNome = $_REQUEST['nome'];
        if (strlen($strNome) > 0)
           mysql_query("INSERT INTO Classifica (Nome, Punteggio,
               Argomento) VALUES(".$strNome."', ".$punteggio.", ".
               $argomento.")", $domande) or die(mysql_error());
        else
          $bError = true;
   }
?>

Occorre prendere le domande a seconda dell’argomento scelto fino a quando non siamo arrivati all’ultimo record, come limiti imponiamo zero per la pagina di inizio e 10000 (cifra che difficilmente si supererà) per la pagina di fine. Alla pagina di presentazione mettiamo zero per il contatore del punteggio, mentre nella pagina finale inseriamo il totale calcolato nella tabella della classifica, nelle altre pagine incrementiamo il nostro totalizzatore.

<table width="500" align="center" cellpadding="0"
       cellspacing="0" border="0">
<tr>
   <td align="center">
<?php
   switch ($argomento)
   {
   case 1:
      $str_argomento = "Java";
      break;
   case 2:
      $str_argomento = "C/C++";
      break;
   ...
   }

   if (!$bFinish)
   {
      if ($nDomanda == 1)
     {
        echo '<p align="center">Benvenuto nel questionario su '.
            $str_argomento.' rispondi alle domande e vedi il tuo
            punteggio</p><br><br>';
        echo '<form action="#" method="POST" name="questionario">';
 echo '<input type="submit" name="invia" id="invia"
             title="Inizia Prova" value="Inizia Prova">';
        echo '<input type="hidden" name="argomento"
             id="argomento" value="'.$argomento.'">';
        echo '<input type="hidden" name="XXX" id="XXX"
            value="'.$punteggio.'">';
        echo '<input type="hidden" name="XXX" id="XXX"
            value="'.$nDomanda.'">';
        echo '</form>';
      }
     else
     {
         if ($bDomanda)
         {
 echo '<p align="left">';
 echo '<b>'.$row_domande['Domanda'].
                 '</b></p><br><br>';
 echo '<form action="#" method="POST"
                  name="questionario">';
 echo '<div align="left"><input type="radio"
                  name="vRisposta" id="vRisposta" title="Prima risposta"
                  value="'.$row_domande['Valore1'].'">'.
                  $row_domande['Risposta1'].'</div>';
 echo '<br>';
 echo '<div align="left"><input type="radio" name="vRisposta"
                  id="vRisposta" title="Seconda risposta" value="'.
                  $row_domande['Valore2'].'">'.
                  $row_domande['Risposta2'].'</div>';
 echo '<br>';
 echo '<div align="left"><input type="radio"
                name="vRisposta" id="vRisposta" title="Terza risposta"
                value="'.$row_domande['Valore3'].'">'.
                $row_domande['Risposta3'].
                '</div>';
 echo '<br><br><input type="submit"
                  name="invia" id="invia" title="Avanti" value="Avanti >>"
                  ><br><br>';
 echo '<input type="hidden" name="argomento" id="argomento"
                  value="'.$argomento.'">';
 echo '<input type="hidden" name="XXX" id="XXX"
                  value="'.$punteggio.'">';
 echo '<input type="hidden" name="XXX" id="XXX"
                   value="'.$nDomanda.'">';
 echo '</form>';
         }
         else
         {
 echo '<p align="center">Il tuo punteggio nel questionario su
              '.$str_argomento.' è: <b>'.$punteggio.'</b></p>';
 echo '<form action="#" method="POST" name="utente">';
 echo 'Inserisci il tuo nome: <input type="text" name="nome"
                id="nome" value="" size="25" maxlength="50"><br><br>';
 echo '<br><br><input type="submit" name="invia"
               id="invia" title="Memorizza Prova"
               value="Memorizza Punteggio">';
 echo '<input type="hidden" name="argomento"
               id="argomento" value="'.$argomento.'">';
 echo '<input type="hidden" name="XXX"
               id="XXX" value="'.$punteggio.'">';
 echo '<input type="hidden" name="XXX"
               id="XXX" value="10000">';
 echo '</form>';
       }
    }
}
else
{
   if ($bError)
     echo '<p align="center">Errore nella memorizzazione
          del punteggio!</p><br><br>';
   else
      echo '<p align="center">Il suo punteggio è stato
         memorizzato con successo!<br>Vedi la <a
         href="classifica.php?argomento='.$argomento.'">classifica</a>
        .</p><br><br>';
   }
  ?>
  </td>
  </tr>
</table>

Come è possibile osservare dal codice, viene costruita una diversa cella della tabella a seconda se siamo nella pagina di benvenuto, nelle pagine delle domande o nella pagina finale. Da sottolineare che ci portiamo dietro il punteggio parziale, l’argomento trattato ed il numero della domanda (ordinate alfabeticamente) a cui siamo arrivati. Non penso ci siano delle grandi difficoltà ed indubbiamente è possibile migliorare il codice ed ottimizzarlo, per cui se avete delle idee potete suggerirle nei commenti o nel forum. Se volete partecipare ad un questionario di informatica, in alto, nel menu, potete visitare la pagina “Questionari Informatici”, creata come spiegato in questi due articoli.

<< Lezione PrecedenteLezione Successiva >>

Share
Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.

Published by
Giampaolo Rossi

Recent Posts

MerciGest: il gestionale di magazzino semplice e gratuito

MerciGest è il software gestionale gratuito per Windows che semplifica la gestione del magazzino: giacenze,…

5 giorni ago

Software gestionali con SQL Server: un archivio unico, accessibile ovunque

Tutti i nostri software gestionali possono essere collegati a un database SQL Server, consentendo l’accesso…

6 giorni ago

Come iniziare ad usare MerciGest in 5 minuti

MerciGest è semplice e immediato: basta scaricare e installare il programma per iniziare subito. Al…

1 settimana ago

Cos’è MerciGest e a chi serve

MerciGest è un gestionale di magazzino per Windows pensato per negozi, piccole imprese e artigiani…

2 settimane ago

Introduzione alla Standard Template Library (STL)

La Standard Template Library (STL) è una delle componenti più potenti del C++. Fornisce una…

7 mesi ago

Un Abbonamento per Tutti i Software

Sono arrivato alla convinzione che un abbonamento per tutti i miei software gestionali sia il…

2 anni ago