возникла проблема с сайтом и системой промокодов. Есть сайт, на нём человек вводит Промокод, нажимает Перейти к оплате, и сразу же возвращается обратно на сайт, не оплатив товар. Промокод тратится, даже не оплатив товар. Все данные так-же ещё хранятся в MySql. Также сайт связан с Free-Kassa. Вот код функции траты промокода:
function getPrice($promo, $price){
global $mysqli; //глобальная переменная
$raw = $mysqli->query ("SELECT * FROM `promo` WHERE `promo` = '".$promo."'")->fetch_assoc(); //берём промокод из бд
$discount = $raw['discount'];
if($raw['count'] <= 0) return $price;
if($raw['count'] == 1) $mysqli->query("DELETE FROM `promo` WHERE promo = '".$promo."'");
if($raw['count'] > 1) $mysqli->query("UPDATE `promo` SET `count` = `count` - 1 WHERE `promo` = '".$promo."' ");
return $price = $price - (($price / 100) * $discount);
}
Может нужно перенести этот код в конец, когда уже проверяется оплата и всё остальное? А промокод ещё внести в ссылку, что-бы он проверялся и уже тогда удалялся\изменялся в БД? Так же код с начала оплаты:
error_reporting(E_ALL);
ini_set('display_errors','On');
include "functions.php";
$row = $mysqli->query ("SELECT * FROM `privileges` WHERE `id` = '".$_POST['group']."'");
$num = $row->num_rows;
if($num <= 0) die();
$row = mysqli_fetch_array($row);
$nickname = urlencode(trim($_POST["nickname"]));
$donate = urlencode($row["name"]);
$price = getPrice(trim($_POST['promo']), $row["price"]);
if($config['mode'] == 1){
$order_id = rand(1000, 9999);
$merchant_id = $config['fk_merchant.id'];
$secret_word = $config['fk_secret.word'];
$sign = md5($merchant_id.':'.$price.':'.$secret_word.':'.$order_id);
$mysqli->close();
header("Location: http://www.free-kassa.ru/merchant/cash.php?m=$merchant_id&oa=$price&s=$sign&o=$order_id&us_nickname=$nickname&us_donate=$donate");
И код уже с проверки оплаты
$amount = $_REQUEST["AMOUNT"];
$intid = urldecode($_REQUEST["intid"]);
$email = urldecode($_REQUEST["P_EMAIL"]);
$order_id = urldecode($_REQUEST["MERCHANT_ORDER_ID"]);
$nickname = urldecode($_REQUEST["us_nickname"]);
$donate = urldecode($_REQUEST["us_donate"]);
$time = time();
$command = addslashes(getCommand($nickname, $amount, $donate));
$commands = explode(';', $command);
$mysqli->query ("INSERT INTO `data` (`id`, `command`, `intid`,`email`,`nickname`,`amount`,`order_id`,`donate`, `status`, `time`) VALUES (NULL, '$command', '$intid','$email','$nickname','$amount','$order_id','$donate', 0, '$time')");
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В DetailView в своей дефолтной реализации всё выводится парами ключ->значение
Функция array_diff_keys() не совсем так работаетНужно чтобы результатом было полное расхождение