我有一个PHP脚本,它为支付系统收取信用卡,但问题是我有一个带有变量的脚本,我试图在每次调用php脚本中的函数时添加1唯一的问题是它不起作用。我不确定代码是否有问题,或者是因为加载新页面时没有保存变量,因为每次调用php脚本时它都会重定向到新页面。
带有变量的html脚本,名为product1.html
<script type="text/javascript">
var currentBid = 1;
document.getElementById("currentBid").innerHTML = currentBid;
function addOne() {
currentBid = currentBid +1;
document.getElementById("currentBid").innerHTML = currentBid;
}
</script>
php脚本,其函数名为chargeCard.php
<?php
require_once('./stripe-php/init.php');
// Set your secret key: remember to change this to your live secret key in production
// See your keys here https://dashboard.stripe.com/account
\Stripe\Stripe::setApiKey("Removed for safety");
// Get the credit card details submitted by the form
$token = $_POST['stripeToken'];
$myAmount = $_POST['amount'];
$describtion = $_POST['description'];
$myAmount = round((int)$myAmount*100,0);
// Create the charge on Stripe's servers - this will charge the user's card
try {
$charge = \Stripe\Charge::create(array(
"amount" => $myAmount, // amount in cents, again
"currency" => "usd",
"source" => $token,
"description" => $describtion));
echo '<script type="text/javascript">addOne();</script>"';
} catch(\Stripe\Error\Card $e) {
// The card has been declined
}
?>
我试图在php脚本中调用的函数是行echo '<script type="text/javascript">addOne();</script>"';
答案 0 :(得分:2)
我第一眼看到的就是语法错误:
你的双引号太多了(&#34;)。
可能是那个吗?校正的回声是:
echo '<script type="text/javascript"> addOne(); </script>';
答案 1 :(得分:2)
看起来你正试图将JavaScript变量从一个页面转移到另一个页面。不幸的是,一旦你离开当前页面的范围,JavaScript变量就会消失。
看起来您已经在使用表单POST到服务器,因此您可以采取的措施来维护数据的状态,即在表单中的服务器和客户端之间来回传递。
例如:
在HTML中,假设您当前的表单结构如下:
<form method="POST" action="/enterYourHandlerUrlHere">
<input type="hidden" name="stripeToken">
<input type="text" name="amount">
<input type="text" name="description">
<!-- This is the important line -->
<input type="hidden" name="currentBid" value="<?php echo $currentBid ?>">
</form>
在PHP中,在将上述内容呈现给浏览器之前......
<?php
$currentBid = (isset($_POST['currentBid']) ? $_POST['currentBid'] + 1 : 0);
当您将HTML呈现到屏幕上时,您的$ currentBid值将临时存储在页面上的隐藏输入中,可以在客户端本地访问它,并且可以访问后端逻辑以及只要你保持链条的运转。
或者,最好,您可以简单地将变量存储在$ _SESSION超全局数组中,如下所示:
if (!isset($_SESSION['currentBid'])) {
$_SESSION['currentBid'] = 0;
} else {
$_SESSION['currentBid']++;
}
这将在多个Web请求中维护您的数据,因为PHP拥有这个漂亮的超全局来跟踪用户数据。有关配置和使用$ _SESSION变量的其他信息,请访问此链接以获取官方文档:
会话解决方案可能会更有效,但绝对值得!
答案 2 :(得分:1)
关键概念:
1. php在服务器端运行。
2. javascript在客户端运行
<强>问题:强> 服务器没有由javascript设置的变量,因为它是在客户端设置的。
<强>方法强> 你的javascript需要先将变量发送到服务器,然后你的php才能用javascript中的varilable来处理脚本。
方式:强> 使用隐藏表单并将此表单发送变量发送到php脚本。
也许这适合你的情况,但一般来说,它应该适合你的情况。
<form name="hidden" action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<input type="hidden" name="addone" value="<script type=\"text/javascript\">addOne();</script>" />
<input type="submit" value="Submit" />
</form>
和你的PHP代码;添加以下行:
$currentbidget=$_POST['addone'];
答案 3 :(得分:0)
您有范围问题除非访问全局
,否则无法从函数内更改当前出价