Codice PHP:
<?php
session_start();
//php-stats
define('__PHP_STATS_PATH__','/var/www/html/stats/');
include(__PHP_STATS_PATH__.'php-stats.redir.php');
//mi connetto al database e alle funzioni comuni
include_once ("include/connessione_db.php");
include_once ("include/funzioni_comuni.php");
tag_iniziali("vostri_test", $db);
//se non ci sono titolo_var e num_dom, dà l'errore
if(!$_GET['titolo_var'] || !$_GET['creato_da'])
{
errore("Mancano le variabili");
}
else
{
$query='SELECT * FROM test WHERE titolo_var="'.$_GET['titolo_var'].'" AND creato_da="'.$_GET['creato_da'].'"';
$result=mysql_query($query, $db);
if(mysql_num_rows($result)!=1)
{
errore("Test inesistente! Contatta il webmaster");
}
else
{
$array_titolo=mysql_fetch_array($result);
echo '<h1>Test: "'.$array_titolo['titolo'].'"<br>Creato da '.$array_titolo['creato_da'].'</h1><br>';
}
}
//se c'è il nickname salva la sessione
if($_POST['nickname'])
{
$_SESSION['nickname']=$_POST['nickname'];
Header('Location: '.$_SERVER['REQUEST_URI']);
}
//altrimenti incomincia il gioco
if($_SESSION['nickname'])
{
//conto i punti se ci sono punti da contare
if($_POST['num_dom'])
{
$query='SELECT * FROM test_domande WHERE titolo_var="'.$_GET['titolo_var'].'" AND creato_da="'.$_GET['creato_da'].'" AND num_dom="'.$_POST['num_dom'].'"';
$result=mysql_query($query, $db);
$array_dom=mysql_fetch_array($result);
$array_risp=explode("<br>", $array_dom['risposte']);
$array_punti_risp=explode("<br>", $array_dom['punti_risposte']);
//se non c'è la risposta, 0 punti
if(!$_POST['risposta'])
{
//cancello la eventuale domanda già stata inserita prima
$query2='DELETE FROM test_temp WHERE titolo_var="'.$array_dom['titolo_var'].'" AND utente="'.$_SESSION['nickname'].'" AND num_dom="'.$array_dom['num_dom'].'"';
$result2=mysql_query($query2, $db);
//salvo i punti
$query2='INSERT INTO test_temp (titolo_var, utente, num_dom, punti_risposta) VALUES ("'.$array_dom['titolo_var'].'", "'.$_SESSION['nickname'].'", "'.$array_dom['num_dom'].'", "0")';
$result2=mysql_query($query2, $db);
}
//altrimenti verifico se ha dato la risposta esatta
else
{
for($verifica=0; $verifica<count($array_risp); $verifica++)
{
if($_POST['risposta']==$array_risp[$verifica])
{
//cancello la eventuale domanda già stata inserita prima
$query2='DELETE FROM test_temp WHERE titolo_var="'.$array_dom['titolo_var'].'" AND utente="'.$_SESSION['nickname'].'" AND num_dom="'.$array_dom['num_dom'].'"';
$result2=mysql_query($query2, $db);
//salvo i punti
$query2='INSERT INTO test_temp (titolo_var, utente, num_dom, punti_risposta) VALUES ("'.$array_dom['titolo_var'].'", "'.$_SESSION['nickname'].'", "'.$array_dom['num_dom'].'", "'.$array_punti_risp[$verifica].'")';
$result2=mysql_query($query2, $db);
}
}
}
//passo alla domanda successiva
$_POST['num_dom']++;
}
//altrimenti inizio il test
else
{
$_POST['num_dom']=1;
}
//scrivo la domanda
$query='SELECT * FROM test_domande WHERE titolo_var="'.$_GET['titolo_var'].'" AND creato_da="'.$_GET['creato_da'].'" AND num_dom="'.$_POST['num_dom'].'"';
$result=mysql_query($query, $db);
//se non pesca una sola domanda dà l'errore
if(mysql_num_rows($result)>1)
{
errore("Troppe domande. Contatta il webmaster!");
}
//se non pesca neanche una domanda vuol dire che il test è finito oppure che non esiste
elseif(!mysql_num_rows($result))
{
//se num_dom=1 vuol dire che non riesce a pescare neanche la prima domanda, cioè il test non esite
if($_POST['num_dom']==1)
{
errore("Il test non esiste! Contatta il webmaster per favore.");
}
//calcolo la somma dei punti ed esco
$query2='SELECT * FROM test_temp WHERE titolo_var="'.$array_dom['titolo_var'].'" AND utente="'.$_SESSION['nickname'].'"';
$result2=mysql_query($query2, $db);
$punteggio_totale=0;
for($calcola=0; $calcola<mysql_num_rows($result2); $calcola++)
{
$array_punteggio_totale=mysql_fetch_array($result2);
$punteggio_totale=$punteggio_totale+$array_punteggio_totale['punti_risposta'];
}
//salvo l'utente in classifica
$query3='DELETE FROM test_classifica WHERE titolo_var="'.$array_dom['titolo_var'].'" AND utente="'.$_SESSION['nickname'].'"';
$result3=mysql_query($query3, $db);
$query3='INSERT INTO test_classifica (titolo_var, utente, punti) VALUES ("'.$array_dom['titolo_var'].'", "'.$_SESSION['nickname'].'", "'.$punteggio_totale.'")';
$result3=mysql_query($query3, $db);
//cancello le righe interessate
$query3='DELETE FROM test_temp WHERE titolo_var="'.$array_dom['titolo_var'].'" AND utente="'.$_SESSION['nickname'].'"';
$result3=mysql_query($query3, $db);
//dico il punteggio
echo '<h2>Hai totalizzato '.$punteggio_totale.' punti su '.(mysql_num_rows($result2)*10).'!</h2><br><br>';
if($punteggio_totale==(mysql_num_rows($result2)*10))
{
echo '<h3>Complimenti!</h3><br><br>';
}
else
{
echo '<h3>Non ti dico cosa hai sbagliato perchè se no lo rifai e vinci... :-P</h3><br><br>';
}
echo'<h2>Classifica per questo test:</h2><br>';
$query3='SELECT * FROM test_classifica WHERE titolo_var="'.$array_dom['titolo_var'].'" AND creato_da="'.$_GET['creato_da'].'" ORDER BY punti DESC, data_inserimento ASC';
$result3=mysql_query($query3, $db);
echo '<table border="0" cellspaging="10">';
for ($scrivi=1; $scrivi<=mysql_num_rows($result3); $scrivi++)
{
$array_classifica=mysql_fetch_array($result3);
echo '<tr><td align="right"><h2>'.$scrivi.')</h2></td><td><h2>'.$array_classifica['utente'].'</h2></td><td style="padding-left:80px;"><h3>'.$array_classifica['punti'].'</h3></td></tr>';
}
echo '</table>';
}
//altrimenti, se pesca una sola domanda, scrive il test
elseif(mysql_num_rows($result)==1)
{
$array_dom=mysql_fetch_array($result);
$array_risp=explode("<br>", $array_dom['risposte']);
echo '
<form name="Domanda '.$array_dom['num_dom'].'" action="'.$_SERVER['REQUEST_URI'].'" method="post">
<input type="hidden" name="num_dom" value="'.$array_dom['num_dom'].'">
<h2>Domanda '.$array_dom['num_dom'].':</h2><br><h3>'.$array_dom['domanda'].'</h3><br><br><br>';
//legge le risposte disponibili e le scrive
echo '<table border="0">';
for($scrivi=1; $scrivi<count($array_risp); $scrivi++)
{
echo '<tr><td><h2>Opzione '.$scrivi.':</td><td align="left"><input type="radio" name="risposta" value="'.$array_risp[$scrivi-1].'"> <h3>'.$array_risp[$scrivi-1].'</h3></td></tr>';
}
echo '</table>';
//controllo se c'è una domanda successiva
$query2='SELECT * FROM test_domande WHERE titolo_var="'.$_GET['titolo_var'].'" AND creato_da="'.$_GET['creato_da'].'" AND num_dom="'.($array_dom['num_dom']+1).'"';
$result2=mysql_query($query2, $db);
//se pesca una domanda vuol dire che c'è la domanda successiva, quindi scrive di proseguire
if(mysql_num_rows($result2)==1)
{
echo '
<br><input type="submit" value="Prosegui con la domanda '.($array_dom['num_dom']+1).'">
</form>';
}
elseif(!mysql_num_rows($result2))
{
echo '
<br><input type="submit" value="Prosegui verso la fine del test">
</form>';
}
elseif(mysql_num_rows($result2)>1)
{
errore("Troppe domande (2). Contatta il webmaster!");
}
}
}
elseif(!$_SESSION['nickname'] && !$_POST['classifica'])
{
//scrive il modulo per giocare al test
echo '
<form name="scrivi_nick" action="'.$_SERVER['REQUEST_URI'].'" method="post">
<h2>Scegli un nickname: </h2><input type="text" name="nickname" value="" maxlength="30"><br><br>
<input type="submit" value="Inizia il test">
</form>
';
//scrive il pulsante per la classifica
echo '
<form name="classifica" action="'.$_SERVER['REQUEST_URI'].'" method="post">
<input type="submit" name="classifica" value="Visualizza la classifica">
</form>
';
}
elseif(!$_SESSION['nickname'] && $_POST['classifica'])
{
echo'<h2>Classifica per questo test:</h2><br>';
$query='SELECT * FROM test_classifica WHERE titolo_var="'.$_POST['titolo_var'].'" AND creato_da="'.$_GET['creato_da'].'" ORDER BY punti DESC, data_inserimento ASC';
$result=mysql_query($query, $db);
echo '<table border="0" cellspaging="10">';
for ($scrivi=1; $scrivi<=mysql_num_rows($result); $scrivi++)
{
$array_classifica=mysql_fetch_array($result);
echo '<tr><td align="right"><h2>'.$scrivi.')</h2></td><td><h2>'.$array_classifica['utente'].'</h2></td><td style="padding-left:80px;"><h3>'.$array_classifica['punti'].'</h3></td></tr>';
}
echo '</table>';
}