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