Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Processare un form

  1. #1

    Processare un form

    Salve il mio problema è questo. Ho un form con due caselle a scelta multipla, devo indirizzare l'utente in una determinata pagina in base alla scelta del form. Come posso fare? Mi sono messo a leggere per scrivere un CGI ma mi sembra una cosa un pò troppo complessa per un problema che come questo credo sia semplice. Mi hanno detto che si potrebbe fare con un Javascript è giusto?

    Ma non ho la minima idea di come...Chi mi può aiutare? Anche solo a trovare una guida sull'argomento?

    In pratica devo leggere i dati in arrivo dal form, processarli e far apparire la pagina in base ai dati letti...

    Grazie mille...

    Matteo

  2. #2
    Utente di HTML.it L'avatar di Francis87
    Registrato dal
    Jun 2003
    Messaggi
    5,970
    codice:
    <form name="form_1">
    ...
    <input type="button" name="btn_submit" value="submit" onclick="javascript:dosomething();" />
    </form>
    codice:
    <script language="JavaScript">
    function dosomething() {
     if (document.forms[0].nome_elemento_tuo.value=='pagina1') {
      location.href='pagina1.htm';
     }
     else if (document.forms[0].nome_elemento_tuo.value=='pagina2') {
      location.href='pagina2.htm';
     }
     else {
      location.href='pagina3.htm';
     }
    }
    </script>
    per esempio..
    Heaven's closed. Hell sold out.

    Linux 2.6.26-2-amd64
    Debian squeeze

  3. #3
    Devi creare una funzione che verifica quali checkbox sono selezionati. Quindi, a seconda dei casi, modificare al volo il valore dell'attributo action del form. La funzione va richiamata all'onsubmit, in modo da modificare il valore dell'action un attimo prima che il form venga inviato.

    codice:
    <head>
    <script type="text/javascript">
    <!--
    function indirizza() {
    var m = document.getElementById("modulo");
    if (document.getElementById("sel1").checked==true && document.getElementById("sel2").checked==true) {
    m.action = "pagina1.php";
    }
    else if (document.getElementById("sel1").checked==true && document.getElementById("sel2").checked==false) {
    m.action = "pagina2.php";
    }
    else if (document.getElementById("sel1").checked==false && document.getElementById("sel2").checked==true) {
    m.action = "pagina3.php";
    }
    }
    -->
    </script>
    </head>
    <body>
    <form id="modulo" action="default.php" method="post" onsubmit="indirizza();">
    <input type="checkbox" id="sel1" name="sel1" value="" />
    <input type="checkbox" id="sel2" name="sel2" value="" />
    <input type="submit" value="Invia" />
    </form>
    Ovviamente l'ho intepretata a modo mio...cosa intendi con "due caselle a scelta multipla"? Due checkbox che possono essere selezionati alternativamente o entrambi (o nessuno), oppure due radio buttons la cui selezione di uno implica la deselezione dell'altro? In ogni caso, il principio è più o meno questo: assegnare un nuovo valore all'action del form in base allo stato (checked o non checked) degli elementi.

  4. #4
    Grazie mille siete stati perfetti!!!

  5. #5
    Scusate la mia ignoranza in materia.

    Ho fatto tutto. Ma non viene richiamato lo script...Forse ho sbagliato ad inserirlo?

    Il mio sito è in php e una volta che invio il modulo mi viene reindirizzato ad una pagina con i dati inviati dal modulo del tipo: "http://www.studiodirado.it/index.php?giorno=martedi&eta=27&Invia=Dimmi+la+ser ata+migliore%21

    In poche parole non mi esegue lo script.
    Ho provato a posizionarlo sia nella pagina che all'interno dell'header, ma niente! Come posso fare?

    Questo è il mio form:
    <form name="form_1" method="GET" >
    <p align="center">Quando vuoi andare a ballare?

    <select size="1" name="giorno">
    <option selected>Seleziona il giorno...</option>
    <option>Lunedì</option>
    <option>Martedì</option>
    <option>Mercoledì</option>
    <option>Giovedì</option>
    <option>Venerdì</option>
    <option>Sabato</option>
    <option>Domenica</option>
    </select></p>
    <p align="center">Quanti anni hai?

    <select size="1" name="eta">
    <option selected>Seleziona l'età...</option>
    <option>< 14</option>
    <option>15</option>
    <option>16</option>
    <option>17</option>
    <option>18</option>
    <option>19</option>
    <option>20</option>
    <option>21</option>
    <option>22</option>
    <option>23</option>
    <option>24</option>
    <option>25</option>
    <option>26</option>
    <option>27</option>
    <option>28</option>
    <option>29</option>
    <option>30</option>
    <option>> 30</option>
    </select></p>
    <p align="center">
    <input type="submit" value="Dimmi la serata migliore!" name="Invia" onclick="java-scriptrocesso();"></p>
    </form>



    Mentre questo è lo script:
    <script language="JavaScript">
    function processo() {
    if (document.forms[0].eta.value=='18') {
    window.location.href='http://www.virgilio.it';
    }
    else if (document.forms[0].eta.value=='19') {
    window.location.href='http://www.fiorentina.it';
    }
    else {
    window.location.href='http://www.html.it';
    }
    }
    </script>


    Potete aiutarmi a farlo funzinare?


    Grazie

  6. #6
    Utente di HTML.it L'avatar di Francis87
    Registrato dal
    Jun 2003
    Messaggi
    5,970
    se provi a farti dare il valore di questo:
    codice:
    alert(document.forms[0].eta.value);
    scopriresti che è nullo, poichè non c'è nessun valore associato ai tag <option>

    devi cambiarli con:

    codice:
    ...
    <option value="18">18</option>
    <option value="19">19</option>
    ...
    Heaven's closed. Hell sold out.

    Linux 2.6.26-2-amd64
    Debian squeeze

  7. #7
    C'è un errore di fondo fondamentale...hai degli elementi <select> e quindi non ha nessun senso scrivere if (document.forms[0].eta.value==... L'elemento <select> crea un array di elementi <option> ed è da queste che devi ricavare il valore per effettuare il confronto.
    Quindi, ogni elemento <option> deve avere un valore specificato:

    codice:
    <option value="19">19</option>
    Poi la funzione è meglio richiamarla con l'onsubmit nel tag form:

    codice:
    <form name="form_1" method="get" onsubmit="processo();">
    Altra cosa...evita di scrivere tag, attributi e valori degli attributi in maiuscolo...non sono accettati dagli standard. Poi, invece che dare un nome al form e passare per esso quando devi accedere ad un elemento, fai prima a dare un id (ovviamente univoco!) ad ogni elemento e ad accedervi con: document.getElementById("IDELEMENTO") invece che con: document.forms[0].NOMEELEMENTO. Usando il metodo getElementById() (che recupera un elemento tramite il suo id che è unico in tutta la pagina) segui gli standard, non devi più sapere in che form sei e ti eviti di usare eval() se devi comporre dinamicamente la stringa che passi come id al metodo.

    Per l'elemento <select> (mettiamo dell'età) puoi quindi controllare il valore della <option> selezionata in questo modo:

    codice:
    <script type="text/javascript">
    function processo() {
    var sel = document.getElementById("eta").options.selectedIndex;
    switch (document.getElementById("eta").options[sel].value) {
    case 18:
    location = 'http://www.virgilio.it';
    break;
    case 19:
    location = 'http://www.fiorentina.it';
    break;
    default:
    location = 'http://www.html.it';
    break;
    }
    }
    </script>
    La propiretà selectedIndex è specifica dell'array options e contiene il numero dell'opzione selezionata (la prima è la numero 0, la seconda 1, e così via). Quindi, utilizzando il valore di selectedIndex puoi accedere all'elemento <option> selezionato in quel momento e recuperarne il valore usando: document.getElementById("ID_SELECT").options[NUMERO_OPZIONE_SELEZIONATA].value. A questo punto, dato che il tuo redirect dipende dal valore di una sola variabile (il value dell'option scelta), puoi usare switch per semplificare la ramificazione del codice, invece di usare else if a non finire. Solo una cosa...sei sicuro che basti un location per il redirect? Suppongo sia un esempio, ma se devi inviare dei dati alla pagina a cui la funzione reindirizza, non basta modificare la location...devi fare il submit del form.

    PS: l'oggetto window puoi ometterlo davanti a location...è opzionale nel 99% dei casi, salvo quando non devi esplicitamente aprire o chiudere una finestra con i metodi open() e close() (altrimenti JavaScript non saprebbe se vuoi aprire o chiudere una finestra o un documento). Infine la proprietà href dell'oggetto location rappresenta la stringa testuale dell'URI del documento. Se vuoi modificare la pagina caricata nel browser è più corretto impostare la proprietà location anziché la proprietà href di tale oggetto, anche se la cosa funziona ugualmente.

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.