Автор Тема: Не корректно работает бонус при пополнении в 3-х уровневой реферальной системы  (Прочитано 828 раз)

0 Пользователей и 1 Гость просматривают эту тему.

nikogdaАвтор темы

  • *
  • Оффлайн
  • Награды Более 7 лет на форуме Более 100 сообщений Более 50 созданных тем Топ 10 по созданным темам
  • Дата регистрации: Июль 2016
  • Сообщений: 201
  • Страна: ru
  • Поблагодарили: 4 раз(а)
  • Репутация +0/-0
  • Пол: Мужской
Здравствуйте.

Люди, будьте добры помочь.

Поставил 3-х уровневую реф. программу. Зарегистрировал 3 пользователя и вроде все работает, рефералы по уровням отображаются в разделе "Мои рефералы".

Решил сразу протестировать пополнения и тут сразу начались неполадки.
В мерчанте стоит при каждом пополнении бонус +10%, но дело в том, что при тестовом пополнении рефералом 2 и 3 уровней в 1 руб. начисляет на баланс покупок 3.30 руб. Получается что начисляет 330% если не ошибаюсь.

Помогите найти ошибку и исправить данную ошибку.

Код мерчанта:


   # Настройки
   $db->Query("SELECT * FROM db_config WHERE id = '1' LIMIT 1");
   $sonfig_site = $db->FetchArray();
   
   $db->Query("SELECT user, referer_id, referer_id2, referer_id3 FROM db_users_a WHERE id = '{$user_id}' LIMIT 1");
   $user_ardata = $db->FetchArray();
   $user_name = $user_ardata["user"];
   $refid = $user_ardata["referer_id"];
   $refid2 = $user_ardata["referer_id2"];
   $refid3 = $user_ardata["referer_id3"];
   
   # Зачисляем баланс
   $serebro = sprintf("%.4f", floatval($sonfig_site["ser_per_wmr"] * $ik_payment_amount) );

   $db->Query("SELECT insert_sum FROM db_users_b WHERE id = '{$user_id}' LIMIT 1");
   $ins_sum = $db->FetchRow();
   
   $serebro = intval($ins_sum <= 0.01) ? ($serebro + ($serebro * 0.10) ) : $serebro;
   $serebro = intval($ins_sum >= 0.01) ? ($serebro + ($serebro * 0.10) ) : $serebro;
   
   $add_tree = ( $ik_payment_amount >= 0.00) ? 0 : 0;

   $lsb = time();
   $to_referer  = ($serebro * 0.07); // Первый уровень - 4 процента
   $to_referer2 = ($serebro * 0.05); // Второй уровень - 3 процента
   $to_referer3 = ($serebro * 0.02); // Третий уровень - 1 процент
   
   $db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer = to_referer + '$to_referer', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");
   
    $db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer2 = to_referer2 + '$to_referer2', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");
    $db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer3 = to_referer3 + '$to_referer3', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");
   
   
   # Зачисляем средства рефереру и дерево
   $add_tree_referer = ($ins_sum <= 0.01) ? ", a_t = a_t + 0" : "";
   $db->Query("UPDATE db_users_b SET money_b = money_b + $to_referer, from_referals = from_referals + '$to_referer' {$add_tree_referer} WHERE id = '$refid'");
   
    $add_tree_referer2 = ($ins_sum <= 0.01) ? ", a_t = a_t + 0" : "";
   $db->Query("UPDATE db_users_b SET money_b = money_b + $to_referer2, from_referals2 = from_referals2 + '$to_referer2' {$add_tree_referer2} WHERE id = '$refid2'");
   
   $add_tree_referer3 = ($ins_sum <= 0.01) ? ", a_t = a_t + 0" : "";
   $db->Query("UPDATE db_users_b SET money_b = money_b + $to_referer3, from_referals3 = from_referals3 + '$to_referer3' {$add_tree_referer3} WHERE id = '$refid3'");

 

whoohaw

  • *
  • *
  • Оффлайн
  • Награды Более 6 лет на форуме !!! За помощь пользователям Более 250 сообщений За финансовую помощь форуму !!! Репутация более 15 За время в онлайне на форуме Более 10 созданных тем
  • Дата регистрации: Апр. 2018
  • Расположение: Тверь
  • Возраст: 35
  • Сообщений: 320
  • Страна: ru
  • Поблагодарили: 27 раз(а)
  • Репутация +17/-1
  • Пол: Мужской
  • Дата рождения:
    1988-09-21
    Социальные сети:
    ВКонтакте
У тебя в коде 3 раза выполняется один и тот же запрос, ну за исключением одной маленькой детали, которая отличается. Как это исправить и сделать в одном запросе?
 По сути с 1 руб. ты получаешь 1.10, но так как это трех-кратное повторение запроса по user_id, отсюда и картинка:
Оставил повторяющийся код:
. . .

   $db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer = to_referer + '$to_referer', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");
   
    $db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer2 = to_referer2 + '$to_referer2', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");
    $db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer3 = to_referer3 + '$to_referer3', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");

. . .
 

nikogdaАвтор темы

  • *
  • Оффлайн
  • Награды Более 7 лет на форуме Более 100 сообщений Более 50 созданных тем Топ 10 по созданным темам
  • Дата регистрации: Июль 2016
  • Сообщений: 201
  • Страна: ru
  • Поблагодарили: 4 раз(а)
  • Репутация +0/-0
  • Пол: Мужской
$db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer = to_referer + '$to_referer', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");
   
    $db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer2 = to_referer2 + '$to_referer2', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");
    $db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer3 = to_referer3 + '$to_referer3', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");

Я так понимаю нужно оставить одну строчку и дописать в ней следующее:

$db->Query("UPDATE db_users_b SET money_b = money_b + '$serebro', a_t = a_t + '$add_tree', to_referer = to_referer + '$to_referer', to_referer2 = to_referer2 + '$to_referer2', to_referer3 = to_referer3 + '$to_referer3', last_sbor = '$lsb', insert_sum = insert_sum + '$ik_payment_amount' WHERE id = '{$user_id}'");
 

whoohaw

  • *
  • *
  • Оффлайн
  • Награды Более 6 лет на форуме !!! За помощь пользователям Более 250 сообщений За финансовую помощь форуму !!! Репутация более 15 За время в онлайне на форуме Более 10 созданных тем
  • Дата регистрации: Апр. 2018
  • Расположение: Тверь
  • Возраст: 35
  • Сообщений: 320
  • Страна: ru
  • Поблагодарили: 27 раз(а)
  • Репутация +17/-1
  • Пол: Мужской
  • Дата рождения:
    1988-09-21
    Социальные сети:
    ВКонтакте
все правильно ) Не сложно же? )
 

nikogdaАвтор темы

  • *
  • Оффлайн
  • Награды Более 7 лет на форуме Более 100 сообщений Более 50 созданных тем Топ 10 по созданным темам
  • Дата регистрации: Июль 2016
  • Сообщений: 201
  • Страна: ru
  • Поблагодарили: 4 раз(а)
  • Репутация +0/-0
  • Пол: Мужской
все правильно ) Не сложно же? )

Как здорово, сейчас протестирую и отпишу позже.
Ну для кого как))), для меня сложно и ни за чтобы не подумал, что из-за этих трех строк получается следующая ошибка.
 

whoohaw

  • *
  • *
  • Оффлайн
  • Награды Более 6 лет на форуме !!! За помощь пользователям Более 250 сообщений За финансовую помощь форуму !!! Репутация более 15 За время в онлайне на форуме Более 10 созданных тем
  • Дата регистрации: Апр. 2018
  • Расположение: Тверь
  • Возраст: 35
  • Сообщений: 320
  • Страна: ru
  • Поблагодарили: 27 раз(а)
  • Репутация +17/-1
  • Пол: Мужской
  • Дата рождения:
    1988-09-21
    Социальные сети:
    ВКонтакте
Ну ты посмотри, какие запросы дублируют эти строки ) Вот тебе и будет ответ. Это элементарный SQL, тут даже программирование не надо знать, а просто внимательно смотреть и следовать здравому смыслу логики )
 

nikogdaАвтор темы

  • *
  • Оффлайн
  • Награды Более 7 лет на форуме Более 100 сообщений Более 50 созданных тем Топ 10 по созданным темам
  • Дата регистрации: Июль 2016
  • Сообщений: 201
  • Страна: ru
  • Поблагодарили: 4 раз(а)
  • Репутация +0/-0
  • Пол: Мужской
Ну ты посмотри, какие запросы дублируют эти строки ) Вот тебе и будет ответ. Это элементарный SQL, тут даже программирование не надо знать, а просто внимательно смотреть и следовать здравому смыслу логики )

Хотелось бы мне и такому научиться)))
Теперь пополнения нормально работать стали.
Спасибо огромное.

Теперь не отображается количество рефералов 2 и 3 уровней:
 Рефералов 1-го уровня: <?=$prof_data["referals"]; ?> чел.
 - отображает
 Рефералов 2-го уровня: <?=$prof_data["referals2"]; ?> чел.
 - нет
 Рефералов 3-го уровня: <?=$prof_data["referals3"]; ?> чел.
 - нет
В базе данных db_users_a только колонка referals заполняется, а колонки referals2 и referals3 к сожалению нет. Думаю что в файле signup.php что-то не то...
Пипец не одно так другое(
 

whoohaw

  • *
  • *
  • Оффлайн
  • Награды Более 6 лет на форуме !!! За помощь пользователям Более 250 сообщений За финансовую помощь форуму !!! Репутация более 15 За время в онлайне на форуме Более 10 созданных тем
  • Дата регистрации: Апр. 2018
  • Расположение: Тверь
  • Возраст: 35
  • Сообщений: 320
  • Страна: ru
  • Поблагодарили: 27 раз(а)
  • Репутация +17/-1
  • Пол: Мужской
  • Дата рождения:
    1988-09-21
    Социальные сети:
    ВКонтакте
Ну )) правильно )
Поэкспериментируй.
Ты - пользователь А, с id = 1
Твой реферал 1 уровня - Пользователь Б, с id = 2.
При его регистрации происходит поиск реферера по ид из реферальной ссылки и заполняется поле. Тут все ок заполняется, как ты говоришь. А теперь на уровень выше, вложенной поиск.

Пользователь С регистрируется, ищется ид реферера из базы по пригласительной ссылке. Ок, нашли. Пользователю Б регистрация увеличит поле referals, верно? Потому что для пользователя Б пользователь С является рефералом 1 уровня, но вот для пользователя А уже второго уровня. Как это исправить?

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