php скрипт обновляет базу данных в соответствии с количеством, а не добавляет к нему - PullRequest
0 голосов
/ 12 июня 2019

Я новичок в PHP, поэтому, пожалуйста, потерпите меня.Я настроил Xampp, так как я работаю над проектом по созданию уязвимого сайта CSRF.Это будет симулировать банковский перевод, который уязвим к нему.Мне нужно создать страницу 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. Результат, полученный для того же примера, составляет 101 доллар на конечном счете.Таким образом, целевой счет обновляется до 101 доллара.Я не могу понять, почему это происходит.

Ответы [ 2 ]

1 голос
/ 12 июня 2019

mysqli_data_seek возвращает только true или false, в зависимости от того, была ли операция успешной.

Свободный характер php позволяет вам добавить сумму $ к true и цифры 100 + true = 101.

Вместо mysqli_data_seek вы, вероятно, захотите использовать вместо этого один из методов fetch.

0 голосов
/ 12 июня 2019

Внутри вашего кода

$target_balance = mysqli_data_seek($target_result, 0);

$ target_balance будет инициализироваться как true или false, потому что метод mysqli_data_seek () возвращает true или false, что означает 1 и 0 соответственно.

Вот почему вы получаете101, если сумма вашей транзакции равна 100.

Решение:

 $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'];
...