+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16

mantenere dati in form (check radio e menu drop down ) dopo submit

  1. #1
    sciagallone non è in linea Novello
    Salve a tutti
    ho un sito che propone una serie di domande a risposta multipla. L'utente deve selezionare la risposta che ritiene corretta con check "radio" e menu "drop down".

    visto che tutte le risposte sono obbligatorie ho creato un controllo in javascript in un'altra pagina che dopo il submit verifica che tutti i campi siano stati inseriti ed in caso di errore riporta alla finestra di risposta alle domande.
    Purtroppo ogni volta che ci si dimentica anche una sola spunta o selezione bisogna reinserire tutti i dati.

    la pagina che fa visualizzare le domande e le risposte è fatta in php e la struttura html è inserita in un for che la fa ripetere per il numero di domande richiesto (es. 5).

    Solitamente io per evitare questo problema usavo un codice del tipo:
    per check radio
    <code>
    1<$n<=4;
    <input type="radio" name="risposta$n" value="1" <?php if (isset($_POST['risposta$n']) && ($_POST['risposta$n'] == '1')) {echo 'checked = "checked"'; }?> />
    </code>

    per drop down
    <code>
    0<$i<=4
    <select name=\"val[$i]\">
    <option value=\"\" <?php if (isset($_SESSION['val[$i]']) && $_SESSION['val[$i]'] == '')echo ' selected="selected"';?>></option>
    <option value=\"0\"<?php if (isset($_SESSION['val[$i]']) && $_SESSION['val[$i]'] == '0')echo ' selected="selected"';?>
    >0</option>
    <option value=\"1\" <?php if (isset($_SESSION['val[$i]']) && $_SESSION['val[$i]'] == '1')echo ' selected="selected"';?>
    >1</option>
    <option value=\"2\" <?php if (isset($_SESSION['val[$i]']) && $_SESSION['val[$i]'] == '2')echo ' selected="selected"';?>
    >2</option>
    <option value=\"3\" <?php if (isset($_SESSION['val[$i]']) && $_SESSION['val[$i]'] == '3')echo ' selected="selected"';?>>3</option>
    <option value=\"4\" <?php if (isset($_SESSION['val[$i]']) && $_SESSION['val[$i]'] == '4')echo ' selected="selected"';?>>4</option>
    </select>
    </code>
    ma in questo caso non funziona nessuno dei due.

    non ho capito se il problema sta nel fatto che nel mio programma l'html si trova all'interno di uno script php che lo fa girare in un ciclo for ricreando la tabella html (la struttura domanda e 4 opzioni di risposta per le volte che si desidera, nel mio caso 5)e quindi sbaglio qualcosa nello scrivere il codice

    ho provato:

    <code>
    <?php
    for(....)
    ...
    echo "<input type=\"radio\" name=\"risposta$n\" value=\"1\" "; ?> <?php if (isset($_POST['risposta$n']) && ($_POST['risposta$n'] == '1')) {echo 'checked = "checked"'; }?> <?php echo " />
    </code>

    pure:

    <code>
    <?php
    for(....)
    ...
    echo "<input type=\"radio\" name=\"risposta$n\" value=\"1\" if (isset($_POST['risposta$n']) && ($_POST['risposta$n'] == '1')) {echo 'checked = "checked"'; } " />
    </code>


    Qualcuno può darmi qualche dritta??? ho provato anche con $_SESSION al posto di $_POST....ma niente.
    il programma funziona e fa quello che voglio, solo questa questione del reinserire tutti i dati non so come risolverla....

  2. #2
    Zigo non è in linea Scribacchino
    Vediamo se ho capito..

    Come prima cosa ti consiglio di fare i controlli javascript "prima" di inviare i dati.
    Puoi usare l'evento unsubmit="" del tuo form, facendo ritornare false in caso di errore, ed evitare che venga inviato qualcosa se mancano delle risposte.
    Ti lascio un esempio al volo:

    <script type="text/javascript">
    function controllaModulo() {
    	if( !document.getElementById('r1').checked && !document.getElementById('r2').checked ) {
    		alert('Devi scegliere un colore!');
    		return false;
    	}
    	return true;
    }
    </script>
    <form name="tuoForm" action="#" method="post" onsubmit="return controllaModulo()">
       <input type="radio" name="colore" id="r1" value="1" /> Rosso<br />
       <input type="radio" name="colore" id="r2" value="2" /> Verde<br />
       <input type="submit" name="btn" value="Scegli un colore" />
    </form>
    
    Venendo invece alla questione del perchè quando torni indietro non ci sono più le cose compilate, dovresti postare un po del codice che utilizzi o sarà dura capire dove sta l'errore

    Eviterei cmq di fare tutta quella sbrodolata di "if" per controllare quale opzione è stata scelta..
    Piuttosto punta direttamente al valorizzato, e mostra una option in più compilata come desideri.
    ℹ️ Leggi di più su Zigo ...

  3. #3
    genespos non è in linea Scribacchino
    Ciao e perdonate l'intrusione perché la mia invece di essere una risposta è una domanda nella domanda (non ho competenze di PHP ma mi sto avvicinando al linguaggio)

    Sarebbe possibile aggiungere un controllo booleano ad ogni gruppo di radiobutton in modo che la selezione di un qualsiasi radiobutton di un gruppo porti il controllo a 1 cosicché l'evento click del submit potrebbe controllare che si sia data risposta a tutte le domande semplicemente sommando i booleani?

    In questo modo si potrebbe evitare di abbandonare la pagina (in caso di numero di risposte insufficiente) senza perdere le selezioni già effettuate?

    Se ho detto qualcosa di sciocco mi perdonerete ... come ho detto prima sto cercando di imparare.

    Ciao

  4. #4
    Zigo non è in linea Scribacchino
    Ciao

    Ma in realtà con i radio button ti basta controllare se hai un valore, perhè non puoi selezionarne più di uno.. quindi se il tuo _POST non è valorizzato non è stato selezionato niente, non serve controllare nulla.

    Anche nel mio esempio di prima, volevo mostrare a sciagallone un controllo "pre" invio dei dati, e non dopo.
    Ma ti basta:
    if( !empty($_POST['risposta']) ) {
       // fai quello che devi
    }
    
    Tra l'altro noto adesso nel post di sciagallone

    [..] <input type="radio" name="risposta$n" [..]
    che centra quel $n? devono avere tutti lo stesso nome per fare gruppo!

    @gene
    Il tuo discorso viene bene con le checkbox invece, dove la selezione è multipla, ma in ogni caso non puoi farlo in php perchè è un linguaggio lato server e tu stai applicando logica lato client.
    Come logica però è corretta, anche se io preferisco ciclare sulle selezioni e appena ne trovo una selezionata ho finito.
    Altrimenti ogni click deve preoccuparsi di mettere a 1 il tuo booleano, e di riportarlo a 0 se tolgo tutte le spunte.. non mischierei i controlli con le selezioni.

    Spero di avervi aiutato
    ℹ️ Leggi di più su Zigo ...

  5. #5
    genespos non è in linea Scribacchino
    Quote Originariamente inviato da Zigo Visualizza il messaggio
    ... non puoi farlo in php perchè è un linguaggio lato server e tu stai applicando logica lato client.
    Osservazione decisamente importante che dovrò approfondire per non commettere errori grossolani.

    Grazie mille

  6. #6
    sciagallone non è in linea Novello
    Ciao Zigo,
    grazie per aver risposta alla mia domanda.
    purtroppo io ho fatto i controlli javascript in una seconda pagina in locale sul pc funziona tutto, mentre sul server non vengono mantenuti i dati dei drop down , ma solo quelli delle radio.
    il nomi delle radio sono risposta$n perchè la tabella cicla un numero n di volte per visualizzare quante domande voglio.
    non ho capito come devo fare per fare i controlli javascript direttamente sulla pagina del form.

    <bbcode>

    <td > ";
    if ($n=="1"){ echo"<input type=\"radio\" name=\"risposta1\" value=\"1\" ";
    if(isset($_SESSION['risposta1']) && $_SESSION['risposta1'] =='1')echo 'checked="checked" />';}
    elseif ($n=="2"){echo"<input type=\"radio\" name=\"risposta2\" value=\"1\" ";
    if(isset($_SESSION['risposta2']) && $_SESSION['risposta2'] =='1')echo 'checked="checked" />';}
    elseif ($n=="3"){echo"<input type=\"radio\" name=\"risposta3\" value=\"1\" ";
    if(isset($_SESSION['risposta3']) && $_SESSION['risposta3'] =='1')echo 'checked="checked" />';}
    elseif ($n=="4"){echo"<input type=\"radio\" name=\"risposta4\" value=\"1\" ";
    if(isset($_SESSION['risposta4']) && $_SESSION['risposta4'] =='1')echo 'checked="checked"/>';}
    elseif ($n=="5"){echo"<input type=\"radio\" name=\"risposta5\" value=\"1\" ";
    if(isset($_SESSION['risposta5']) && $_SESSION['risposta5'] =='1')echo 'checked="checked"/>';}
    echo "
    </td>

    <td width=\"43\" align=\"center\" bgcolor=\"#FFFF00\" >
    <select name=\"valore1[$i]\">
    <option value=\"\"";
    if(is_null($val_1[$i]) && $val_1[$i] =='')echo 'selected="selected" ';
    echo"
    > </option>
    <option value=\"1\"";
    if(isset($val_1[$i]) && $val_1[$i] =='1')echo 'selected="selected" ';
    echo"
    >1</option>
    <option value=\"2\"";
    if(isset($val_1[$i]) && $val_1[$i] =='2')echo 'selected="selected" ';
    echo"
    >2</option>
    <option value=\"3\"";
    if(isset($val_1[$i]) && $val_1[$i] =='3')echo 'selected="selected" ';
    echo"
    >3</option>
    <option value=\"4\"";
    if(isset($val_1[$i]) && $val_1[$i] =='4')echo 'selected="selected" ';
    echo"
    >4</option>
    </select>
    </td>

    </bbcode>

    non riuscendo a gestire direttamente $_post e $_session con elementi array ho usato
    $val_1 = array_values($_POST['valore1']);
    $val_2 = array_values($_POST['valore2']);
    $val_3 = array_values($_POST['valore3']);
    $val_4 = array_values($_POST['valore4']);

    nel caso del cosice che ho postato qui sopra come dovrei fare i controlli javascript sullo stesso file senza inviare con il submit?

    grazie

  7. #7
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao sciagallone,

    Intervengo per sottolineare che è opportuno utilizzare i tag appositi [code] e [/code] o, in questo caso, anche [php] e [/php] attorno al codice, in modo da migliorare la leggibilità e di conseguenza la possibilità di ricevere risposte.
    ℹ️ Leggi di più su bottomap ...

  8. #8
    Zigo non è in linea Scribacchino
    Buongiorno

    @bottomap
    perchè non mettere un editor che faciliti l'utilizzo del bbcode? sarebbe molto utile! una volta c'era mi pare

    Tornando a noi..

    Il tuo codice javascript non importa dove lo metti, ci sono gli include e può stare anche su pagina diversa, basta che richiami la funzione che ti serve dal form che la deve utilizzare (guarda il mio esempio su).
    Tuttavia, una volta inviati i dati.. perchè li controlli in javascript?? se il modulo lo invii controllare lato client non ha più molto significato, controlla direttamente in php allora.

    Dovresti postare la tua pagina per intero, il pezzetto di codice che hai inserito non è utile a capire il problema.
    Provo cmq ad analizzarlo alla veloce:

    if(isset($_SESSION['risposta1']) && $_SESSION['risposta1'] =='1')
    isset() verifica solamente che la variabile non sia nulla, e cosa che cmq non ti serve xkè ne controlli un valore ben preciso, e ti basta quello.
    Anche come concetto secondo me non è il massimo, fai un if per ogni option... ma se la prima è già quella selezionata, a cosa ti serve continuare a controllare anche le altre?

    Provo a ripulirlo alla bene e meglio, vedi tu se ti viene utile:

    Codice PHP:
    <?php
    for( $i=1;$i<_tuo_valore;$i++ ) {
        if( 
    $_POST['valore'.$i] > )
             
    $opt_selezionata '<option selected="selected">'.$_POST['valore'.$i].'</option>';

        echo 
    '
    <select name="valore'
    .$i.'">
        '
    .$opt_selezionata.'
        <option>1</option>
        <option>2</option>
        <option>3</option>
        <option>4</option>
    </select>
        '
    ;
        
    $opt_selezionata "";
    }
    ?>
    Per approfondire serve per intero il tuo codice, sia la pagina che invia che quella che riceve.
    Es:
    usi le sessioni..
    la sessione è creata correttamente? come hai assegnato i valori?
    Magari non ti funziona xkè c'è un errorino in quello.. ma senza vedere tutto il codice non posso aiutarti di più

    ciao ciao
    ℹ️ Leggi di più su Zigo ...

  9. #9
    L'avatar di bottomap
    bottomap non è in linea Amanuense
    Ciao Zigo,

    Quote Originariamente inviato da Zigo Visualizza il messaggio
    @bottomap
    perchè non mettere un editor che faciliti l'utilizzo del bbcode? sarebbe molto utile! una volta c'era mi pare
    Il pulsante apposito c'è ancora, ma solo in modalità di risposta avanzata (che anch'io uso di rado).
    Vedo di riportare la cosa agli altri moderatori e a Master85... grazie per avermelo fatto notare
    ℹ️ Leggi di più su bottomap ...

  10. #10
    sciagallone non è in linea Novello
    grazie zigo per il tempo dedicatomi...di sicuro la mia gestione delle variabili e della session è pessima...ti posto la maggio parte del codice delle due pagine ometto la parte delle query...spero così possa farti capire meglio..

    pag1.php

    <php>

    <?php session_start();
    header('Content-type: text/html;charset=utf-8');

    $val_dis1 = array();
    $val_dis2 = array();
    $val_dis3 = array();
    $val_dis4 = array();
    $val_dis1 = array_values($_SESSION['val1']);
    $val_dis2 = array_values($_SESSION['val2']);
    $val_dis3 = array_values($_SESSION['val3']);
    $val_dis4 = array_values($_SESSION['val4']);
    ?>
    <html>
    <head>
    <LINK REL="SHORTCUT ICON" HREF="favicon.ico">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <title>pag1</title>
    </head>
    <body>
    <?php include('connessione.php');

    $query1 =........

    echo "<table >
    <form action=\"pag2.php\" method=\"post\">

    <td >

    <br><b>DOMANDA $n <br></b>

    <tr>
    <td height=\"80\" colspan=\"1\">
    <b>&nbsp RISPOSTA A</b>
    </td>
    <td width=\"43\" align=\"center\" bgcolor=\"#FFFF00\"> ";
    if ($n=="1"){ echo"<input type=\"radio\" name=\"risposta1\" value=\"1\" ";
    if(isset($_SESSION['risposta1']) && $_SESSION['risposta1'] =='1')echo 'checked="checked" />';}
    elseif ($n=="2"){echo"<input type=\"radio\" name=\"risposta2\" value=\"1\" ";
    if(isset($_SESSION['risposta2']) && $_SESSION['risposta2'] =='1')echo 'checked="checked" />';}
    elseif ($n=="3"){echo"<input type=\"radio\" name=\"risposta3\" value=\"1\" ";
    if(isset($_SESSION['risposta3']) && $_SESSION['risposta3'] =='1')echo 'checked="checked" />';}
    elseif ($n=="4"){echo"<input type=\"radio\" name=\"risposta4\" value=\"1\" ";
    if(isset($_SESSION['risposta4']) && $_SESSION['risposta4'] =='1')echo 'checked="checked"/>';}
    elseif ($n=="5"){echo"<input type=\"radio\" name=\"risposta5\" value=\"1\" ";
    if(isset($_SESSION['risposta5']) && $_SESSION['risposta5'] =='1')echo 'checked="checked"/>';}
    echo "
    </td>
    <td width=\"892\" colspan=\"5\" valign=\"middle\">
    <b>&nbsp $risp1[$i] </b>
    </td>
    <td width=\"43\" align=\"center\" bgcolor=\"#FFFF00\" >
    <select name=\"val1[$i]\">
    <option value=\"\"";
    if(is_null($val_dis1[$i]) && $val_dis1[$i] =='')echo 'selected="selected" ';
    echo"
    > </option>
    <option value=\"1\"";
    if(isset($val_dis1[$i]) && $val_dis1[$i] =='1')echo 'selected="selected" ';
    echo"
    >1</option>
    <option value=\"2\"";
    if(isset($val_dis1[$i]) && $val_dis1[$i] =='2')echo 'selected="selected" ';
    echo"
    >2</option>
    <option value=\"3\"";
    if(isset($val_dis1[$i]) && $val_dis1[$i] =='3')echo 'selected="selected" ';
    echo"
    >3</option>
    <option value=\"4\"";
    if(isset($val_dis1[$i]) && $val_dis1[$i] =='4')echo 'selected="selected" ';
    echo"
    >4</option>
    </select>
    </td>
    </tr>

    stesso codice per le altre tre risposte

    $_SESSION['risposta1'] = $risposta1;
    $_SESSION['risposta2'] = $risposta2;
    $_SESSION['risposta3'] = $risposta3;
    $_SESSION['risposta4'] = $risposta4;
    $_SESSION['risposta5'] = $risposta5;

    $_SESSION['val1'] = array($val1[0], $val1[1], $val1[2], $val1[3], $val1[4]);
    $_SESSION['val2'] = array($val2[0], $val2[1], $val2[2], $val2[3], $val2[4]);
    $_SESSION['val3'] = array($val3[0], $val3[1], $val3[2], $val3[3], $val3[4]);
    $_SESSION['val4'] = array($val4[0], $val4[1], $val4[2], $val4[3], $val4[4]);
    echo "<tr>
    <td align=\"center\" colspan=\"7\">
    <input type=\"submit\" value=\"Invia\">
    </form>
    </td>
    </tr>
    </table>";

    ?>


    </body>
    <html>
    </php>

    pag2.php

    <php>

    <?php session_start();
    header('Content-type: text/html;charset=utf-8');

    $risposta_dom1 = htmlspecialchars($_POST['risposta1']);
    $risposta_dom2 = htmlspecialchars($_POST['risposta2']);
    $risposta_dom3 = htmlspecialchars($_POST['risposta3']);
    $risposta_dom4 = htmlspecialchars($_POST['risposta4']);
    $risposta_dom5 = htmlspecialchars($_POST['risposta5']);

    $_SESSION['risposta1'] = $risposta_dom1;
    $_SESSION['risposta2'] = $risposta_dom2;
    $_SESSION['risposta3'] = $risposta_dom3;
    $_SESSION['risposta4'] = $risposta_dom4;
    $_SESSION['risposta5'] = $risposta_dom5;

    $val1 = array_values($_POST['val1']);
    $val2 = array_values($_POST['val2']);
    $val3 = array_values($_POST['val3']);
    $val4 = array_values($_POST['val4']);

    $_SESSION['val1'] = array_values($val1);
    $_SESSION['val2'] = array_values($val2);
    $_SESSION['val3'] = array_values($val3);
    $_SESSION['val4'] = array_values($val4);

    ?>
    <html>
    <head>
    <LINK REL="SHORTCUT ICON" HREF="favicon.ico">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <title>pag2</title>
    </head>
    <body>
    <?php include('connessione.php');

    if ($risposta_dom1=="")
    {
    echo "<script language=\"JavaScript\">\n";
    echo "alert(\"selezionare una risposta... Grazie!!\");\n";
    echo "javascript:history.go(-1)";
    echo "</script>";
    }
    elseif ($risposta_dom2=="")
    {
    echo "<script language=\"JavaScript\">\n";
    echo "alert(\"selezionare una risposta...Grazie!!\");\n";
    echo "javascript:history.go(-1)";
    echo "</script>";
    }
    else{
    for($s=0;$s<=4;$s++)
    {
    if ($val1[$s]=="")
    {
    echo "<script language=\"JavaScript\">\n";
    echo "alert(\"selezionare valutazione...Grazie!!\");\n";
    echo "javascript:history.go(-1)";
    echo "</script>";
    }
    elseif ($val2[$s]=="")
    {
    echo "<script language=\"JavaScript\">\n";
    echo "alert(\"selezionare valutazione...Grazie!!\");\n";
    echo "javascript:history.go(-1)";
    echo "</script>";
    }
    elseif ($val3[$s]=="")
    {
    echo "<script language=\"JavaScript\">\n";
    echo "alert(\"selezionare valutazione...Grazie!!\");\n";
    echo "javascript:history.go(-1)";
    echo "</script>";
    }
    elseif ($val4[$s]=="")
    {
    echo "<script language=\"JavaScript\">\n";
    echo "alert(\"selezionare valutazione...Grazie!!\");\n";
    echo "javascript:history.go(-1)";
    echo "</script>";
    }
    if($s=4) continue;}
    }

    $query=.........

    ?>

    </body>
    <html>


    </php>

    miracolosamente sul mio pc funziona...se si lascia un qualsiasi campo in bianco scatta il javascript e si ritorna indietro con i valori selezionati in precedenza compresi drop down, ma se carico tutto sul server... la finestra javascript si apre ma quando clicco su ok non torna indietro e pure se metto qualche sleep() e riesco a farlo tornare indietro i valori del drop down non restano selezionati mentre quelli dei radio si. oltre tutto spesso escono dei warning che mi dicono che array_values vuole un array come valore, ma i miei sono tutti array dichiarati....

+ Rispondi al messaggio
Pagina 1 di 2 12 ultimoultimo

Potrebbero interessarti anche ...

  1. Mantenere scrolling pagina dopo messaggio errore.
    Da guil nel forum ASP 3, ASP .Net
    Risposte: 0
    Ultimo Post: 01-09-2017, 23:06
  2. Come mantenere un menu a tendina aperto
    Da robertaa nel forum PHP
    Risposte: 0
    Ultimo Post: 26-02-2013, 10:41
  3. Owner di un oggetto dopo il drag&drop
    Da soucer2k6 nel forum Visual Basic 6
    Risposte: 3
    Ultimo Post: 06-02-2007, 22:52
  4. Chiudere una finestra popup dopo il submit
    Da campanella nel forum HTML, CSS e JavaScript
    Risposte: 5
    Ultimo Post: 24-01-2006, 17:12
  5. servlet e radio button e menù a tendina
    Da klimisia nel forum HTML, CSS e JavaScript
    Risposte: 6
    Ultimo Post: 13-01-2006, 08:38