Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: questionario in php

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    31

    questionario in php

    Salve a tutti

    avrei bisogno di sviluppare un questionario on-line in php, senza database,che visualizzi una domanda alla volta con un bottone "Prossima" per accedere alla prox domanda.
    Dopodichè tutte le risposte vanno su foglio excel...

    Adesso come posso risolvere la questione di far apparire una domanda alla volta?

    per il foglio excel ho letto che basta produrre una tabella HTML e esportare il file in formato xls una volta aperto lo visualizzerà correttamente, è vero?

    grazie in anticipo

  2. #2
    x il file excel nn sn informato, ma penso esistano delle classi del php che lo creino...
    per le domande il metodo è abbastanza semplice.
    Ti crei un array multidimensionale con domande e risposte e poi passi di pagina in pagina caricando quella parte di array che ti serve... faccio un esempio che è mejo

    $data[0]['domanda'] <-carica la prima domanda
    $data[3]['numerorisp'] <-carica il numero delle risposte da caricare nel 4° quesionario
    $data[6][2] <-carica la risposta 3 del terzo questionario

    facendo così tu ti fai un array con tutte le info del questionario.
    poi le risposte date dall'utente le salvi in un file e quando hai bisogno del documento excel, si estrae da quel file e si mette nel file excel...

    se non conosci molto bene il php e vuoi che ti faccio un esempio di script (almeno x il questionario, poi x l'excel s vedrà) chiedimi pure...

    ciauz Mix ^^

    Errare e' umano, ma per fare veramente casino serve la password di root.
    Coltiva Linux........Tanto windows si impianta da solo!!!!!
    PHP 4 Ever

  3. #3
    Utente di HTML.it L'avatar di dararag
    Registrato dal
    Jan 2008
    Messaggi
    434
    scusa, ma non ho capito perchè serve tutto questo, può fare delle pagine in html che si inviano valori post con le risposte, li inseriscono in campi nascosti, quindi li inviano alla pagina successiva, fino alla fine, quando l'ultima pagina li salva in un file. le domanda invece saranno scritte già nei file

  4. #4
    facendolo in php è possibile variare il contenuto facilmente e il file è uno solo nel quale cambia sl il contenuto... permettimi di dire ke è molto + semplice da realizzare... e se ad esempio devi cambiare la grafica a tutti, apri tutti i file html???

    Errare e' umano, ma per fare veramente casino serve la password di root.
    Coltiva Linux........Tanto windows si impianta da solo!!!!!
    PHP 4 Ever

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    31
    grazie 1000 Mix , per l'offerta che accetto ben volentieri, in effetti sono ancora un principiante in php e ti confesso che alcune linee di codice mi aiuterebbero parecchio.

    Ringrazio anche dararag , ma in effetti Mix ha centrato il problema, ovvero essendo un questionario di 30 domande + o - diventa troppo difficile creare 30 pagine...

  6. #6
    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

    Errare e' umano, ma per fare veramente casino serve la password di root.
    Coltiva Linux........Tanto windows si impianta da solo!!!!!
    PHP 4 Ever

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    31
    Mix,

    sono veramente rimasto senza parole!

    non sò come ringraziarti...è proprio quello che cercavo...

    è perfetto,semplice snello e funzionale. grazie 1000 sei un grande

  8. #8
    Utente di HTML.it L'avatar di dararag
    Registrato dal
    Jan 2008
    Messaggi
    434
    si, effettivamente sono bravo col php, ma non ho mai fatto script così grandi, non ci avevo pensato.

  9. #9
    beh insomma, se reputi grande uno script così... fatto in 1 oretta... mi sa ke nn hai mai lavorato con dei progetti veramente grossi... hai mai guardato il sorgente di un forum? quello è un progetto grande...

    Errare e' umano, ma per fare veramente casino serve la password di root.
    Coltiva Linux........Tanto windows si impianta da solo!!!!!
    PHP 4 Ever

  10. #10
    Utente di HTML.it L'avatar di dararag
    Registrato dal
    Jan 2008
    Messaggi
    434
    no, per il momento l'ho utilizzato per script un pò piccoli, non mi è mai servito molto, solo ora lo sto utilizzando di più, ieri ci ho lavorato per 24 ore

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.