0

我正在尝试用 jQuery 和 PHP 构建购物车,但无法从表单列表中读取值。当试图从提交的表单中获取值时,我只从列表视图中的第一个表单中获取值。

请在此处查看行为:http: //www.adlertz.se/index.php?op=prodlist &katID=9&sidemenu=menushop

点击购买前。中间,你从第一个获得价值。

请帮帮我,我已经找了三天的解决方案。可能是一个简单的问题,但我无法在任何地方找到答案:| !!!!

提前谢谢了!

     function prodlist(){
$katID = $_GET['katID'];

$sql = mysql_query("SELECT * FROM shop_prod WHERE kategoriID=$katID");

while ($rad=mysql_fetch_array($sql)) {
    echo "<div class=\"shop_prod_list\">";
        echo "<div class=\"shop_prod_list_tmb\"><img src=\"shop/images/prod_images_tmb/".$rad['prodID'].".png\" alt=\"\"></div>";

        echo "<form id=\"addcartform\" class=\"addcartform\" method=\"post\">";
        echo "<input type=\"hidden\" name=\"prodID\" id=\"prodID\" value=\"".$rad['prodID']."\" />";
        echo "<input type=\"submit\" class=\"shop_prod_list_kundvagn\" value=\"\" id=\"addcart\"/>";
        echo "</form>";

    echo "</div>";
}
echo "<div id=\"search_results\"></div>";

}

  $(document).ready(function(){ 

$(".addcartform").click(function(e){ 
    e.preventDefault(); 
    addcart(); 
}); 

});

   function addcart(){ 

var prodID=(this).document.getElementById('prodID').value; <-(Reads value but only the first)

$.post("functions/cart.php", {prodID : prodID}, function(data){
    if (data.length>0){ 
        $("#search_results").show();    
        $("#search_results").html(data);
    } 
}) 

}

   <?php
  include "db_config.php";
  include "db_connect.php";

$prodID = strip_tags(substr($_POST['prodID'],0, 100));
$prodID = mysql_escape_string($prodID);

echo $prodID ." is added.";

?>

4

4 回答 4

0

使用类而不是 id

echo "<input type=\"hidden\" name=\"prodID\" class=\"prodID\" value=\"".$rad['prodID']."\" />";

将被点击的元素发送到您的函数

$(".addcartform").click(function(e){ 
    e.preventDefault(); 
    addcart(this); //this line
}); 

然后使用该元素查找您的类的输入

function addcart(element){ 

    var prodID = $(element).find('.prodID').val();  //Get val of clicked item

    $.post("functions/cart.php", {prodID : prodID}, function(data){
        if (data.length>0){ 
            $("#search_results").show();    
            $("#search_results").html(data);
        } 
}) 

虽然我只会使用一个按钮,但没有这样的表格。

php:

echo "<button name='prodID' class='shop_prod_list_kundvagn addcart' data-prodid='".$rad['prodID']."' value='Add' />";

Javascript:

$(".addcart").click(function(e){ 
    e.preventDefault(); 
    var prodID = $(this).data('prodid');

    $.post("functions/cart.php", {prodID : prodID}, function(data){
        if (data.length>0){ 
            $("#search_results").show();    
            $("#search_results").html(data);
        } 
    });
});
于 2013-02-15T16:27:29.430 回答
0

您用来挑选值的代码不正确。

从理论上讲,您应该拥有唯一的 ID - 所以这是您要解决的第一个问题。

其次,您需要找到更好的方法来定位您感兴趣的值。

我的建议是在每个表单中添加一个按钮并将其称为“提交”。

在此按钮上,您添加一个包含产品 ID 的数据属性。

使用此按钮上的 onclick 处理程序,您将能够直接获取数据属性。

未经测试的示例:

<button data-prodid="XYZ" onlcick="handleclick()">submit</button>

Javascript:

$(this).data('prodid') 
于 2013-02-15T16:29:57.770 回答
0

请注意,同一页面上不应有重复的 ID。

在这种情况下,您的所有三个产品的 id 都是“prodID”。因此,在您的 JavaScript 中,当您 getElementById 时,您将始终获得具有该名称的第一个 ID。

有很多解决方案。例如,您可以将产品 ID 添加到按钮的 ID,例如'id="addcart_' . $rad['prodID'] . '"'

然后,您将在表单提交时解析该 ID 以确定选择了哪个产品。

于 2013-02-15T16:36:47.080 回答
0

我在这里找到了另一个解决方案:http: //api.jquery.com/serialize/ - 传递隐藏值。

但是您的解决方案要简单得多:)

于 2013-02-16T21:46:41.047 回答