notify_url.php
<?php
include('connection.php');
$sql = "UPDATE tablename
SET credit = credit + {$_POST['amount']}
WHERE username = '123456789'";
mysqli_query($con, $sql);
?>
表单html
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="6RNT8A4HBBJRE">
<input type="image"
src="https://www.sandbox.paypal.com/en_US/i/btn/btn_buynowCC_LG.gif"
border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif"
width="1" height="1">
<input name="amount" value=10.95 type="hidden"> <<< not sure if this line should be here
<input name="notify_url" value="notify_url.php" type="hidden">
</form>
上面的代码就是我在notify_url.php文件中的代码。我的数据库没有更新:(。我的连接文件没问题。当我输入一个数字而不是POST变量时,它工作正常。这只意味着我的POST变量可能是错误的,或者根本没有调用脚本!
修改 第二个代码是从PayPal网站(购买按钮)生成的表单。
答案 0 :(得分:2)
修改强>
你有value=10.95
,用引号value="10.95"
包裹它 - 这不是什么大不了的事,而是良好的做法。
还if(isset($_POST['amount'])){...}
或if(!empty($_POST['amount'])){...}
同时确保您的列为DECIMAL
,其长度/值为10,2
,例如,为了能够接受小数,例如10.95
咨询:
我测试的方式是使用:
$amount = $_POST['amount'];
$sql = "UPDATE tablename
SET credit = credit + $amount
WHERE username = '123456789'";
或者您可以尝试使用连接:
SET credit = credit + '".$amount."'
此外,您的帖子操作应为action="notify_url.php"
,而不是您现在使用的内容。
发布HTML表单之前的原始答案:
我怀疑你的表单元素没有名称属性和/或值,也没有使用POST方法。
如果你的表单没有定义的方法是POST,因为你使用$_POST['amount']
,它将默认为GET方法,反过来无声地失败。
由于您尚未发布HTML表单,因此您可以自行了解以下任何内容:
如果使用具有预设值的隐藏类型:(在这种情况下,我使用了1000)。
<form method="post" action="your_handler.php">
<input type="hidden" name="amount" value="1000">
<input type="submit" name="submit">
</form>
如果来自用户输入:
<form method="post" action="your_handler.php">
<input type="text" name="amount">
<input type="submit" name="submit">
</form>
您还可以使用以下方法检查表单的元素是否设置为空
if(isset($_POST['amount'])){...}
或if(!empty($_POST['amount'])){...}
int
而不是varchar
,这也可能是您的代码失败的原因之一。我需要注意您目前的代码是SQL injection开放的。使用prepared statements或PDO with prepared statements,他们更安全。
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
以及or die(mysqli_error($con))
到mysqli_query()
。
旁注:错误报告应仅在暂存时完成,而不是生产。
答案 1 :(得分:0)
您可以尝试重写代码,如下所示:
$sql = "UPDATE tablename SET credit = credit + ". $_POST['amount'] ." WHERE username = '123456789'";
无论如何我不鼓励这种方法(直接将POST传递给查询)因为mysql注入容易受到攻击。
并尝试更改
<input name="notify_url" value="notify_url.php" type="hidden">
in
<input name="notify_url" value="http://www.domain.com/notify_url.php" type="hidden">