php脚本更新数据库以匹配数量,而不是添加到数据库中

时间:2019-06-12 12:45:12

标签: php mysql xampp php-7

我是PHP的新手,所以请多多包涵。 由于我正在从事创建CSRF易受攻击站点的项目,因此我设置了Xampp。这将模拟容易受到的银行转帐。我需要为传输创建一个php页面。我已经映射了代码,因为它是一个即将结束的项目。我填充了数据库,并确保该部分一切正常。但是似乎存在某种问题,因为由于某种原因,数据库没有更改为完全相同的值+1,而是添加到了接收方,而不是增加传输的值。我无法弄清楚。

$target = $_GET['TransferTarget'];
$amount = $_GET['TransferAmount'];
$target_query = "SELECT * FROM accounts acc WHERE (acc.AccountNumber = '$target')";
$target_result = mysqli_query($connection, $target_query);
$target_balance = mysqli_data_seek($target_result, 0);
$target_balance = $target_balance + $amount;
$source_balance = $source_balance - $amount;
$update_target_query = "UPDATE accounts SET accounts.Amount = '$target_balance' WHERE accounts.AccountNumber = '$target'";
$update_source_query = "UPDATE accounts SET accounts.Amount = '$source_balance' WHERE accounts.AccountNumber = '$source_account'";
$update_target_result = mysqli_query($connection, $update_target_query);
$update_source_result = mysqli_query($connection, $update_source_query);

例如,如果我将100美元转移到已经有1000,即1100的acc上,则预期的结果将是。 对于同一示例,我得到的结果是最终帐户中有101美元。因此,目标帐户更新为101美元。我似乎无法理解为什么会这样。

2 个答案:

答案 0 :(得分:1)

mysqli_data_seek仅根据操作是否成功返回true或false。

php的宽松性质使您可以向true添加$ amount,并为100 + true = 101加上数字。

您可能希望使用fetch方法之一来代替mysqli_data_seek。

答案 1 :(得分:-1)

在代码内

$target_balance = mysqli_data_seek($target_result, 0);

$ target_balance将初始化为true或false,因为mysqli_data_seek()方法返回true或false分别表示1和0。

这就是为什么如果交易量为100,您将获得101。

解决方案:

 $target_details = mysqli_data_seek($target_result, 0);
 $target_balance= $target_details['target_balance'];
 $source_balance= $target_details['source_balance'];

然后在执行操作时使用两个变量...

警告:您的代码不受保护,使用sql_injection非常容易。阅读有关如何保护代码的更多信息。

[更新]

 $target_result = mysqli_data_seek($target_result, 0);

  ///New line
  $target_result=mysqli_fetch_assoc($target_result);
  //End new line

 $target_balance= $target_details['target_balance'];
 $source_balance= $target_details['source_balance'];