【问题标题】:Getting the selected value from a drop down list and multiplying it by value in sql table in PHP/Javascript从下拉列表中获取所选值并将其乘以 PHP/Javascript 中 sql 表中的值
【发布时间】:2012-03-24 02:56:16
【问题描述】:

我在尝试从下拉列表中获取值并将该值乘以“票证”表中的数字时遇到问题。我一直在尝试在 PHP 和 javascript 中实现这个计算但没有运气:(

这是表单(通过AJAX返回到主页):

$pcSearch = $_POST['postcodeSearch'];

$postCodeSQL = "SELECT * FROM ticket WHERE locationID IN (SELECT locationID FROM location WHERE postCode LIKE '$pcSearch') ";

$postCoderesult = mysql_query($postCodeSQL) or die(mysql_error());

 while ($pcRow = mysql_fetch_assoc($postCoderesult)) {
        $venue = $pcRow['venue'];
        $ticketPrice = $pcRow['tPrice'];
        $date = $pcRow['date'];
        $time= $pcRow['time'];

    echo "<tr>\n";
    echo "<td>$venue</td>\n";
    echo "<td>&pound$ticketPrice</td>\n";
    echo "<td><form id=\"quantity\" method=\"post\" name=\"ticketQuantity\">
                 <select name =\"showQuantity\" id=\"showQuantity\" class =\"showQuantity\" >
                    <option value=\"1\">1</option>                                      
                    <option value=\"2\">2</option>
                    <option value=\"3\">3</option>
                    <option value=\"4\">4</option>
                    <option value=\"5\">5</option>
                 </select>
              </form>
          </td>\n";
    echo "<td>$date</td>\n";
    echo "<td>$time</td>\n";

    echo "<td><form name=\"buyTicket\" class=\"buyTicket\" id=\"buyTicket\" > 
                  <input type= \"button\" id= \"buyMe\" class= \"buyMe\" value= \"Buy\" name=\"buyMe\"> 
              </form> 
          </td>\n";
   echo "</tr>\n";

}

基本上,我想要做的是当用户点击并选择他们想要的门票数量,即 3,这个数字将乘以门票的价格('tPrice')。有没有办法在 PHP 中获取这两个值并将它们相乘?

我尝试添加 jQuery 来监听按钮单击功能,但无济于事...我什至尝试调试它,但由于某些奇怪的原因它不会输出警报:

$(document).ready(function() {
  $(".buyMe").click(function() {
    alert('click');
   });
});

但是,如果我使用 jQuery,我什至如何从表单中获取 'tPrice' 的值?

非常感谢您的帮助:)

【问题讨论】:

  • 你真的真的真的真的需要阅读HEREDOCs 并消除你的倾斜牙签综合症的坏情况。
  • 您的查询也容易受到 SQL 注入攻击。
  • 这是你需要的吗?: parseInt(document.getElementById('showQuantity').value) * parseFloat(document.getElementById('showQuantity').parentNode.parentNode.previousSibling.innerHTML.substr( 1));
  • 啊,我明白了......所以在“”之前使用'\'可能会导致问题吗?并使用 HEREDOC 转义引号?
  • @Cfreak...是的,我知道这一点,稍后我将使用准备好的语句。

标签: php javascript jquery mysql drop-down-menu


【解决方案1】:

您引用的是不存在的类名而不是 id。将.buyme 更改为#buyme

$(document).ready(function() {
  $("#buyMe").click(function() {
    alert('click');
   });
});

编辑 错过了课程也在那里。但是,由于您只是引用单个元素,因此无论如何都应该使用 ID。

【讨论】:

  • 我引用了一个类:class= \"buyMe\"(它位于 行中。
【解决方案2】:

我要做的第一件事就是在票价上加一个班级td

echo "<td class=\"ticketPrice\">&pound$ticketPrice</td>\n";

这使得使用 jQuery 获取价格变得更加容易。

所以现在..你可以这样做了:

$(".buyMe").click(function() {
    var priceForOne = $(this).siblings('.ticketPrice').text().substr(1);
});

事实上,您可以访问 HTML 的源代码,更好的方法可能是使用 data()

echo '<input type="button" class="buyMe" value="Buy" data-ticket-price="'.$ticketPrice.'"/>';

然后您可以将点击更改为:

$(".buyMe").click(function() {
    var priceForOne = $(this).data('ticketPrice');
});

其他几点..

从这里删除id 属性:

<input type= \"button\" id= \"buyMe\" class= \"buyMe\" value= \"Buy\" name=\"buyMe\"> 

选择列表周围不需要一个表单,因为它什么都不做......类似地,按钮周围的表单也不做任何事情!

更新

click 方法不适用于加载文档后添加的 DOM 元素(即通过 AJAX)...您需要使用 on() 方法:

$(document).on('click','.buyMe',function() {
// handle the click here
});

上面的 $(document) 需要是 buyMe 元素的父元素,并且在加载时出现在 DOM 上,在您的情况下,您可以将 $(document) 替换为 $('#idOfYourTable')

Docs for data()Docs for on()

【讨论】:

  • 另一种方法是 document.getElementById('showQuantity').parentNode.parentNode.previousSibling
  • @ManseUK:谢谢你的回答,我会尝试实现它,看看它是否有效。唯一的问题是,按钮似乎没有响应 jQuery ......这就是为什么我添加了一个警报功能来调试它,但它不会显示警报:s
  • @TimJohnstone 进一步更新了我的答案...查看 on() 方法
  • 粉碎!我之前没见过这个 on() 函数 :)
  • @TimJohnstone 请注意它的 jQuery 1.7 及更高版本...如果使用旧版本,请调查 delegate()live()
猜你喜欢
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多