• User Newbie

    Restituire valore selezionando una checkbox

    Ciao,
    ho un quesito per voi... 🙂
    Ho una pagina con diverse opzioni, cliccabili con dei chekbox.
    Sia la prima seria che la seconda provengono da due tabelle diverse.
    Per capire meglio allego immagine pagina

    w w w. vecchiojoe.it/1.jpg (ho staccato le tre w)

    Inoltre quando selezione qualcosa questa aggiorna in automatico il totale.

    Il mio problema è che qualsiasi selezione io faccia si sulla prima serie che la seconda il valore che mi restituisce è sempre lo stesso ovvero l'ultimo campo presente nelle due tabelle
    di seguito il codice della pagina

    
    <form name="sommacart" action="modules.php?name=<?php echo ''.$module_name.''; ?>" method="post">
           <table border="0" cellspacing="2" cellpadding="2" width="100%">
                   <tr align="center">
                     <td class="bgbar" colspan="2" height="30"><strong><?php echo ''._DESCRIPTION.''; ?></strong></td>
                     <td class="bgbar" colspan="2"><strong><?php echo ''._SH_EXTRAPAY.''; ?></strong></td>
                   </tr>
                   <?php
                $result3 = $db->sql_query('SELECT * FROM '.$prefix.'_shop_shipoptions ORDER by sid');
             while ($row3 = $db->sql_fetchrow($result3)) 
                 {
             $id_s = $row3['sid'];
             $stitle = $row3['stitle'];
             $sdescription = $row3['sdescription'];
             $amount_s = $row3['soption'];
             $active = $row3['active'];
          ?>
             <tr>
                     <td align="center" class="linebot"><input type="checkbox" value="<?php echo ''.$amount_s.''; ?>" name="ototal" onClick="somma2(this.value, this.checked);" /></td>
                     <td class="linebot"><span class="content"><?php echo '<strong>'.$stitle.'</strong>'; ?></span><input type="hidden" name="shipoption" value="<?php echo ''.$stitle.''; ?>" /><br /><span class="tiny"><?php echo ''.$sdescription.''; ?></span></td>
                     <td class="linebot" colspan="2" height="40"><span class="content"><?php echo ''.$amount_s.' '.$currency.''; ?></span></td>
                   </tr>
                   <?php 
              }
          ?>
                   <tr>
                     <td colspan="4" height="10"> </td>
                   </tr>
                   <tr>
                     <td colspan="4" height="30"><span class="content"><?php echo '<strong>'._SH_ORDERPAY.'</strong>'; ?></span></td>
                   </tr>
                   <tr align="center">
                     <td class="bgbar" colspan="2" height="30"><strong><?php echo ''._DESCRIPTION.''; ?></strong></td>
                     <td class="bgbar" colspan="2"><strong><?php echo ''._SH_EXTRAPAY.''; ?></strong></td>
                   </tr>
                   <?php
                $result4 = $db->sql_query('SELECT * FROM '.$prefix.'_shop_tipopagamento ORDER by id_tp');
             while ($row4 = $db->sql_fetchrow($result4)) 
                 {
             $id_tp = $row4['id_tp'];
             $title_tp = $row4['title_tp'];
             $description_tp = $row4['description_tp'];
             $amount_tp = $row4['option_tp'];
             $active_tp = $row4['active'];
                   ?>
             <tr>
                     <td align="center" class="linebot"><input type="checkbox" value="<?php echo ''.$amount_tp.''; ?>" name="ototal" onClick="somma2(this.value, this.checked);" /></td>
                     <td class="linebot"><span class="content"><?php echo '<strong>'.$title_tp.'</strong>'; ?></span><input type="hidden" name="id_tp" value="<?php echo ''.$title_tp.''; ?>" /><br /><span class="tiny"><?php echo ''.$description_tp.''; ?></span></td>
                     <td class="linebot" colspan="2" height="40"><span class="content"><?php echo ''.$amount_tp.' '.$currency.''; ?></span></td>
                   </tr>
                   <?php 
              }
          $b_total = $o_total + $subtotal;
          ?>
                   <tr>
                     <td colspan="4"><hr color="#CCCCCC" /></td>
                   </tr>
             <tr>
                     <td align="right" bgcolor="#EEEEEE" class="linebot" colspan="2"><span class="content"><?php echo '<strong>'._TOTAL.' : </strong>'; ?></span></td>
                     <td class="bgbot" colspan="2" height="40"><input class="inputbox" type="text" name="o_total" value="<?php echo ''.$b_total.''; ?>" size="15" readonly="readonly" /> <span class="tiny"><?php echo ''.$currency.''; ?></span></td>
                   </tr>
             <tr>
                     <td align="right" class="linebot" colspan="2"><span class="content"><strong><?php echo ''._COMMENT.' :'; ?></strong></span></td>
                     <td class="linebot" colspan="2" height="30"><textarea rows="5" name="o_comment" cols="25"></textarea></td>
                   </tr>
                   <tr>
                     <td colspan="4" height="20"> </td>
                   </tr>
                   <tr>
                     <td align="center" colspan="4" height="40">
    ---- input type="hidden" name="order_description" value="<?php echo ''.$order_description.''; ?>" />
    ----- input type="hidden" name="s_op" value="ordersubmit" />
    <back><img src="modules/<?php echo ''.$module_name.''; ?>/images/back.jpg" border="0"></a>   
    ------ input type="image" src="modules/<?php echo ''.$module_name.''; ?>/images/check_out.jpg" border="0" /></a></td>
                   </tr>
           </table>
                 </form>
    
    ```Quindi per capirci, da questa pagina se seleziono spedizione sda e pagamento bonifico, mi restituisce come valore, spedizione ritiro a mano e pagameno paypal ovvero gli ultimi due campi delle proprie tabelle.
    Attendo vostri consigli.
    Grazie.

  • Consiglio Direttivo

    Ciao vecchio_joe e benvenuto nel forum GT. 🙂

    Hai controllato dal sorgente pagina che i valori associati alla checkbox siano giusti?

    🙂


  • User Newbie

    Ciao e grazie del benvenuto e risposta,
    si lui mi restiuisce i valori.

    Diciamo che a livello base non ci sono errori.
    Ma il mio problema è:
    nel checkbox passo un valore, ovvero il prezzo, che tramite js mi mi fa la somma in automatico, ma devo associare il valore prezzo altrimenti non mi fà questo calcolo.

    Quindi quando faccio il submit del form riesco solo a passare il valore prezzo che mi può creare dei problemi se ne dovessi avere 2 o più uguali.

    Per questo chiedevo come fare ad avere oltre al valore della check anche il suo proprio valore id.

    Spero di essermi spiegato bene.

    Grazie dell'aiuto.

    Ciao.


  • Consiglio Direttivo

    Vediamo un po' se ho capito bene:
    la somma fatta dal Js è giusta, mentre il valore che viene passato tramite post è errato, fin quì ci sono? 🙂

    Intanto noto un problemino, essendo due entità differenti dovresti nominare in maniera diversa le due serie, visto che attualmente hanno lo stesso name, e dato che la scelta è unica tra le due serie dovresti usare il radio:
    [php]......
    <input type="checkbox" value="<?php echo ''.$amount_s.''; ?>" name="ototal" onClick="somma2(this.value, this.checked);" />
    ........
    <input type="checkbox" value="<?php echo ''.$amount_tp.''; ?>" name="ototal" onClick="somma2(this.value, this.checked);" />[/php]Poi per passare l'id invece del valore potresti creare due hidden data, il cui valore aggiorni tramite Js, con i quali ti posti l'id del metodo di pagamento e l'id del metodo di spedizione.

    La soluzione migliore però nel tuo caso potrebbe essere un approccio differente, mi spiego, se io avessi i Js disabilitati? Non funzionerebbe più nulla. 😞

    Costruirei a prescindere il form utilizzando gli id del metodo di pagamento e gli id del metodo di spedizione, sempre chiamando le due serie in maniera diversa, potresti popolare due array il cui indice numerico è l'id del metodo di pagamento/metodo di spedizione ed il valore è l'importo associato, quindi dal Js utilizzare il valore indice dell'array per farti la somma. In questa maniera il tuo form, senza i Js, funzionerebbe tranquillamente, non farebbe solo la somma in automatico.
    Propendo sempre per far comandare il linguaggio lato server, piuttosto che degli script, potrebbe risultare pericoloso e problematico fare l'inverso dal mio punto di vista. 😉

    P.S. Attenzione alla scrittura, siamo in un forum ed anche sul campo di risposta si chiede di attenzionare le maiuscole e la punteggiatura, ne guadagniamo tutti in leggibilità. 😉


  • User Newbie

    Ciao,

    la somma fatta dal Js è giusta, mentre il valore che viene passato tramite post è errato, fin quì ci sono? :smile3:

    si la somma fatta dal js è giusta, anche se nel campo somma non mi calcola i decimali e il valore passato tramite post è giusto.

    Ma per capirci meglio;
    la select sql che faccio per la prima selezione restituisce due record

    1. id=1, nome=corriere sda, costo=2.10
    2. id=2, nome=ritiro a mano, costo=0.00

    idem vale per la seconda select (altra tabella) che restituisce 4 record con alcuni valori uguali (costi).
    Quindi quando seleziono la prima check mi da il costo del primo record che con il js si somma in automatico, e tramite post passa questo costo.

    Ecco io vorrei che altre a questo costo , tramite post, passasse anche il proprio id ma non succede neanche se metto un campo hidden

    Diciamo che a oggi ho risolto con un trucco;
    per primo ho fatto in modo che tutti i record sia della prima select che della seconda abbiano un costo diverso.
    Poi sulla seconda pagina, quella di risposta al post, ho fatto una select con quel valore e trovo l'id, m solo perchè lui non trova record con con costo uguale, altrimente sarebbe un casino.

    Per i radio button ci avevo pensato e anche provato, ma succede una cosa strana, ogni volta che clicco sul bottone lui continua a calcora e sommare, per questo li ho tolti.

    Gli array, diciamo che non sono ancora molto afferrato per capire il loro funzionamento.

    Grazie


  • Consiglio Direttivo

    Personalmente darei a cesare quel che è di cesare, ovvero costruirei il form per un utilizzo lato server, che è molto più sicuro, e poi procederei a fargli i "fiorellini" attorno con il Javascript che alla fine ti serve solo a fare la somma in real time. 😉

    [PHP]<script language="javascript" type="text/javascript">
    <!--
    function spese_sped(sped)
    {
    document.sommacart.spsped.value = sped;
    aggiorna();
    }
    function spese_pag(pag)
    {
    document.sommacart.sppaga.value = pag;
    aggiorna();
    }

        function aggiorna()
        {            
            var totale=0;
            totale = parseInt(document.sommacart.spsped.value) + parseInt(document.sommacart.sppaga.value);
               document.getElementById("totale").innerHTML = totale;
        }
        
        
    //-->
    

    </script>

    <form name="sommacart" method="post">

    <?php
    for ($i=0; $i<count($id_spedizione);$i++)
    {
    echo "<input type="radio" name="spedizione" value="".$id_spedizione*."" onclick="spese_sped('".$importo_spedizione*."');" />".$descrizione_spedizione*."<br />";
    }

    for ($i=0; $i<count($id_pagamento);$i++)
    {
    echo "<input type="radio" name="pagamento" value="".$id_pagamento*."" onclick="spese_pag('".$spese_pagamento*."');" />".$descrizione_pagamento*."<br />";
    }
    ?>
    <input type="hidden" name="spsped" value="0" />
    <input type="hidden" name="sppaga" value="0" />

    </form>
    <div id="totale"></div>[/PHP]
    Una soluzione del genere risulta funzionale anche in assenza dei Js, l'unica cosa che non fa è fare il totale in real time con i Js bloccati. 😉


  • User Newbie

    Ciao,
    provo a vedere come mi funziona il tuo esempio e ti faccio sapere

    Grazie intanto dell'aiuto che mi hai dato

    Ciao