Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Form che faccia calcolo

    Buongiorno, premesso che sono ignorante in materia ed ho provato a cercare qualche discussione... non sono riuscito a cavarne un minimo di risultati.

    Mi spiego: devo preparare un form da far compilare online e che salvi i dati dentro ad un unico file sul mio spazio web. Questo lo faccio fare agevolmente ad uno script meraviglioso che si chiama FormTools. E qui problemi non ne ho.

    Il problema ce l'ho con qualche tipo di dato. Nel senso che io vorrei dare all'utente la possibilità di inserire dei numeri dentro ad alcuni campi tranne uno, in quanto in esso deve fare il calcolo (sottrazioni) dei numeri inseriti nei campi precedenti. Faccio prima a fare un esempio:

    campo1 (da far inserire all'utente)
    campo2 (da far inserire all'utente)
    campo3 (da far inserire all'utente)
    campo4 (da far inserire all'utente)
    campo5: deve visualizzare un risultato dato da campo1-campo2-campo3-campo4 e che non può essere modificato dall'utente
    campo6 (da far inserire all'utente)
    campo7 (da far inserire all'utente)

    (Pulsante invio dati)

    Il problema in pratica ce l'ho al campo5, come faccio a fargli fare quel calcolo?

    Poi i valori di tutti e 7 i campi li faccio raccogliere da FormTools che li stora in un database.

    Qualcuno può darmi una mano a realizzare questo form (apparentemente) semplice?
    Grazie!
    Ultima modifica di atigra; 07-08-2014 a 18:25

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    JavaScript

  3. #3
    Quote Originariamente inviata da clasku Visualizza il messaggio
    JavaScript
    Dici che con PHP non si possa fare? Perchè mi sono messo a fare qualcosa, ed effettivamente sono riuscito a fargli fare il calcolo che serve a me ma solo dopo aver cliccato il tasto Calcola, però il campo5 che volevo "protetto" (cioè che non fosse modificabile dall'utente) ancora non lo è.
    Allego quello che ho fatto io:

    codice:
    <? 
    $campo1=$_POST['campo1']; //Recupero la variabile globale del primo numero
    $campo2=$_POST['campo2']; //Recupero la variabile globale del secondo numero
    $campo3=$_POST['campo3']; //Recupero la variabile globale del terzo numero
    $campo4=$_POST['campo4']; //Recupero la variabile globale del quarto numero
    
    if ($campo1!=null or $campo2!=null or $campo3!=null or $campo4!=null){ //Proseguo se almeno un numero è definito
    if ($campo1==null){ $campo1=0;} //Se il primo numero è nullo lo associo a zero
    if ($campo2==null){ $campo2=0;} //Se il secondo numero è nullo lo associo a zero
    if ($campo3==null){ $campo3=0;} //Se il terzo numero è nullo lo associo a zero
    if ($campo4==null){ $campo4=0;} //Se il quarto numero è nullo lo associo a zero
    $campo5=$campo1-$campo2-$campo3-$campo4; //Sottraggo i numeri e definisco $campo5 (risultato)
    } 
    ?>
    
    
    <form action="#" method="post">
    <input type="text" name="campo1" size="10" maxlength="10" value="<? echo $campo1;?>">Campo 1<br>
    <input type="text" name="campo2" size="10" maxlength="10" value="<? echo $campo2;?>">Campo 2<br>
    <input type="text" name="campo3" size="10" maxlength="10" value="<? echo $campo3;?>">Campo 3<br>
    <input type="text" name="campo4" size="10" maxlength="10" value="<? echo $campo4;?>">Campo 4<br>
    <br>
    <input type="text" name="campo5" size="10" maxlength="10" value="<? echo $campo5;?>">Campo 5<br>
    <input type="submit" value="Calcola">
    </form>

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Se i calcoli li devi fare in tempo reale mentre l'utente compila il form ti serve Javascript, non PHP.
    E' questo che devi fare?

  5. #5
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Se i calcoli li devi fare in tempo reale mentre l'utente compila il form ti serve Javascript, non PHP.
    E' questo che devi fare?
    Se li fa in tempo reale sarebbe meglio, altrimenti va bene uguale, nel senso che posso anche mettere un tasto "Calcola" e poi un tasto "invia dati".

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Il tasto calcola, comunque davrà essere gestito con Javascript che invierà una richiesta asincrona ad uno script PHP e... molto più complicato che fare tutto in JS.
    Se vuoi fare tutto solo con PHP, devi inviare per forza i dati, ricaricare la pagina e ricompilare automaticamente i campi se non era il submit definitivo.

    Secondo me fai meglio a fare l'aggiornamento al volo con Javascript mentre il form viene compilato.
    Se vuoi ti sposto nella sezione Javascript.

  7. #7
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Il tasto calcola, comunque davrà essere gestito con Javascript che invierà una richiesta asincrona ad uno script PHP e... molto più complicato che fare tutto in JS.
    Se vuoi fare tutto solo con PHP, devi inviare per forza i dati, ricaricare la pagina e ricompilare automaticamente i campi se non era il submit definitivo.

    Secondo me fai meglio a fare l'aggiornamento al volo con Javascript mentre il form viene compilato.
    Se vuoi ti sposto nella sezione Javascript.
    Ok, non conoscendo javascript, sposta pure questa discussione... sperando che qualcuno riesca a darmi una mano, tu saresti in grado?

    Comunque grazie per la tua disponibilità.

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,503
    Il tuo script al momento sembra che funzioni, ma in realà no.
    Quel tasto è un submit, quindi alla pressione invia anche i dati che saranno salvati nel file che ti interessa, ma tu quei dati non li devi salvare quando uno decide di vedere il calcolo, perché potrebbe farlo anche quando non ha fornito i dati definitivi, no?
    Magari può dire "fammi vedere che valore viene fuori con questi dati" e poi cambiare idea, giusto? In tal caso col tuo script non lo può fare, perché appena clicca su calcola, lo script invia i dati e li salva nel file, anche se l'utente stava facendo solo una prova.
    Il tasto calcola dovrebbe essere un "button" con associata una funzione JS che fa il calcolo ed aggiorna solo il campo 5 senza inviare dati.

  9. #9
    Effettivamente, basterebbe avere un tasto che cliccandoci sopra facesse il calcolo e lo mettesse al campo5, in modo tale che cliccando sopra ad un altro tasto (chiamato magari "Invia dati") invierebbe i dati al FormTools.
    In alternativa se facesse il calcolo in automatico andrebbe bene uguale, in modo da avere alla fine un solo tasto, quello di "Invio dati".

    Puoi darmi una mano? Forse tu ne capisci sicuramente più di me...

    Ciao!

  10. #10
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Ciao, per rendere un campo input non modificabile da utente puoi usare l'attributo readonly. Chiaramente qualche utente malintenzionato puo andare a modificare il valore per vie traverse sul browser, per cui è sempre buona norma fare opportuni controlli lato server dopo l'invio dei dati.

    Inoltre, se si tratta di HTML5, per i campi input in cui vanno inseriti numeri sarebbe più consono adoperare type=number. La maggior parte dei recenti browser presenta uno stepper affianco ad un campo number in modo da facilitarne l'inserimento dei dati.
    In tal caso però bisogna eliminare gli attributi size e maxlength, non sono consentiti in un campo di tipo number. Nel caso puoi specificare opportunamente gli attributi min e max.

    Per fare un calcolo automatico, funzionale, puoi usare qualche riga di javascript che aggiorni il risultato in tempo reale, man mano che vengono inseriti i dati.
    Ti posto un esempio in base alle tue indicazioni:
    codice:
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>Esempio</title>
        <meta charset="utf-8">
        <script type="text/javascript">
        
          var c1,c2,c3,c4,c5;
        
          function calcola(){
            var v1 = c1.value;
            var v2 = c2.value;
            var v3 = c3.value;
            var v4 = c4.value;
            c5.value = v1-v2-v3-v4;
          }
    
          // Al caricamento della pagina
          window.onload = function(){
          
            // I campi interessati al calcolo
            c1 = document.form.campo1;
            c2 = document.form.campo2;
            c3 = document.form.campo3;
            c4 = document.form.campo4;
            c5 = document.form.campo5;
            
            // Assegno un handler per richiamare la funzione calcola() automaticamente quando avviene una qualsiasi modifica dei valori nei campi
              c1.onchange = c1.onkeypress = c1.onpaste = c1.oninput
            = c2.onchange = c2.onkeypress = c2.onpaste = c2.oninput
            = c3.onchange = c3.onkeypress = c3.onpaste = c3.oninput
            = c4.onchange = c4.onkeypress = c4.onpaste = c4.oninput
            = calcola;
            
            // Se serve, puoi eseguire il calcolo ad apertura pagina per aggiornare il risultato nel caso i campi siano popolati in qualche modo preventivamente
            calcola();
          }
          
        </script>
      </head>
      <body>
        <form action="#" method="post" name="form">
          <input type="number" name="campo1" value="">Campo 1<br>
          <input type="number" name="campo2" value="">Campo 2<br>
          <input type="number" name="campo3" value="">Campo 3<br>
          <input type="number" name="campo4" value="">Campo 4<br>
          <hr>
          <input readonly type="text" name="campo5" value="">Campo 5<br>
          <hr>
          <input type="submit" value="Invia dati">
        </form>
    </body>
    </html>
    Chiaramente si può risolvere in tanti altri modi.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.