通过php添加变量不会起作用

时间:2015-03-25 21:18:34

标签: javascript php html variables addition

我有一个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>"';

4 个答案:

答案 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变量的其他信息,请访问此链接以获取官方文档:

PHP: Sessions

会话解决方案可能会更有效,但绝对值得!

答案 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)

您有范围问题除非访问全局

,否则无法从函数内更改当前出价