Иконка ресурса

Fruit-Farm Многоуровневая реферальная система с админкой для скриптов Фруктовая Ферма 1.0.1

Нет прав для скачивания

profit

Местный
Может кому пригодится, может это даже только у меня так но мало ли, передвинул этот кусок кода ниже "
$db->Query("SELECT COUNT(`id`) FROM `ref_system` ORDER BY `id` ASC");
$count_level = $db->FetchRow();
if($count_level > 0){
$i = 0;
$total_refs = 0;
$count_refs = array();
$data_ref = array();
GetIds($user_id,$i);
}
"


Что бы сначала была фцункция GetIds а после нее уже этот код и у меня все заработало, модуль крутой спасибо
 

pligin

Команда форума
Администратор
Может кому пригодится, может это даже только у меня так но мало ли, передвинул этот кусок кода ниже "
$db->Query("SELECT COUNT(`id`) FROM `ref_system` ORDER BY `id` ASC");
$count_level = $db->FetchRow();
if($count_level > 0){
$i = 0;
$total_refs = 0;
$count_refs = array();
$data_ref = array();
GetIds($user_id,$i);
}
"


Что бы сначала была фцункция GetIds а после нее уже этот код и у меня все заработало, модуль крутой спасибо
ты правильно сделал. почему я выложил в таком варианте не помню... сейчас перезалью с твоими правками
 

pligin

Команда форума
Администратор

Petya95

Местный
Всем привет. Подскажите, пожалуйста, в чем ошибка. Переделываю данный модуль под фаст кор для личного пользования (таблицы и колонки изменены для своего удобства). Суть проблемы в том, что именно на цикле вайл все улетает в бесконечность, не грузится. Спустя 5 минут ожидания выдает ошибку 504 (специально ждал). Заранее спасибо.

PHP:
function SetReferals($sum, $referal){
        $ref_system = $this->db->query("SELECT `rs_percent` FROM `db_ref_system` ORDER BY `id` ASC"); // извлечение процентов, сортировка их по ID в порядке возрастания
        if($ref_system->NumRows()>0){ // проверка есть ли данные в предыдущем запросе
            foreach($ref_system->fetchAll() as $ref){
                $percent[] = $ref['rs_percent']; // добавление в массив процентов
            }
            $sum = floatval($sum);
            $sum = round($sum, 2);
            $referal = intval($referal);
            $i=0; // счетчик массива
            while ($percent){ // цикл, работает пока не переберет в массиве $percent все строки
                if($referal == 1){ // если ID пользователя 1, останавливаем цикл
                        break;
                }
                $ref_id = $this->db->query("SELECT `referer_id` FROM `db_users` WHERE `uid` = ?",$referal)->fetchArray(); // извлечение ID реферера
                $referer = $ref_id['referer_id'];
                $sum_ref = round(($sum * $percent[$i]/100),2); // сумма реферальных
                $this->db->query("UPDATE `db_users` SET `balance_main` = `balance_main` + ? WHERE `uid` = ?",[$sum_ref,$referer]);
                $this->db->query("UPDATE `db_users_stats` SET `us_ref_fees` = `us_ref_fees` + ? WHERE `us_uid` = ?",[$sum_ref,$referer]);
                $this->db->query("UPDATE `db_users_stats` SET `us_ref_to` = `us_ref_to` + ? WHERE `us_uid` = ?",[$sum_ref,$referal]);
                $this->db->query("SELECT * FROM `db_users_ref` WHERE `ur_from_user` = ? AND `ur_to_user` = ?",[$referal,$referer]);
                if($this->db->NumRows() == 1){
                    $this->db->query("UPDATE `db_users_ref` SET `ur_money` = `ur_money` + ? WHERE `ur_from_user` = ? AND `ur_to_user` = ?",[$sum_ref,$referal,$referer]);
                }
                if($this->db->NumRows() == 0){
                    $this->db->query("INSERT INTO `db_users_ref` (`ur_from_user`,`ur_to_user`,`ur_money`) VALUES (?,?,?)",[$referal,$referer,$sum]);
                }
                $referal = intval($referer);//в переменную реферала записываем значение реферера для продолжения работы цикла
                $i++;// увеличение счетчика на 1
            }
        }
       
    }
если что проверяю все функции отдельно через вар дамп, массив процентов по идее правильный и выглядит так:
 

Вложения

Последнее редактирование:

Petya95

Местный
Разобрался сам в итоге, если что меняем цикл вайл на foreach($percent as $lvl){ и строку $sum_ref = round(($sum * $percent[$i]/100),2); на $sum_ref = round(($sum * $lvl[$i]/100),2);.
По крайней мере у меня сработало, все начисления прошли и массив не ушел в бесконечность (для фаст кор). Проверял на обычной ферме, там с вайлами отрабатывает отлично
 

Petya95

Местный
И еще вопрос, мало ли кто знает... При проверке что на фк, что на фф в таблице с начислениями значения повторяются. На странице 2 раза по очереди запустил код и записи продублировались (разделил синей чертой), хотя по идее они должны были суммироваться, нет?
Снимок.JPG
 

Petya95

Местный
Класс на пдо, если кому нужно
PHP:
class referals{

    private $pdo;

    public function __construct($pdo)
    {
       $this->pdo = $pdo;
    }

    function SetReferals($sum, $referal){
        $ref_system = $this->pdo->prepare("SELECT `rs_percent` FROM `db_ref_system` ORDER BY `id` ASC"); // извлечение процентов, сортировка их по ID в порядке возрастания
        $ref_system->execute();
        if($ref_system->rowCount()>0){ // проверка есть ли данные в предыдущем запросе
        
            foreach($ref_system->fetchAll(PDO::FETCH_COLUMN) as $ref){
                $percent[] = $ref;
            }
            
            $sum = floatval($sum);
            $sum = round($sum, 2);
            $referal = intval($referal);
            //$i=0; // счетчик массива
            
            foreach($percent as $lvl){
                if($referal == 1){ // если ID пользователя 1, останавливаем цикл
                        break;
                }
                $ref_id = $this->pdo->prepare("SELECT `referer_id` FROM `db_users` WHERE `uid` = ?"); // извлечение ID реферера
                $ref_id->execute([$referal]);
                $referer = $ref_id->fetchColumn();
                $sum_ref = round(($sum * $lvl/100),2); // сумма реферальных
                $this->pdo->prepare("UPDATE `db_users` SET `balance_main` = `balance_main` + ? WHERE `uid` = ?")->execute([$sum_ref,$referer]);
                $this->pdo->prepare("UPDATE `db_users_stats` SET `us_ref_fees` = `us_ref_fees` + ? WHERE `us_uid` = ?")->execute([$sum_ref,$referer]);
                $this->pdo->prepare("UPDATE `db_users_stats` SET `us_ref_to` = `us_ref_to` + ? WHERE `us_uid` = ?")->execute([$sum_ref,$referal]);
                $count = $this->pdo->prepare("SELECT COUNT(*) FROM `db_users_ref` WHERE `ur_from_user` = ? AND `ur_to_user` = ?");
                $count->execute([$referal,$referer]);
                if($count->fetchColumn() == 1){
                  $this->pdo->prepare("UPDATE `db_users_ref` SET `ur_money` = `ur_money` + ? WHERE `ur_from_user` = ? AND `ur_to_user` = ?")->execute([$sum_ref,$referal,$referer]);
                }
                if($count->fetchColumn() == 0){
                  $this->pdo->prepare("INSERT INTO `db_users_ref` (`ur_from_user`,`ur_to_user`,`ur_money`) VALUES (?,?,?)")->execute([$referal,$referer,$sum]);
                }
                $referal = intval($referer);//в переменную реферала записываем значение реферера для продолжения работы цикла
                //$i++;// увеличение счетчика на 1
            }
            
            
        }
        
    }
    
}
 

pligin

Команда форума
Администратор
И еще вопрос, мало ли кто знает... При проверке что на фк, что на фф в таблице с начислениями значения повторяются. На странице 2 раза по очереди запустил код и записи продублировались (разделил синей чертой), хотя по идее они должны были суммироваться, нет?
Посмотреть вложение 7221
Проблема с запросом, который проверяет наличие этих данных
 

Petya95

Местный
Проблема с запросом, который проверяет наличие этих данных
Не подскажешь как исправить? Хотя если читать код, то вроде бы как верно, считается количество строк по значению, если 0, то вносит новую, если 1, то прибавляеи
 

Petya95

Местный
Привет. Может кто подсказать как проще вывести количество рефералов про уровням, например 16-5-2 (3 уровня) и т.д.
 
Верх