将JavaScript变量传递到PHP时出现问题

将JavaScript变量传递到PHP时出现问题,javascript,php,jquery,Javascript,Php,Jquery,我在使用submit按钮将变量从JS函数传递到另一个PHP文件时遇到问题。 我有一个预订表单,它使用JS计算总金额,我想将此总额发送到另一个名为“payment.php”的页面,我使用以下代码,但当它重定向到payment.php时,购物车上没有任何更新 我希望当用户选择完物品后,他按下checkout按钮,这个按钮应该被发送,但它不起作用。 需要帮助 以下是JS代码: function payment(){ var totalPrice = calTotal(); docume

我在使用submit按钮将变量从JS函数传递到另一个PHP文件时遇到问题。 我有一个预订表单,它使用JS计算总金额,我想将此总额发送到另一个名为“payment.php”的页面,我使用以下代码,但当它重定向到payment.php时,购物车上没有任何更新 我希望当用户选择完物品后,他按下checkout按钮,这个按钮应该被发送,但它不起作用。 需要帮助

以下是JS代码:

function payment(){
    var totalPrice = calTotal();
    document.getElementById("total").value= totalPrice;
    window.location.href = "payment.php?total=" + totalPrice; 
}
calTotal()是另一个正在进行计算的函数,它工作得非常好

以下是我的接收PHP页面上的代码:

<?php
$total = $_GET['total'];
echo $total;
?> 


实际上,我正在尝试制作一个学校表单,只有一个表单,它位于php页面上,用户选择复选框,为此,我使用了JS,用户在客户端使用calTotal()检查它与合计,并使用.innerHTML函数显示它。我希望发生的是,我希望这个变量被发送到另一个php页面,比如payment.php。我希望这个变量也能在我的付款页面上显示出来,但它并没有获取变量,我尝试了一些我知道的方法,也尝试了@cocco给出的建议,但都是徒劳的。。需要帮助。

如果
付款
是用于提交表单的事件处理程序,那么您可能需要在事件对象上调用
preventDefault()
,以防止浏览器提交表单并基本上覆盖重定向。或者,您可以在表单中有一个隐藏字段,用于提交计算出的总数,并在提交时设置该字段,该字段将与表单中的其他内容一起发布


不过,作为参考,从逐步增强的角度来看,这两种方法都相当丑陋。你基本上要求人们启用JS,这样东西看起来就不会坏。这些东西在服务器端处理得更正确。(特别是当你把这个值用于任何重要的事情时!你基本上是让客户决定你的东西的价格。不要相信它,在服务器上自己计算。)

工作代码:

js

php

但在此之前,您需要使用另一个按钮计算总金额。

------------------------问题2

通过在付款表单元素中添加onsubmit,您可以完全控制它

使用
e.preventDefault()
return false
可以阻止它发送信息 然后转到
“payment.php?total=“+totalPrice页面

YOURPAYMENTFORM.onsubmit=function(e){
 e.preventDefault();
 var totalPrice = calTotal();
 document.getElementById("total").value= totalPrice;
 window.location.href = "payment.php?total=" + totalPrice;
 return false
}

但是在这种情况下,您不发送任何post变量。

calTable()工作得非常好
。。。因此,您可以在重定向之前
console.log(totalPrice)
(在console.log之后返回false以停止该操作),并且您的控制台显示正确的值?我看不出您的代码有任何错误。你能发布HTML吗?这并没有回答具体的问题,但是:你是在浏览器中计算价格,而不是在服务器上?从安全角度看,这似乎有点可疑,尽管我不能在没有看到全部内容的情况下确定。您可能会有其他参数来说明要订购什么。因此,恶意用户可能会发送一个请求,说“请向我发送1000个项目,并向我的帐户收取0.50美元”。calTotal未完成,浏览器正在转发您。添加
alert(totalPrice),而不是location.href以查看它是否工作。你甚至可以离开第三行,你会看到它确实通过一个警报传递了值,然后你才试图将总数发送到两个不同的php页面?这不是他想要做的。他没有发布表单,我只是在解释他的代码中有哪些错误。在“所以要把所有东西都放在一起”之后阅读submit是发布表单的完美方式,如果你在表单中按enter键或单击指定的submit按钮,那么表单执行时就是这样。是的,他的方法在实时网站上会是一场灾难,但他的代码没有这样做是有原因的该工作的时候就工作。我认为应该首先回答这个问题,然后是一个重要的提示,说他的方法是可怕的,如果它被用于现场site@cocco我尝试了你所说的,但我的PHP页面上仍然没有收到任何信息(
<?php
echo $_POST['total'];
?>
<?php
$total = $_POST['total'];
echo $total;
?>
YOURPAYMENTFORM.onsubmit=function(e){
 e.preventDefault();
 var totalPrice = calTotal();
 document.getElementById("total").value= totalPrice;
 window.location.href = "payment.php?total=" + totalPrice;
 return false
}