e rieccome... finiti gli script, ho fatto tutto completo:
abbiamo il file index.php che si occupa di fare le domande e salvarle nel file
poi abbiamo i due php per l'esportazione in excel (export.php e export_scritta.php=
infine abbiamo due file di "sistema" ovvero data.dat che è il file che contiene le risposte date dagli utenti e quesiti.php che contiene le domande e risposte che lo script porrà all'utente.
Il funzionamento è molto semplice, basta editare le domande nel file di configurazione, lo schema logico è abbastanza semplice, abbiamo:
codice:
$data['ndomande'] = 3;
Indica il numero di domande che si vogliono fare, nell'esempio 3
codice:
$data[0]['domanda'] = "domanda 1";
$data[0]['nrisp'] = 3;
$data[0]['default'] = 0;
$data[0][0]['nome'] = "risposta 1a";
$data[0][1]['nome'] = "risposta 2a";
$data[0][2]['nome'] = "risposta 3a";
$data[0][2]['tipo'] = "testo";
abbiamo il testo i una domanda, la domanda di per se si trova in $data[0]['domanda'], poi c'è $data[0]['nrisp'] che indica il numero di risposte che sono possibili. $data[0]['default'] indica qual'è la riposta selezionata di default (devi partire a contare da 0) e infine abbiamo le domande
ogni domanda ha un numero, sequenziale, partendo da 0 fino ad un numero meno di nrisp.
Per ogni domanda puoi specificare il nome e il tipo, di tipi ce ne sn 3, testo (area di testo), campo (campo) e nessuno (c'è solo la checkbox).
Per le altre domande basta variare il primo numero (in questo caso 0) di $data[0]
Alcune di quelle variabili è obbligatorio metterle e sono
$data['ndomande']
$data[n]['domanda']
$data[ndom][nrisp]['nome']
le altre sono facoltative.
Una volta configurato il quesiti.php basta dare in giro l'url con l'index.php.
Per esportare i dati basta andare su export.php o export_scritte.php, la differenza fra i due è che il primo esporta con i numeri ovvero, se si è selezionato la seconda risposta, apparirà 1 nella casella, e se c'era un testo da inserire apparirà 1: testo.
Mentre export_scritte, mette al posto del numero, la risposta testuale che appare quando si fa il quesito.
Questi sono i file:
index.php
Codice PHP:
<?php
/***************************************\
| |
| Script per questionari |
| By Mix |
| [email]djmix@email.it[/email] |
| |
\***************************************/
//dichiaro come mi chiamo ^^
$me = $_SERVER['PHP_SELF'];
//inizializzo gli input
$in = array_merge($_GET,$_POST,$_COOKIE);
//includo i dati
include("quesiti.php");
//avvio la sessione
session_start();
//gestione della sessione nel caso in cui i cookie sono disabilitati
if(IsSet($_POST['PHPSESSID']) && !IsSet($_COOKIE['PHPSESSID'])){
$PHPSESSID=$_POST['PHPSESSID'];
header("Location: $me?PHPSESSID=$PHPSESSID");
}
//controllo se è presente un risultato precedente
if($in['dom'] != ""){
//guarda se era stato selezionato un campo o un area di testo
if($data[$in['dom']][$in['sel']]['tipo'] == "testo" || $data[$in['dom']][$in['sel']]['tipo'] == "campo")
$_SESSION['risp'][$in['dom']] = $in['sel'].": ".$in['text_'.$in['sel']];
else
$_SESSION['risp'][$in['dom']] = $in['sel'];
}
//imposta a 0 la domanda se non è specificata
$dom = $in['d'] ? $in['d'] : 0;
//genero il percorso x la prossima domanda
$url = $me."?d=".($dom+1);
//se bisogna lanciare un header o mettere un intestazione la si stampa da qui
$htm = "<html><head></head><body><form action='{$url}' method='post'>";
//controlla se il questionario è finito
if($dom>=$data['ndomande']){
if($_SESSION['risp'][$in['dom']]){
$rsp = $_SESSION['risp'];
ksort($rsp);
file_put_contents("dati.dat",serialize($rsp)."|^*^|",FILE_APPEND);
}
unset($_SESSION['risp']);
die("Il questionario è finito!!!");
}
//genero il questionario
$dat = $data[$dom];
$htm .= "<h1>Domanda: ".$dat['domanda']."</h1>
";
for($i=0;$i!=$dat['nrisp'];$i++){
if($dat['default'] == $i)
$htm .= "<input type='radio' id='sel' name='sel' value='{$i}' CHECKED>{$dat[$i]['nome']}
";
else
$htm .= "<input type='radio' id='sel' name='sel' value='{$i}'>{$dat[$i]['nome']}
";
if($dat[$i]['tipo']=="testo")
$htm .= "<textarea id='text_{$i}' name='text_{$i}' cols=30 rows=5></textarea>
";
if($dat[$i]['tipo']=="campo")
$htm .= "<input id='text_{$i}' name='text_{$i}'>
";
}
$htm .= "
<input type='submit' value='Invia'><input type='hidden' name='dom' value='{$dom}'><input type='hidden' name='PHPSESSID' value='{$in['PHPSESSID']}'></form></body></html>";
//stampo il tutto
echo($htm);
?>
quesiti.php (esempio)
Codice PHP:
<?php
/***************************************\
| |
| Script per questionari |
| By Mix |
| [email]djmix@email.it[/email] |
| |
\***************************************/
$data['ndomande'] = 3;
$data[0]['domanda'] = "domanda 1";
$data[0]['nrisp'] = 3;
$data[0]['default'] = 0;
$data[0][0]['nome'] = "risposta 1a";
$data[0][1]['nome'] = "risposta 2a";
$data[0][2]['nome'] = "risposta 3a";
$data[0][2]['tipo'] = "testo";
$data[1]['domanda'] = "domanda 2";
$data[1]['nrisp'] = 2;
$data[1]['default'] = 1;
$data[1][0]['nome'] = "risposta 1b";
$data[1][1]['nome'] = "risposta 2b";
$data[2]['domanda'] = "domanda 3";
$data[2]['nrisp'] = 4;
$data[2]['default'] = 3;
$data[2][0]['nome'] = "risposta 1c";
$data[2][1]['nome'] = "risposta 2c";
$data[2][2]['nome'] = "risposta 3c";
$data[2][3]['nome'] = "risposta 4c";
$data[2][3]['tipo'] = "campo";
?>
export.php
Codice PHP:
<?php
/***************************************\
| |
| Script per questionari |
| By Mix |
| [email]djmix@email.it[/email] |
| |
\***************************************/
//invio l'header
$nomefile=$_GET['nomefile'].".xls";
header ("Content-Type: application/vnd.ms-excel");
header ("Content-Disposition: inline; filename=$nomefile");
//includo i dati
include("quesiti.php");
//carico il file
$file = file_get_contents("dati.dat");
//divido le varie riposte
$dati = explode("|^*^|",$file,-1);
//inizio tabella
$htm = "<table><tr>";
//genero campi sopra alla tabella
for($i=0;$i!=$data['ndomande'];$i++)
$htm .= "<td>".$data[$i]['domanda']."</td>";
//fine prima riga tabella
$htm .= "</tr>";
//ciclo ke passa le risp
foreach($dati as $dat){
$val = unserialize($dat);
$htm .= "<tr>";
foreach($val as $tab)
$htm .= "<td>".$tab."</td>";
$htm .= "</tr>";
}
$htm .= "</table>";
echo($htm);
?>
export_scritta.php
Codice PHP:
<?php
/***************************************\
| |
| Script per questionari |
| By Mix |
| [email]djmix@email.it[/email] |
| |
\***************************************/
//invio l'header
$nomefile=$_GET['nomefile'].".xls";
header ("Content-Type: application/vnd.ms-excel");
header ("Content-Disposition: inline; filename=$nomefile");
//includo i dati
include("quesiti.php");
//carico il file
$file = file_get_contents("dati.dat");
//divido le varie riposte
$dati = explode("|^*^|",$file,-1);
//inizio tabella
$htm = "<table><tr>";
//genero campi sopra alla tabella
for($i=0;$i!=$data['ndomande'];$i++)
$htm .= "<td>".$data[$i]['domanda']."</td>";
//fine prima riga tabella
$htm .= "</tr>";
//indicizzo i contatori
$z=0;
//ciclo ke passa le risp
foreach($dati as $dat){
$val = unserialize($dat);
$htm .= "<tr>";
foreach($val as $tab){
$y = intval(substr($tab,0,1));
if(substr($tab,1,1)==":")
$str = $data[$z][$y]['nome'].substr($tab,1);
else
$str = $data[$z][$y]['nome'];
$htm .= "<td>".$str."</td>";
$z++;
}
$htm .= "</tr>";
$z=0;
}
$htm .= "</table>";
echo($htm);
?>
Per vedere lo script in azione puoi andare qui e per scaricare i file come sono li, puoi scaricarti il pacchetto zip qui.
Un ultima raccomandazione molto importante riguarda il file data.dat:
esso deve essere scrivibile dal php, quindi va impostato con il chmod a 0777.
Per cancellare tutte le risposte acquisite fino a quel momento (quando magari scarichi l'excel) basta che entri nel file e cancelli tutto e poi salvi... è molto importante ke il file ci sia e sia scrivibile, altrimenti darà errore lo script.
(io non ho previsto una gestione degli errori dello script, quindi ogni minima cosa fatta in modo leggermente diverso potrebbe portare a un non funzionamento dello script)
se poi hai altre domande o problemi, contatta pure,
Ciauz Mix