Я установил функцию автоматического пожертвования для веб-сайта, но данные не записываются в базу данных, когда IPN проверяется paypal. Журнал IPN записывается на веб-хост, и он говорит, что платеж подтвержден, но данные не записываются в базу данных.Не правильно записывать в базу данных MySQL
Вот небольшой фрагмент кода, который обрабатывает СПИ
if ($p->validate_ipn()) {
$fh = fopen(".ipn", "a");
fwrite($fh, print_r($p->ipn_data, true));
fclose($fh);
if($p->ipn_data["payment_status"] != "Completed") die();
if($p->ipn_data["mc_gross"] > 0) {
$user = $p->ipn_data["custom"];
$date = $p->ipn_data["payment_date"];
$prodid = $p->ipn_data["item_number"];
$amount = $p->ipn_data["mc_gross"];
$amountTickets = 1;
//$user = str_replace("-", "_", $user);
//$user = str_replace(" ", "_", $user);
$user = str_replace("-", " ", $user);
$user = str_replace("_", " ", $user);
$user = mysql_real_escape_string($user);
$conn = mysql_connect("localhost", "USERNAME", "PASSWORD");
mysql_select_db('web_donations', $conn);
mysql_query("INSERT INTO donation (username, time, productid, price, tickets) VALUES ('" . $user . "', '" . $date . "', '" . $prodid . "', " . $amount . ", " . $amountTickets . ");");
$fh = fopen(".ipnerr", "a");
fwrite($fh, mysql_error());
fclose($fh);
mysql_close($conn);
}
}
Я не получаю никаких ошибок. Просто данные не записываются в базу данных, все остальное проверяется в журналах.
Edit: я решил проблему, вопрос был таков:
if($p->ipn_data["payment_status"] != "Completed") die();
платежи были проведены в ожидании, что означает, что никогда бы не пройти этот этап
Готов поспорить, что одно из полей имеет индекс как уникальный, и вы пытаетесь вставить уже существующее значение. – davidkonrad
Сделайте сценарий для эхо-запроса mysql_query и попробуйте запустить этот запрос в phpmyadmin, чтобы узнать, что происходит с ошибкой. Или зарегистрируйте запрос mysql, запущенный в файл или так, и запустите его вручную в phpmyadmin. – Kishor
Почему бы вам не выйти из запроса, чтобы узнать почему? – harrrrrrry