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.