【问题标题】:Error updating database PHP更新数据库 PHP 时出错
【发布时间】:2011-09-29 06:54:48
【问题描述】:

向我们的支付网关提交支付表单(信用卡等)后,我们会在支付被批准时收到“response_code”1。然后,我们使用以下代码更新数据库中的用户信息以反映已批准的交易。

但是,大约每 10 次,即使交易返回了批准的响应,用户的信息也不会更新。这段代码有什么明显错误吗?或者可能由于某种原因 response_code 不等于 1?

<?php
session_start();
if ($_GET['response_code'] == 1)
{ 
require('scripts/global.php'); //connect to database
$email = $_SESSION['email'];
$level = 3;
$transaction_id = "" . htmlentities($_GET['transaction_id']);
mysql_query ("UPDATE `users` SET level = '$level', trans_id = '$transaction_id' WHERE `email` = '$email'"); //update user info
$error = "false";
}
else
{
$noerror = "true";
$message = "Sorry, an error occurred: " . htmlentities($_GET['response_reason_text']);
}
?>

【问题讨论】:

  • 是什么阻止我设置?response_code=1?此外,您可能会受到 SQL 注入攻击!

标签: php mysql session payment-gateway


【解决方案1】:

可能是因为会话超时? WHERE 使用电子邮件地址,如果这无效(不存在),那么您可能不会得到更新。

也许您应该检查交易 ID(或类似的)。我猜你在交易开始之前已经得到了类似的东西?

edit:如果发生错误,也存储,并尝试存储您需要的变量。这使得查明问题变得容易得多。例如,为此使用日志文件。

【讨论】:

    【解决方案2】:

    除了明显的安全漏洞之外,您还没有检查查询结果。尝试使用mysql_error()mysql_affected_rows() 来查看是否有任何更新。当其中任何一个表示异常时,您还希望查看运行的查询的确切文本。检查事项:

    • $email 是空的吗?
    • $transaction_id$email 有撇号吗?
    • 您的数据库中是否有重复的电子邮件地址?
    • 用户是否已设置为 3 级?
    • 您是否失去了与数据库的连接?
    • 您的脚本是否被调用过?

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 1970-01-01
      • 2020-09-22
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多