Recentemente mi è capitato di dover calcolare automaticamente la somma dei valori contenuti all’interno di campi di input generati dinamicamente. Per fare ciò mi sono servito di un pò di codice Javascrip intervallato a codice PHP. Eccone uno stralcio:
<?php if(isset($count)) { ?> function startCalc(){ interval = setInterval("calc()",1); } function calc(){ var array = new Array(<?php echo $count ?>); var sum = 0; <?php for($i=1; $i<=$count; $i++) { ?> var valore<?php echo $i ?> = document.tariffe.subtotaletariffa<?php echo $i ?>.value; <?php } for($i=1; $i<=$count; $i++) { ?> array[<?php echo $i ?>] = (valore<?php echo $i ?> * 1); sum += array[<?php echo $i ?>]; <?php } ?> document.tariffe.totale.value = Math.round(sum*100)/100; <!--arrotondo alla seconda cifra decimale --> } function stopCalc(){ clearInterval(interval); }
Per prima cosa memorizzo all’interno della variabile $count il numero di campi di input da stampare a video. Successivamente dichiaro un array dimensionato proprio in base a $count. Non mi resta quindi che calcolare la somma dei valori contenuti nei vari campi di input e successivamente reindirizzarli all’interno del campo “totale”. Il codice HTML (intervallato ad altro codice PHP) è il seguente:
<?php if(isset($_POST['continua'])); { $i = 1; $j = 1; while(@$riga = $risultato_tariffe->fetch_assoc()) { ?> <label for="tariffa<?php echo $i?>"> <select name="tariffa<?php echo $i?>" tabindex="<?php echo $j?>" id="tariffa"> Tariffa: (*) <option><?php echo $riga['Nome']?></option> </select> </label> <label for="numpastariffa<?php echo $i?>"> <input type="text" name="numpastariffa<?php echo $i?>" tabindex="<?php echo $j+1?>" id="numpastariffa<?php echo $i?>" onFocus="startCalc2();" onBlur="stopCalc2();" />numero passeggeri per tariffa: (*) </label> <label for="importo<?php echo $i?>"> <input type="text" name="importo<?php echo $i?>" tabindex="<?php echo $j+2?>" id="importo<?php echo $i?>" onFocus="startCalc3();" onBlur="stopCalc3();" />importo: (*) </label> <label for="subtotaletariffa<?php echo $i?>"> <input type="text" name="subtotaletariffa<?php echo $i?>" tabindex="<?php $j=$j+3; echo $j?>" id="subtotaletariffa<?php echo $i?>" onFocus="startCalc();" onBlur="stopCalc();" />subtotale tariffa: (*) </label> <?php $i++; $j++; } $risultato_tariffe->); } ?>
dove la variabile $i viene utilizzata per assegnare il nome ai vari campi, mentre $j è una semplice variabile di appoggio utilizzata nell’ambito dei tabindex. Per uteriori chiarimenti contattatemi. A presto.