• User Newbie

    form primario + form secondario a seconda della scelta dell'utente

    Innanzitutto un caro saluto a tutto. Mi sono appena registrato sul forum ma è già da un po' da tempo che leggo qua e là il sito di giorgiotave!

    Come ho specificato in title dovrei avere una pagina php dove:

    1. si apre un form primario
    2. controlli lato client con js
    3. controlli lato server con php
    4. in base alla scelta dell'utente si deve aprire un secondo form
    5. anche qui dovrebbero esserci del controlli con js e php
    6. i dati sono registrati su DB MySql

    Lo script che sto usando è (semplificandolo all'osso) questo:

    // collegamento col DB
    <script language="JavaScript" type="text/JavaScript">

    function validateForm()
    {
    // controlli sui campi
    }
    </script>
    <?php
    //controlli sui campi
    //APERTURA FORM SECONDARIO A SECONDA DELLA SCELTA DELL'UTENTE
    return
    ?>

    <form onSubmit="return validateForm();" action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" name="frm">
    Nome <input type="text" name="nome" ><br>
    ....
    Scelta<fieldset>
    <input type="radio" name="scelta" value="1" checked="checked">scelta 1<br>
    <input type="radio" name="scelta" value="2">scelta 2<br>
    ....
    </fieldset>
    <input name="frmSubmit" type="submit" value="Invia"><br>
    </form>

    Su un altro forum mi hanno detto che questa cosa posso farla in 3 modi differenti:

    1. con dei DIV su javascript
    2. tutto con PHP facendo un reload della pagina passando la scelta in GET e gli altri dati in POST
    3. con apertura di pagine secondarie

    Voi cosa mi consigliate di fare?

    E nel caso in cui mi consigliate il secondo metodo come potrei procedere?

    Grazie


  • Super User

    ciao zerovirgolatreperiodico e benvenuto sul forum,
    riguardo alla tua richiesta personalmente appoggio l'idea di ricaricare la stessa pagina passando un parametro nella querystring. in questo modo te la cavi con un semplice link e un po' di codice in php


  • User Newbie

    Grazie Tymba, vorrei sapere innanzitutto come dovrei strutturare la cosa...cioè:

    1. il form materialmente dove lo metto? Perchè di form ne ho da far caricare diversi a seconda della scelta dell'utente
    2. l'action del form dove deve puntare precisamente?
    3. per fare i controlli in js devo creare un'altra funzione?

    Ti ringrazio tantissimo ma per ora ho lavorato solo con html 😞


  • User Newbie

    Girovagando ho trovato questo post.
    Potebbe essere utile al caso mio?

    /*
    salvate tutto il seguente codice in un file esterno e chiamatelo ad esempio paginazione.inc.php

    Create una classe di stile chiamata "selected" e assegnatele un
    colore diverso da quello dei normali link, sarà usato per indicare la pagina corrente nel minimenu' dei link.
    */

    //inizializzo come stringa vuota una variabile querystring che
    //appendo sempre ai miei link... quindi la lascio vuota se non mi
    //serve, la modifico come spiegato più avanti se mi serve
    $querystring = "";

    //eventuale modifica alla query string
    //OMESSA PER ORA

    //numero di link da visualizzare.. chiaro no?
    $n=5;

    #tutto il codice seguente non richiede configurazioni <img src="images/smilies/smile.gif" border="0" alt="">
    $pag = isset($_GET)? $_GET['pag'] : $HTTP_GET_VARS['pag'];
    if (!$pag){$pag=1;}//apre di default la prima pagina se non è impostata la variabile $pag

     if($numpag <= $n) 
        { 
         if ($pag>1) 
            { 
                echo("<A HREF=?pag=".($pag-1)."$**querystring**><</A>&nbsp;"); 
            }         
         for ($**pagina** = 1; $**pagina** <= $numpag; $pagina++) 
            { 
             if ($**pagina** == $pag) 
               { 
                echo("<SPAN CLASS=selected>$**pagina** </SPAN>&nbsp"); 
               } 
             else 
               { 
                  echo("<A href=?pag=$**pagina**$**querystring** title=\"Vai a **pagina** $**pagina**\"> $**pagina** </a>&nbsp"); 
               } 
            } 
         if ($pag<$numpag) 
            {             
             echo("<A HREF=?pag=".($pag+1)."$**querystring**>></A>&nbsp;"); 
            } 
        } 
         
      else if($pag <= ceil($n/2))//prime pag --> stampa primi n 
             { 
               if ($pag>1) 
                 { 
                  echo("<A HREF=?pag=".($pag-1)."$**querystring**><</A>&nbsp;"); 
                 }             
              for ($**pagina**=1; $**pagina**<=$n; $pagina++) 
                  { 
                       if ($**pagina** == $pag) 
                     { 
                      echo("<span CLASS=selected> $**pagina** </span>&nbsp"); 
                     } 
                   else 
                     { 
                        echo("<A href=?pag=$**pagina**$**querystring** title=\"Vai a **pagina** $**pagina**\"> $**pagina** </a>&nbsp"); 
                     } 
                  } 
              echo("<A HREF=?pag=".($pag+1)."$**querystring**>></A>&nbsp;");                   
              echo("<A href=?pag=$numpag$**querystring** title=\"Vai all'ultima **pagina**\"> >> </a>&nbsp");                   
             } 
             
           else if($pag>$numpag-ceil($n/2))//ultime pag --> stampa ultimi n 
                 { 
                  echo("<A href=?pag=1$**querystring** title=\"Vai alla prima **pagina**\"> << </a>&nbsp"); 
                  echo("<A HREF=?pag=".($pag-1)."$**querystring**><</A>&nbsp;");               
                  for ($**pagina**=$numpag-$n+1; $**pagina**<=$numpag; $pagina++) 
                     { 
                         if ($**pagina** == $pag) 
                         { 
                          echo("<span class=selected> $**pagina** </span>&nbsp"); 
                         } 
                       else 
                         { 
                            echo("<A href=?pag=$**pagina**$**querystring** title=\"Vai a **pagina** $**pagina**\"> $**pagina** </a>&nbsp"); 
                         } 
                     } 
                  if ($pag<$numpag) 
                    {             
                     echo("<A HREF=?pag=".($pag+1)."$**querystring**>></A>&nbsp;"); 
                    } 
                 } 
                               
                   else //pagine centrali --> stampa n/2 prima ed n/2 dopo 
                   { 
                    echo("<A href=?pag=1$**querystring** title=\"Vai alla prima **pagina**\"> << </a>&nbsp"); 
                    echo("<A HREF=?pag=".($pag-1)."$**querystring**><</A>&nbsp;");                     
                      for ($**pagina**=$pag-ceil($n/2-1); $**pagina**<=$pag+ceil($n/2-1); $pagina++) 
                      { 
                         if ($**pagina** == $pag) 
                         { 
                          echo("<span CLASS=selected> $**pagina** </span>&nbsp"); 
                         } 
                       else 
                         { 
                            echo("<A href=?pag=$**pagina**$**querystring** title=\"Vai a **pagina** $**pagina**\"> $**pagina** </a>&nbsp"); 
                         } 
                      } 
                    echo("<A HREF=?pag=".($pag+1)."$**querystring**>></A>&nbsp;"); 
                    echo("<A href=?pag=$numpag$**querystring** title=\"Vai all'ultima **pagina**\"> >> </a> "); 
                   }
    

  • User Newbie

    Un amico su un altro forum mi ha suggerito di mettere una variabile "pass" per controllare.

    Vediamo se potete aiutarmi Quello che devo fare è questo:

    • inizialmente dovrebbe mandare a video il form uguale per tutti
    • si fanno i controlli in js
    • si fanno i controlli in php e ricarica la pagina mettendo pass=1
    • a questo punto dovrebbe mandare a video il form giusto a seconda della scelta effettuata dall’utente
    • si fanno i controlli in js
    • si fanno i controlli in php e ricarica la pagina mettendo pass=2 altrimenti mi ripete i controlli che ho messo nelle righe in rosso

    <html>
    <head>
    <title>prova</title>

    <?
    //connessione DB
    ?>
    <script language="JavaScript" type="text/JavaScript">

    function validateForm()
    {
    //controlli js sul primo form quello uguale per tutti
    }

    function validateForm1()
    {
    //controlli js sul form secondario optando per la scelta 1
    }

    function validateForm2()
    {
    //controlli js sul form secondario optando per la scelta 2
    }

    </script>

    </head>
    <body>
    <?php
    if(!isset($_GET['pass']) || ($_GET['pass'] == "") || ($_GET['pass'] == 1))
    {
    $sw = 0;
    if (isset($_POST['nome'])
    { $sw = 1;

       if(empty($_POST['nome'])) 
      { 
        echo "controllo php - il campo nome è vuoto"; $sw=0;
       } 
    else  { $nome = $_POST['nome'];   }
    

    }

    if ($sw == 1 )
    {
    $scelta = $_POST['scelta'];
    //INSERISCI i dati nel DB
    }
    }
    elseif ($_GET['pass'] == 2)
    {
    // controllo sui vari campi a seconda delle varie scelte
    e qua devo registrare di nuovo sul DB avendo per chiave quel “nome” che però non mi è passato

    if(!isset($_GET['pass']) || $_GET['pass'] == "")
    {
    ?>

    <form onSubmit="return validateForm();" action="<?php echo $_SERVER['PHP_SELF'];?>?pass=1" method="post" name="frm">
    Nome dell'operazione<input type="text" name="nome" ><br>
    Scelta<fieldset>
    <input type="radio" name="scelta" value="1" checked="checked">scelta 1<br>
    <input type="radio" name="scelta" value="2">scelta 2<br>
    </fieldset>
    <input name="frmSubmit" type="submit" value="Invia"><br>
    </form>

    <?php
    }
    else if($_GET['pass'] == 1)
    {

    if($_POST['scelta'] == 1) 
    { 
    ?>
     <form onSubmit="return validateForm1();" action="<?php echo             $_SERVER['PHP_SELF'];?>?pass=2" method="post" name="frm1"> 
      Nome <input type="text" name=&#8221;professione" ><br> 
     <input name="frm1Submit" type="submit" value="Invia"><br> 
     </form> 
    
     <?php
     } 
    
      elseif ($_POST['scelta'] == 2)
     {  
     ?>
      <form onSubmit="return validateForm2();" action="<?php echo   $_SERVER['PHP_SELF'];?>?pass=2" method="post" name="frm2"> 
       Nome <input type="text" name="hobbies" ><br> 
      <input name="frm2Submit" type="submit" value="Invia"><br> 
     </form> 
     <?php
      } 
    

    }
    ?>

    </body>
    </html>

    Ancora non ho messo i controlli però già vedo che va bene eccezion fatta per il nome che ricaricando la pagina non me lo passa più.
    Posso passarlo con un campo hidden?
    In post come farei a passarlo?
    Oppure devo cambiare tattica e spedire tutti e 2 i form insieme cioè la prima volta che clicco su submit fare solo un controllo js e farmi apparire uno dei form secondari e solo il secondo sumbit sarebbe quello che invia i dati al DB?
    Beh forse ho fatto un po’ di confusione a spiegarmi (vista anche l’ora...) ma spero che possiate aiutarmi!


  • Moderatore

    si, puoi passarlo con un campo hidden 🙂


  • User Newbie

    Ciao a tutti.
    Dunque, io dovrei fare una pagina "preventivi" dove, a seconda della scelta del tipo di prodotto (magari da una dropdown list) appaiano i campi per l'inserimento dei dati (diversi per ogni "famiglia" di prodotti).

    La struttura della pagina dovrebbe essere la seguente:

    • form comune a tutti i prodotti (Dati anagrafici, mail)
    • dropdown list o altro per selezionare la famiglia di prodotti di cui si chiede il preventivo
    • campi form relativi ai dati richiesti per fare il preventivo per la famiglia di prodotti selezionata

    ed ovviamente il submit.

    Avete un'idea di come possa fare? 😄

    Grazie mille per l'aiuto.


  • User Newbie

    Ciao a tutti.
    Volevo dirvi che ho in parte risolto il mio problema.

    Questo è il codice:

    [PHP]<?php

    function seleziona()
    {
    echo "<span class="preventivo">Seleziona una tipologia di prodotto</span><br><br>\n";
    echo "<form action="".$_SERVER['PHP_SELF']."" method="POST">\n";
    echo "<span class="selectprod"<select name="r">\n";
    echo "<option value="0" selected="selected">Tipologia prodotto</option>\n";
    echo "<option value="1">Sicurezza in acciaio</option>\n";
    echo "<option value="2">Infissi in legno</option>\n";
    echo "<option value="3">Infissi in alluminio</option>\n";
    echo "</select></span>\n";
    echo "<input class="selectprod_submit" type="image" src="img/ok.png">\n";
    echo "</form>\n";
    }

    function acciaio()
    {
    echo "<div class="form_preventivo"><span class="preventivo">Richiedi preventivo per <b> Sicurezza in acciaio</b></span><br><br>\n";
    echo "<form action="".$_SERVER['PHP_SELF']."" method="POST">\n";
    echo "<span class="selectprod"<select name="prodotto">\n";
    echo "<option value="0" selected="selected">Seleziona un prodotto</option>\n";
    echo "<option value="1">Prodotto 1</option>\n";
    echo "<option value="2">Prodotto 2</option>\n";
    echo "<option value="3">Prodotto 3</option>\n";
    echo "</select></span>\n";
    echo "<br><br><span class="input_preventivo"><label>E-mail: </label><br><input type="text" name="email" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Nome: </label><br><input type="text" name="2" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Cognome: </label><br><input type="text" name="3" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Larghezza: </label><br><input type="text" name="3" size="5"></span>\n";
    echo "<span class="input_preventivo"><label>Altezza: </label><br><input type="text" name="3" size="5"><br></span>\n";
    echo "<br><input type="submit" value=" OK ">\n";
    echo "<input type="reset" value="Cancella">\n";
    echo "<input type="hidden" name="send" value="1" />\n";
    echo "</form></div>\n";
    }

    function legno()
    {
    echo "<div class="form_preventivo"><span class="preventivo">Richiedi preventivo per <b> Infissi in legno</b></span><br><br>\n";
    echo "<form action="".$_SERVER['PHP_SELF']."" method="POST">\n";
    echo "<span class="selectprod"<select name="prodotto">\n";
    echo "<option value="0" selected="selected">Seleziona un prodotto</option>\n";
    echo "<option value="1">Prodotto 1</option>\n";
    echo "<option value="2">Prodotto 2</option>\n";
    echo "<option value="3">Prodotto 3</option>\n";
    echo "</select></span>\n";
    echo "<br><br><span class="input_preventivo"><label>E-mail: </label><br><input type="text" name="email" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Nome: </label><br><input type="text" name="2" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Cognome: </label><br><input type="text" name="3" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Tipo legno: </label><br><input type="text" name="3" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Larghezza: </label><br><input type="text" name="3" size="5"></span><br>\n";
    echo "<span class="input_preventivo"><label>Altezza: </label><br><input type="text" name="3" size="5"></span><br>\n";
    echo "<br><input type="submit" value=" OK ">\n";
    echo "<input type="reset" value="Cancella">\n";
    echo "<input type="hidden" name="send" value="1" />\n";
    echo "</form></div>\n";
    }

    function alluminio()
    {
    echo "<div class="form_preventivo"><span class="preventivo">Richiedi preventivo per <b> Infissi in alluminio</b></span><br><br>\n";
    echo "<form action="".$_SERVER['PHP_SELF']."" method="POST">\n";
    echo "<span class="selectprod"<select name="prodotto">\n";
    echo "<option value="0" selected="selected">Seleziona un prodotto</option>\n";
    echo "<option value="1">Prodotto 1</option>\n";
    echo "<option value="2">Prodotto 2</option>\n";
    echo "<option value="3">Prodotto 3</option>\n";
    echo "</select></span>\n";
    echo "<br><br><span class="input_preventivo"><label>E-mail: </label><br><input type="text" name="email" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Nome: </label><br><input type="text" name="2" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Cognome: </label><br><input type="text" name="3" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Tipo legno: </label><br><input type="text" name="3" size="20"></span><br>\n";
    echo "<span class="input_preventivo"><label>Colore: </label><br><input type="text" name="3" size="5"></span><br>\n";
    echo "<span class="input_preventivo"><label>Larghezza: </label><br><input type="text" name="3" size="5"></span><br>\n";
    echo "<span class="input_preventivo"><label>Altezza: </label><br><input type="text" name="3" size="5"></span><br>\n";
    echo "<br><input type="submit" value=" OK ">\n";
    echo "<input type="reset" value="Cancella">\n";
    echo "<input type="hidden" name="send" value="1" />\n";
    echo "</form></div>\n";
    }

    seleziona();

    if(isset($_POST['r']))
    {
    switch($_POST['r'])
    {
    case 1: acciaio();
    break;
    case 2: legno();
    break;
    case 3: alluminio();
    break;
    default: echo "<span class="error">Attenzione, non è stata selezionata nessua tipologia di prodotto.</span>";
    break;
    }
    }
    if(isset($_POST['send']))
    {
    $destinatario = "[email protected];
    $mittente = $_POST['email'];
    $oggetto = "Richiesta preventivo dal sito ";
    $nome = $_POST['email'];

    $testo = " mestiere: ".$_POST['2']." citta: ".$_POST['3']." prodotto: ".$_POST['prodotto'];

    if(mail($destinatario, $oggetto, $testo, "From:".$nome." <".$mittente.">"."\nReply-To:".$nome." <".$mittente.">"))
    {
    echo "Richiesta inviata con successo.<br>";
    echo "Vi sarà inviata al più presto un'e-mail con il preventivo richiesto.";
    }
    else
    {
    echo "Errore invio e-mail: <a href="".$_SERVER['PHP_SELF']."" target="_self">riprova</a>.";
    }
    }

    ?>[/PHP]

    Ancora lo script non è completo, ma funziona alla perfezione.

    Quel che vi volevo chiedere è:

    1. esiste un modo per non far ricaricare la pagina ogni volta che si seleziona una tipologia di prodotto? Se sì, si può fare con php o serve javascript?
    2. Se si deve fare con javascript sapete se esista un plugin di JQuery che può aiutarmi? Se no, sapete dirmi come posso fare questo Javascript?

    Buona serata a tutti e grazie!