Calculate Quantity x Price and play value in input and session

3

I'm trying to play a total calculation on an input and also on a shopping cart session that I'm developing and I'm not getting it, I'll try to explain the problem I have.

The inputs are like this:

<div class="qty">

// QUANTIDADE
<?php if ( isset($_SESSION["quantidade"][$id]) && ($_SESSION["quantidade"][$id] != 0) ){ ?>
<input type="text" id="quantidade" name="quantidade" maxlength="10" value="<?php echo $_SESSION["quantidade"][$id] ?>" id_qtd="<?php echo $list['id_produto'] ?>"  />
<?php } else { ?>
<input type="text" id="quantidade" name="quantidade" value="<?php echo $QTD; ?>" class="input" id_qtd="<?php echo $list['id_produto']; ?>" />
<?php }  ?>&nbsp; x &nbsp;

// VALOR UNITÁRIO
<?php if ( isset($_SESSION["valor_unitario"][$id]) && ($_SESSION["valor_unitario"][$id] != 0) ){ ?>
<input type="text" id="valor_unitario" name="valor_unitario" maxlength="10" value="<?php echo $_SESSION["valor_unitario"][$id] ?>" id_unit="<?php echo $list['id_produto'] ?>"  />
<?php } else { ?>
<input type="text" id="valor_unitario" name="valor_unitario" value="<?php echo $QTD; ?>" class="input" id_unit="<?php echo $list['id_produto']; ?>" />
<?php }  ?>&nbsp; = &nbsp;                                      

SOMA TOTAL
<input type="text" id="valor_total" name="valor_total" value="<?php echo $_SESSION["valor_total"][$id]; ?>" 
id_total="<?php echo $list['id_produto']; ?>" />                                        

Each record, such as quantidade and valor unitário , I am saving in session and they are registered even when I insert a new product, I do this to save them:

The calls look like this:


        // ATUALIZANDO QUANTIDADE
        $("input[name='quantidade']").blur(function(){  

            var sAcao = 'atualizar-quantidade';
            var sQuantidade = $(this).val();
            var sID_QTD = $(this).attr('id_qtd');           

            $.ajax({
                type: "POST",
                url: "atualizar-dados.php",             

                data: {
                    'acao' : sAcao,
                    'quantidade' : sQuantidade,
                    'id_qtd' : sID_QTD
                },              

                success: function(msg){
                    $(".ms").text(msg);
                }               
            });
        });

        // ATUALIZANDO O VALOR UNITÁRIO
        $("input[name='valor_unitario']").blur(function(){  

            var sAcaoUnit = 'atualizar-valor';
            var sValorUnitario = $(this).val();
            var sID_UNI = $(this).attr('id_unit');  

            $.ajax({
                type: "POST",
                url: "atualizar-valor.php",             

                data: {
                    'acaoUnit' : sAcaoUnit,
                    'valor_unitario' : sValorUnitario,
                    'id_unit' : sID_UNI
                },              

                success: function(msg){
                    $(".ms").text(msg);
                }               
            });
        }); 

    });

Quantity:

    session_start();
    $acaoUnit = $_POST['acao'];

    if ( isset($acao) && $acao == 'atualizar-quantidade' ){
        $id = isset($_POST["id_qtd"]) ? $_POST["id_qtd"] : null;

        $_SESSION["quantidade"][$id] = $_POST['quantidade'];
        //echo $_SESSION["quantidade"][$id];    
    }   

Unit Value:

    session_start();
    $acaoUnit = $_POST['acaoUnit'];

    if ( isset($acaoUnit) && $acaoUnit == 'atualizar-valor' ){
        $id = isset($_POST["id_unit"]) ? $_POST["id_unit"] : null;

        $_SESSION["valor_unitario"][$id] = $_POST['valor_unitario'];
        // echo $_SESSION["valor_unitario"][$id];   
    }   

What I'm trying to do to save the total sum:

window.onload = function() {
    $("input[name='valor_total']").focus(function() {

        $('.qty').each(function() {

            // console.log(this);

            var qtd = $(this).find('input[name=quantidade]').val()
            var val = $(this).find('input[name=valor_unitario]').val();         

            // QUANTIDADE TOTAL
            var total = parseFloat(qtd) * parseFloat(val);              

            $(this).find('input[name=valor_total]').val(total); 

            var sAcaoTotal = 'atualizar-total';
            var sValorTotal = total;
            // var sID_Total = $(this).attr('id_total');    

            // alert(sValorTotal);

            $.ajax({
                type: "POST",
                url: "atualizar-total.php",             

                data: {
                    'acaoTotal' : sAcaoTotal,
                    'valor_total' : sValorTotal
                    // 'id_total' : sID_Total
                },              

                success: function(msg){
                    $(".ms").text(msg);
                }   

            });



        });
    })
}

And attempting to save the value in session:

    session_start();

    $acaoTotal = $_POST['acaoTotal'];

    if ( isset($acaoTotal) && $acaoTotal == 'atualizar-total' ){

        $id = isset($_POST["id_total"]) ? $_POST["id_total"] : null;

        $_SESSION["valor_total"][$id] = $_POST['valor_total'];
        // echo $_SESSION["valor_unitario"][$id];   
    }

For the quantity and unit value it works, but for the total not, it is doing the following: I enter a new product, it informs the quantity and unit value and when clicking on the total field the sum is done, but when inserting a new product the total adds up, but clicking on the total field the value is calculated. I hope it does not get complicated.

    
asked by anonymous 09.10.2017 / 20:29

1 answer

0

You can use PHP itself in each unit value and quantity update to persist the session total, even saving the extra AJAX call for the total_value, since it changes whenever one of the other two changes:

Amount and total:

session_start();
$acaoUnit = $_POST['acao'];

if ( isset($acao) && $acao == 'atualizar-quantidade' ){
    $id = isset($_POST["id_qtd"]) ? $_POST["id_qtd"] : null;

    $_SESSION["quantidade"][$id] = $_POST['quantidade'];
    $_SESSION["valor_total"][$id] = ($_SESSION["valor_unitario"][$id] *  $_SESSION["quantidade"][$id]);
}  

Unit and total value:

session_start();
$acaoUnit = $_POST['acaoUnit'];

if ( isset($acaoUnit) && $acaoUnit == 'atualizar-valor' ){
    $id = isset($_POST["id_unit"]) ? $_POST["id_unit"] : null;

    $_SESSION["valor_unitario"][$id] = $_POST['valor_unitario'];
    $_SESSION["valor_total"][$id] = ($_SESSION["valor_unitario"][$id] * $_SESSION["quantidade"][$id]);
}   

In this way you can return both the changed value (quantity or unit value) and the total value for the same AJAX call of the input and treat both at the same time in javascript.

    
12.10.2017 / 00:57