[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: php + mysql в интернет магазине.
bifik
Доброго времени суток, программисты! :D
Совершено недавно я начал делать интернет магазин на сайте, ну при пополнение счета произошел какай-то баг, который выполняет несколько раз функцию
mysql_query("INSERT INTO `ik_money` VALUES (NULL, '{$paymentId}', '{$summ}');");
, которая пополняет средства в магазине пользователю, вот он пополнил счет, заходит в личный кабинет через минут 10 и опять ему дают деньги, которые он пополнял минут 2-5 назад, из-за этого вся экономика в магазине падает, хорошо, что мне честный клиент попался и сообщил баг, магазин пока прикрыт, до тех пор пока не устраню.
Партнёр по приемам платежей у меня InterKassa.
Вот пару кодов, которые отвечают за пополнение счета и отправки данных.

<?php

define('INCLUDE_CHECK',true);
include('../include/config.php');
function ikSign($params, $ikKey){
// удаляем ненужные параметры
unset($params['ik_sign']);
foreach($params as $key => $value) if(! preg_match("/^ik_/is", $key)) unset($params[$key]);

ksort($params, SORT_STRING);
array_push($params, $ikKey);
$sign = implode(":", $params);
$sign = base64_encode(md5($sign, true));
return $sign;
}


$kassaId = trim($_REQUEST['ik_co_id']);
$paymentId = trim(strip_tags($_REQUEST['ik_pm_no']));
$summ = intval($_REQUEST['ik_am']);
$paySystem = trim($_REQUEST['ik_pw_via']);
$payStatus = trim($_REQUEST['ik_inv_st']);
$sign = trim($_REQUEST['ik_sign']);

$secretKey = $ikSecretKey;
// тестирование
if($ikTesting and ($paySystem == "test_interkassa_test_xts")){
$secretKey = $ikTestingKey;
} elseif($paySystem == "test_interkassa_test_xts") {
exit("OK");
}

if($kassaId != $ikShopId) exit("Неверный ID кассы");
if($sign != ikSign($_REQUEST, $secretKey)) exit("Неверная подпись");

mysql_query("INSERT INTO `ik_money` VALUES (NULL, '{$paymentId}', '{$summ}');");
mysql_close("INSERT INTO `ik_money` VALUES (NULL, '{$paymentId}', '{$summ}');");

echo "ok";



//Лицевой счет
if(!empty($ik['name'])){
$message = "Вы пополнили свой лицевой счет на <b>".$ik['money']." руб.</b>! Спасибо, за помощь серверу!<a href='".$url_lk."'>Обновить страницу</a>";
mysql_query("UPDATE `dle_users` SET `money`=money + {$ik['money']} WHERE `name`='{$username}'");
mysql_query("DELETE FROM `ik_money` WHERE `name`='{$username}'");
$money2 = $member_id['money'] + $ik['money'];
$log = 'Игрок '.$username.' успешно пополнил свой лицевой счет на '.$ik['money'].' руб.. Теперь его лицевой счет составляет '.$money2.'руб..';
}
//Лицевой счет

//InterKassa с формой отправки данных.

$ik = '
<div class="input-group">
<span class="input-group-addon"><img src="/lk/plus.png"></span>
<table style="border-collapse: collapse;border-spacing: 0;">
<tbody><tr width="100%">
<form action="/lk/kassa/payment.php" method="get" target="_top">
<input type="" name="amount" style="width:385px;height:50px;" value="150">
<input type="hidden" name="player" value="'
.$username.'">
<input type="submit" value="Пополнить" class="btn btn-success btn-large"></form>
</div></table></tbody>
'
;


Суть в том, что этот код выполняется по несколько раз после одной оплаты, а должен выполнятся только один раз после одной оплаты.


_____________
Изучаю php, Mysql, html, css, JavaScript, java.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.