notify_url.php
<?php
include('connection.php');
$sql = "UPDATE tablename
SET credit = credit + {$_POST['amount']}
WHERE username = '123456789'";
mysqli_query($con, $sql);
?>
表单网页
<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网站生成的表单("购买"按钮)。
编辑:
你有value=10.95
,用引号括起来 value="10.95"
- 这没什么大不了的,但很好的做法。
也if(isset($_POST['amount'])){...}
或if(!empty($_POST['amount'])){...}
同时确保您的列DECIMAL
长度/值(例如 10,2
),以便能够接受小数,例如 10.95
咨询:
- http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
- http://dev.mysql.com/doc/refman/5.0/en/fixed-point-types.html
我测试它的方式是使用:
$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注入是开放的。使用预准备语句或带有预准备语句的 PDO,它们更安全。
将错误报告添加到文件顶部,这将有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
以及or die(mysqli_error($con))
mysqli_query()
.
旁注:错误报告只应在暂存中完成,而不应在生产环境中完成。
- 如果这仍然不起作用,请发布您的 HTML 表单和数据库架构以绝对确定。
你能尝试重写代码如下:
$sql = "UPDATE tablename SET credit = credit + ". $_POST['amount'] ." WHERE username = '123456789'";
无论如何,我不鼓励这种方法(将 POST 直接传递给查询),因为容易受到 mysql 注入的攻击。
并尝试改变
<input name="notify_url" value="notify_url.php" type="hidden">
在
<input name="notify_url" value="http://www.domain.com/notify_url.php" type="hidden">