0

jQuery と PHP でショッピング カートを作成しようとしていますが、フォーム リストから値を読み取ることができません。送信されたフォームから値を取得しようとすると、リスト ビューの最初のフォームからのみ値が取得されます。

ここで動作を確認してください: http://www.adlertz.se/index.php?op=prodlist&katID=9&sidemenu=menushop

元で購入をクリックします。中間では、最初から値が得られます。

これで私を助けてください、私は3日間解決策を探しています. おそらく単純な問題ですが、どこにも答えが見つかりません:| !!!.

よろしくお願いします!

     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

私はここで別の解決策を見つけました:http ://api.jquery.com/serialize/-隠された値を渡すため。

しかし、あなたの解決策ははるかに簡単です:)

于 2013-02-16T21:46:41.047 に答える
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);
        } 
}) 

このようなフォームがなければ、ボタンは 1 つしか使用しませんが。

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 を使用しないでください。

この場合、3 つの製品すべてに「prodID」という ID があります。したがって、JavaScript で getElementById を実行すると、常にその名前の最初の ID が取得されます。

これには多くの解決策があります。たとえば、次のように、製品 ID をボタンの ID に追加できます。'id="addcart_' . $rad['prodID'] . '"'

次に、フォームの送信時にその ID を解析して、どの製品が選択されたかを判断します。

于 2013-02-15T16:36:47.080 に答える