【问题标题】:ajax update qty where id and qtyajax 更新数量 where id 和 qty
【发布时间】:2013-05-06 16:10:26
【问题描述】:

我正在尝试更新有多个商品的购物车中的数量,

例如-

var get id of order item
var get quantity
post both to updateqty.php

订单中有多行,有多个 id 为 qty 的文本框和多个隐藏输入,其 id 为 part 所以它只能在它在该页面上找到的第一个 id 上工作,我需要它能够更新订单中的其他商品,

例如

get class of the textbox, then find out which qty is being updated, then update the quantity of the item.

如果有人知道如何做到这一点,我们将不胜感激。

<script>


function updateqty() {
    var ud_first = document.getElementById('part').value;
    var ud_last = document.getElementById('qty').value;

    if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    }
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById("cart").innerHTML = xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", "php/updateqty.php?order=<?php echo $order; ?>&id=" + ud_first + "&qty="+ud_last, true);
    xmlhttp.send();
}
</script>
<?php 


$sql="SELECT * FROM `orders` WHERE  `invoice` = '".$order."' ORDER BY id DESC";

$result = mysql_query($sql);
echo"
     <table id='POITable' width='100%' border='1'>
        <tr>
            <td>SKU</td>
            <td>QTY</td>
            <td width='45%'>item</td>
            <td>Unit Price</td>
            <td>Line Price</td>
            <td>Delete</td>
        </tr>";
while($row = mysql_fetch_array($result))
  {
echo"<tr><td>" . $row['part'] . "</td><td><form name='test'>
   <input type='hidden' value='" . $row[id] . "' id='part'>   <input type='text' id='qty' value='" . $row['qty'] . "' onblur='updateqty(this.id)'></form></td><td>" . $row['description'] . "</td><td>" . $row['price'] . "</td><td>" . $row['lineprice'] . "</td><td> <input type='image' src='images/btn_delete.png' value='" . $row[id] . "' onclick='deletesku(this.value)' height='30'/></td>
";

 }
?>  

插入的php是

$id=$_GET[id];

$sql2="SELECT * FROM  `orders` WHERE  `id` = '".$id."'";

$result2 = mysql_query($sql2);

$row2 = mysql_fetch_array($result2);

$order=$_GET[order];
$qty=$_GET[qty];

$sql="SELECT * FROM  `stock` WHERE  `part` = '".$part."'";

$result = mysql_query($sql);

$row1 = mysql_fetch_array($result);

$lineprice=$qty * $row2[price];

$sqlins1 = "UPDATE `orders` SET qty='$qty', lineprice='$lineprice' WHERE id = '".$id."'";

不是 MYSQL TABLE 的倍数是 html 中的 ids

所以我需要它来获取购物车中产品的 id 并通过 ajax 更新该 id 的数量

脚本的重要部分是

    function updateqty() {
        var ud_first = document.getElementById('part').value;
        var ud_last = document.getElementById('qty').value;

        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        }
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                document.getElementById("cart").innerHTML = xmlhttp.responseText;
            }
        }
        xmlhttp.open("GET", "php/updateqty.php?order=<?php echo $order; ?>&id=" + ud_first + "&qty="+ud_last, true);
        xmlhttp.send();
    }
    </script>
    <?php 


    $sql="SELECT * FROM `orders` WHERE  `invoice` = '".$order."' ORDER BY id DESC";

    $result = mysql_query($sql);
    while($row = mysql_fetch_array($result))
      {
    echo"<tr><td>" . $row['part'] . "</td>

<td>

    <form name='test'>
           <input type='hidden' value='" . $row[id] . "' id='part'>
       <input type='text' id='qty' value='" . $row['qty'] . "' onblur='updateqty(this.id)'></form>

    </td><td>" . $row['description'] . "</td><td>" . $row['price'] . "</td><td>" . $row['lineprice'] . "</td><td> <input type='image' src='images/btn_delete.png' value='" . $row[id] . "' onclick='deletesku(this.value)' height='30'/></td>
        ";

         }

提前致谢

【问题讨论】:

    标签: php ajax


    【解决方案1】:
        function updateqty() {  
    
        var str="$(this).attr('name')"; 
        var orderCode=str.slice(9,-1);
        var quantity = $(this).value;  
    
              if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
        else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }
        xmlhttp.onreadystatechange=function()
          {
    
        xmlhttp.open("GET","updateqty.php?order=<?php echo $order; ?>&id=" + orderCode + "&qty=" + quantity,true);
        xmlhttp.send();
        }
    
        </script>
    
    
        <div id="cart">
        <?php
        $sql="SELECT * FROM `orders` WHERE  `invoice` = '".$order."' ORDER BY id DESC";
    
        $result = mysql_query($sql);
        echo"
           <table id='POITable' width='100%' border='1'>
                <tr>
                    <td>SKU</td>
                    <td>QTY</td>
                    <td width='45%'>item</td>
                    <td>Unit Price</td>
                    <td>Line Price</td>
                    <td>Delete</td>
                </tr>";
        while($row = mysql_fetch_array($result))
          {
        echo"<tr><td>" . $row['part'] . "</td><td>
        <input type='text' name='quantity[779]' size='3' value='" . $row['qty'] . "' tabindex='1' onblur='updateqty(this.value)' />
    
    </td><td>" . $row['description'] . "</td><td>" . $row['price'] . "</td><td>" . $row['lineprice'] . "</td><td><img src='images/btn_delete.png' onclick='deleteRow(this)' height='30'/></td>
    ";
     }
    

    【讨论】:

      【解决方案2】:

      所以您是说您对 SQL 更新语句感到困惑?如果您需要帮助,请至少向我们展示 SQL 查询。 SELECT 语句没有用,因为 UPDATE 坏了。 如果您遇到问题,SQL UPDATE 语句的执行也非常简单,因为您已经完成了 0 次研究。

      我会尽量用你提供的有限代码来帮助你。更新应该是这样的

      UPDATE <tablename> SET QTY=$qty AND SKU=$sku WHERE id=$id
      

      如果您要创建购物车,您需要的数量将超过要存储的数量。您不能只拥有一辆装有 6 个数量的购物车,而无法知道数量是多少。我建议您创建一个包含用户 ID 和项目 ID 和数量的表。然后当此人添加到购物车时,插入一个包含用户 ID、项目 ID 和数量的新行。然后,当用户进入购物车时,您可以使用商品 ID 调用商品表,以获取您需要的有关商品的所有信息,例如成本等。

      【讨论】:

      • 对不起,更新在另一个文件中,我现在将把它放在问题中,尽管插入部分工作正常
      • updateqty.php?order=&qty="+str 是问题所在。它只传递了 2 个标头变量,因为脚本正在使用 3。更新需要一个从 $id=$_GET[id]; 获取的 id(主键);但是你没有在标题中传递一个 id 所以它永远不会被分配
      • 它需要获取 id 但所有的 id 都是相同的,所以我需要它告诉插入脚本哪一行更新哪个文本框被更改
      • 所有 sql 表都需要一个主键。具有重复键的表意味着您无法更新它。你需要重新设计整个事情。我建议你在纸上做,并在主键和外键之间画线。如果你不知道外键是什么,那么谷歌它。表需要主键,就是这样。如果要更新 id = 10 的表并且 id = 10 有 50 行,那么系统如何知道哪一行? userid + itemid = 这 2 列构成主键,然后是 qty 列。永远不会有 2 行具有相同的用户 ID 和项目 ID
      • 正如我之前所说,您没有在标头中传递 3 个变量,但 php 文件正在寻找 3 个标头变量。 $id=$_GET[id];由于 $_get['id'] 不存在,它将=什么都没有。然后当查询执行时,它会说 id = nothing 并且 nothing 不能是主键,所以它会中断。你说所有的 id 都是一样的,然后我说你不能有多个主键......我看不出这不是数据库设计问题
      猜你喜欢
      • 1970-01-01
      • 2012-11-02
      • 2020-11-19
      • 1970-01-01
      • 1970-01-01
      • 2015-10-30
      • 2015-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多