Ошибка обновления базы данных PHP - PullRequest
0 голосов
/ 29 сентября 2011

После отправки платежной формы (кредитные карты и т. Д.) На наш платежный шлюз, мы получаем «код_ответа» 1, когда платеж одобрен.Затем мы используем следующий код для обновления информации о пользователе в базе данных, чтобы отразить одобренную транзакцию.

Однако примерно каждый 1 из 10 раз информация пользователя просто не будет обновляться, даже если транзакция вернула одобренный ответ.Что-то явно не так с этим кодом?Или, возможно, код_ответа по какой-то причине не равен 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']);
}
?>

Ответы [ 2 ]

2 голосов
/ 29 сентября 2011

Возможно, потому что был тайм-аут сеанса?ГДЕ использует адрес электронной почты, если он недействителен (не там), то вы, вероятно, не получите обновление.

Возможно, вам следует проверить идентификатор транзакции (или аналогичный).Я полагаю, у вас есть что-то подобное до начала транзакции?

edit: Также сохраните, если произойдет ошибка, и попробуйте сохранить переменные, которые вам тоже нужны.Это значительно облегчает выявление проблемы.Для этого используйте файл журнала, например.

0 голосов
/ 29 сентября 2011

Помимо очевидных пробелов в безопасности, вы не проверяете результаты вашего запроса. Попробуйте использовать mysql_error() и mysql_affected_rows(), чтобы узнать, обновлялось ли что-нибудь. Когда либо указывает на что-то необычное, вы также хотите увидеть точный текст запроса, который выполнялся. Что нужно проверить:

  • Был $email пуст?
  • У $transaction_id или $email были апострофы?
  • У вас есть дубликаты адресов электронной почты в базе данных?
  • Был ли пользователь уже настроен на уровень 3?
  • Вы потеряли связь с базой данных?
  • Ваш сценарий вызывался вообще?
...