【问题标题】:How to get values from a php generated form如何从 php 生成的表单中获取值
【发布时间】:2011-09-12 21:24:52
【问题描述】:

我有一些 PHP 购物车的代码如下

if($cart->itemcount > 0) {
foreach($cart->get_contents() as $item) {
    echo "Code/ID :".$item['id']."<br/>";
    echo 'Quantity:<form method="post" action="cart.php"><input type="hidden" name="qtyid" id="qtyid" value="'.$item['id'].'"/><input type="submit" name="minus" id="minus" value="-"/>'.$item['qty'].'<input type="submit" name="plus" id="plus" value="+"/><br/></form>';
    echo "Price   :$".number_format($item['price'],2)."<br/>";
    echo "Info    :".$item['infos']."<br />";
    echo "Shipping :".$item['shipping']."<br />";
    echo "Subtotal :$".number_format($item['subtotal'],2)."<br />";
    echo '<form method="post" action="cart.php"><input type="hidden" name="removeid" id="removeid" value="'.$item['id'].'"/><input type="submit" name="remove" id="remove" value="Remove"/></form>';
    }
echo "---------------------<br>";
echo "total: $".number_format($cart->total,2);
} else {
echo "No items in cart";
}

我一直在使用 jQuery Ajax 将数据发布到我的 php 脚本中,当我有一个项目时一切正常:

        /********************************/
        /* Plus Item                   */
        /********************************/
        $('#plus').click(function()
            {
            var qtyid = $(this).val();
            var plus  = 'plus';

            $.ajax({
                url: 'cart.php',
                type: 'post',
                data: 'qtyid=' + qtyid + '&plus=' + plus,

                sucess: function (result) {
                    console.log('it worked');
                }

            })
            return false;
            })

        /********************************/
        /* Minus Item                   */
        /********************************/
        $('#minus').click(function()
            {
            var qtyid = $(this)).val();
            var minus  = 'minus';

            $.ajax({
                url: 'cart.php',
                type: 'post',
                data: 'qtyid=' + qtyid + '&minus=' + minus,

                sucess: function (result) {
                    console.log('it worked');
                }

            })
            return false;
            })

但是,当购物车中有多个产品时,我遇到了麻烦,因为我想,我的代码不允许 jQuery ajax 找到它应该从哪里获取 id,因为生成的 HTML 确实包含带有相同的 ID。

</div>
<form method="post" action="cart.php">
    <input type="hidden" name="imgid" id="imgid" value="YWNoZZeXk2htZmJjaWds">
    <input type="hidden" name="imgalb" id="imgalb" value="YWNoZZeVnGdtZmJjamlj">
    <input type="hidden" name="qty" id="qty" value="1">
    <input type="submit" value="Add to cart" name="addtocart" id="addtocart">
</form>Code/ID :126264027457298<br/>
Quantity:
<form method="post" action="cart.php">
    <input type="hidden" name="qtyid" id="qtyid" value="126264027457298"/>
    <input type="submit" name="minus" id="minus" value="-"/>
    9
    <input type="submit" name="plus" id="plus" value="+"/>
    <br/>
</form>
Price   :$55.85
<br/>
Info    :
Titre<br />
Shipping :6.00<br />
Subtotal :$556.65<br />

<form method="post" action="cart.php">
        <input type="hidden" name="removeid" id="removeid" value="126264027457298"/>
        <input type="submit" name="remove" id="remove" value="Remove"/>
</form>Code/ID :126265084123859<br/>
Quantity:
<form method="post" action="cart.php">
    <input type="hidden" name="qtyid" id="qtyid" value="126265084123859"/>
    <input type="submit" name="minus" id="minus" value="-"/>
    2
    <input type="submit" name="plus" id="plus" value="+"/>
    <br/>
</form>
Price   :$25.85
<br/>
Info    :Boucles d'oreilles courtes «Conic»<br />
Shipping :6.00<br />
Subtotal :$63.70<br />
<form method="post" action="cart.php">
    <input type="hidden" name="removeid" id="removeid" value="126265084123859"/>
    <input type="submit" name="remove" id="remove" value="Remove"/>
</form>

---------------------<br>total: $620.35
</div>

我一直在花费数小时试图找到解决方案。但我觉得是时候寻求帮助了。 我应该怎么办?我应该如何更改我的 HTML 以生成唯一 ID 并找到从 jQuery 和 PHP 获取 ID 的方法?

【问题讨论】:

  • 在两个 jquery 函数中的 $.ajax 之前 .....alert( this.value ) 它可能会返回一个 + 或 -.... 这意味着数据:'qtyid=' + qtyid + '&minus=' + 减号,使发布的数据为 qtyid=- &minus=minus,因此您无需指定产品 ID
  • 不,是时候缩小您的问题范围,以便您可以实际调试它。实际上,“几小时”前就该这样做了。 :) 没有办法一次性调试这个庞然大物,这可能就是你没有成功的原因。这也是为什么对于 SO 问题来说代码太多的原因。 (而且 SO 不是一个“帮助”网站,而是一个关于编程语言问题的网站。)
  • 感谢 Marabutt 和 Tomalak!我不习惯使用 PHP 和 Jquery 进行编码,我不确定应该在哪里找到解决问题的方法(修改 PHP 以更改生成的 HTML 以在 Jquery 中使用不同的选择器,如下面的 Scrooby 建议的那样)。 Tomalak,我不得不承认,我很难理解 SO 是一个关于编程语言问题的网站和一个“帮助”网站之间的区别,因为两者似乎都与我息息相关。我想这与我的问题不够简洁明了有关。你能推荐一个关于编程语言的“帮助”网站吗?谢谢

标签: php jquery ajax forms


【解决方案1】:

您似乎只需要获取与您单击的加号/减号按钮相关联的qtyid 值。如果是这种情况,您应该可以使用以下行获取它:

var qtyid = $('#qtyid', $(this).parent('form')).val();

因此,您的点击事件之一是:

$('#plus').click(function()
{
    var qtyid = $('#qtyid', $(this).parent('form')).val();
    var plus  = 'plus';

    $.ajax({
        url: 'cart.php',
        type: 'post',
        data: 'qtyid=' + qtyid + '&plus=' + plus,
        success: function (result) {
            console.log('it worked');
        }
    });

    return false;

});

【讨论】:

  • 感谢史克鲁比!我还没有测试你的代码,但是你已经能够在两行中写下我昨晚无法清楚表达的内容。我会试一试并报告。非常感谢!
  • 这工作得很好!我肯定必须找到资源来学习 Jquery,因为我确信这看起来一定是一个非常简单的问题。再次感谢 Scrooby。特别是花时间浏览上面的所有代码并投入精力来准确理解我所追求的!
  • 实际上,我遇到了与以前相同的问题。如果我将多篇文章添加到购物车并尝试使用加号和减号按钮更新数量,如果我单击第一篇文章(并且 Ajax 正在工作),我将停留在同一页面上。但是当我点击第二个项目时,我会被带到处理 Ajax 请求的 PHP 页面。所以我猜这一定是返回 false 阻止按钮提交不起作用的表单?当然是因为 $('#plus').click(function() 中使用的 id 在 HTML 中出现了 2 次?
  • 如你所说,这是因为点击事件是基于ID的。一个 ID 应该只在一个页面上出现一次。因此,click 事件仅对具有该 ID 的第一个元素生效。您应该将此添加到您的输入中:class="plus",然后将您的 JavaScript 更改为以下内容:$('.plus').click(function() 这将触发所有元素的事件。
  • 感谢 Scrooby,你太棒了!一旦你说出来,这似乎很容易! ;o)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-19
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多