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

Un Abbonamento per Tutti i Software

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

1 anno ago

Software di Magazzino Gratuito

MerciGest è un software per la gestione del magazzino completamente gratuito. Continua a leggere→

1 anno ago

Mettere il PC in Lock Screen

In ufficio può capitare di doversi allontanare dal proprio posto di lavoro, ecco che allora…

3 anni ago

Fare il reset togliendo la corrente

In questo articolo vedremo quando è più o meno utile togliere la corrente ad un…

3 anni ago

Prossimi Aggiornamenti Software

Dopo la pausa invernale dovuta al lavoro che devo fare per sostentarmi, eccomi di nuovo…

3 anni ago

Come Eliminare i Files in Windows

Vediamo come eliminare i files direttamente da Windows senza utilizzare il cestino. Continua a leggere→

4 anni ago