循环下拉只获取来自foreach循环的第一项值php / ajax

时间:2016-10-10 20:34:43

标签: php ajax foreach

我的购物车中有两个下拉产品。 所有产品都存储在foreach循环内的会话中。 但我的下拉菜单仅适用于循环中的第一个产品。 例如:如果我的购物车中有2个产品,那么fisrt产品系列会根据这两个产品获得成本。 但第二个产品从第一个下拉列表获得相同的成本。 有人可以告诉我如何解决这个问题。

我在checkout.php中的脚本

 $(document).ready(function() {

    $('.fabric, .size').on('change', sendData);

    function sendData() {
      var fabricID = $('.fabric').val();
        var sizeID   = $('.size').val();
        var cost = $(this).attr('data-id');
      if ( fabricID !== "" && sizeID !== "") {
          $.ajax({
                type     : 'GET',
                url      : 'calculates.php',
                dataType : 'json',
                data     : {
                    prod_id:cost,
                    fabric_id: fabricID,
                    size_id: sizeID
                }
            }).done(function(data) {
                $('.icms' + cost).text(data.val);

            });
        }
    }
});

我在php.php中的php foreach循环

function cart(){
    global $conn;


    $fabric_options = '<option>Select Fabric</option>';
    $query2 = "SELECT * FROM almofadas";
    $result = mysqli_query($conn,$query2);
    while($rows = mysqli_fetch_assoc($result)){

        $tecido=$rows['tecido'];
        $id_price=$rows['id_price'];
        $t50='50';
        $t45='45';

        $fabric_options .= '<option value="'.$id_price.'">'.$tecido.'</option>';
    }

    if(!isset($_SESSION['icms'])) {
        $_SESSION['icms']='0';
    }else{
        $_SESSION['icms'];
    }

    foreach ($_SESSION as $name => $value) {
        if($value > 0){
            if(substr($name, 0, 8 ) == "product_"){
                $length = strlen($name) -8;
                $item_id = substr($name,8 , $length);

                $query = "SELECT * 
                             FROM gallery2 
                          WHERE gallery2.id =".escape_string($item_id). "";
                $run_item = mysqli_query($conn,$query);
                while($rows = mysqli_fetch_assoc($run_item)){ 
                    $vari   = $rows['variante'];
                    $num    = $rows['title'];
                    $id     = $rows['id'];

                    $btn_add ='<button type="button" class="btn btn-success actions plus" data-action="plus" product_id="'.$id.'"><i class="fa fa-plus fa-lg" aria-hidden="true" add_btn></i></button>';

                    $btn_remove ='<button type="button" class="btn btn-warning actions less" data-action="remove" product_id="'.$id.'"><i class="fa fa-minus fa-lg" aria-hidden="true" remove_btn></i></button>';

                    $btn_delete ='<button type="button" class="btn btn-default actions" data-action="delete" product_id="'.$id.'" onclick="deleteRow(this)"><i class="fa fa-times fa-lg" aria-hidden="true"></i></button>';

                    if($rows['variante'] < 1){
                        $vari="";
                    }else{
                        $vari = "-".$rows['variante'];
                    }

                    $product = '
        <tr>
          <td style="width:100px; "><img src="../'.$rows['image'].'" style="width:90%;border: 1px solid black;"></td>
          <td>'.$num.''.$vari.'</td>
          <td style="width:15%;">
              <select name="fabric" class="fabric select form-control selectpicker" required="" data-id="'.$id.'">
                '. $fabric_options . '  
              </select>
          </td>

          <td>
                <select  data-id="'.$id.'" class="select size form-control selectpicker" required style="width:80%;" >
                <option>Select size</option>
                <option value="'.$t50.'">50x'.$t50.'</option>
                <option value="'.$t45.'">45x'.$t45.'</option>

              </select>
          </td>
          <td class="product'.$id.'">'.$value.'</td>
          <td class="icms">R$: '.$_SESSION['icms'].'</td>
          <td class="total'.$id.'" data-id="'.$id.'">R$: '.$value * $_SESSION['icms'] .' </td>
          <td> 
             '.$btn_add.' '.$btn_remove.' '.$btn_delete.'
          </td>
        </tr>';
        echo $product;  

        } 
      } 
    }
  }   
}

这是我计算的地方..

calculates.php

<?php header('Content-Type: application/json');

 include_once '../incluedes/conn_cms.php'; //session allways start here

 if(isset($_GET["size_id"],$_GET["fabric_id"],$_GET['prod_id'])){
    $size_id=$_GET["size_id"] ;
    $fabric_id=$_GET["fabric_id"] ;
    $prod   = $_GET['prod_id'];
    $prodname = 'product_'.$prod;

    $query3 =" SELECT * FROM valores_almofadas WHERE size='$size_id' AND price_id ='$fabric_id'";

    $result = mysqli_query($conn,$query3);
    while($rows = mysqli_fetch_assoc($result)){

        if($_SESSION['estado'] == 'SP'){
            $ICMS = $rows['icms_7'];
        }else{
            $ICMS = $rows['icms_12'];
        }
        $_SESSION['icms']=$ICMS;

    } 
    echo json_encode( $_SESSION['icms']);
} 

我怎样才能让我的下拉工作成为产品的一部分?

1 个答案:

答案 0 :(得分:1)

问题是var fabricID = $(".fabric").val()正在使用fabric类从它找到的第一个元素中选择值。每次都是相同的元素(第一个),无论页面上有多少元素存在。

您需要从正确的元素中选择值。由于您需要同时发送结构和大小值这一事实,因此稍微复杂一些。幸运的是,您在<select>个元素上都有行ID作为数据属性,因此我们可以使用它来匹配它们。

$(document).ready(function() {

  $('.fabric, .size').on('change', sendData);

  function sendData() {
   //use the data-id attribute of the selected element to match the correct elements
   var id = $(this).data("id");
    var fabricID = $('.fabric[data-id=' + id + ']').val(); 
    var sizeID   = $('.size[data-id=' + id + ']').val();

    if ( fabricID !== "" && sizeID !== "") {
      $.ajax({
            type     : 'GET',
            url      : 'calculates.php',
            dataType : 'json',
            data     : {
                prod_id:id,
                fabric_id: fabricID,
                size_id: sizeID
            }
        }).done(function(data) {
            $('.icms' + id).text(data.val);

        });
      }
  }
});