Не понимаю как создать скрипт начисления процентов?

100
12 мая 2021, 04:40

Ребята помогите, пожалуйста. Я совсем не понимаю как мне это сделать. Сайт на wordpress. Установлены плагины для платного доступа и млм Ultimate Membership Pro и Ultimate Affiliate Pro. Они между собой связаны. Человек при регистрации вносит какую-то плату (зависит от плана подписки) и внесённые средства должны получать процент в зависимости от суммы оплаты. Поставили задачу: Есть 3 плана подписки 1) Человек внес сумму например 10000 и с этого момента ему каждый месяц должно на счет капать по 25% от этой суммы в течении 6 месяцев причем в течении каждого месяца эти проценты (25% от 10000 = 2500) должны поступать равными частями каждый день (2500/колличество дней). 2) Человек внес сумму например 100000 и с этого момента ему каждый месяц должно на счет капать по 40% от этой суммы в течении 9 месяцев причем в течении каждого месяца эти проценты (40% от 100000 = 40000) должны поступать равными частями каждый день (40000/колличество дней). 3) Человек внес сумму например 1000000 и с этого момента ему каждый месяц должно на счет капать по 60% от этой суммы в течении 9 месяцев причем в течении каждого месяца эти проценты (60% от 1000000 = 600000) должны поступать равными частями каждый день (600000/колличество дней).

Также надо чтобы все эти процентные изменения человек видел в своём личном кабинете. (С этим я справлюсь сама)

Простите меня, я ещё глупая и только начинаю всё изучать, а тут сразу же такая задача. Заранее спасибо.

Как я вижу решение данной проблемы: У каждого плана есть свой ID в базе данных. У каждого плана есть своя стоимость. При выборе какого либо плана пользователь получает определённый ранг или что-то такое. У каждого ранга есть свой ID в базе. Отталкиваясь от этого можно предположить, что если пользователь получил ранг с, например, ID 4, то он внёс 10000 и с этого момента начинается отсчёт 6 месяцев и начисление процентов. Т.е. с помощью, возможно, php? мы можем узнать в базе у кого ранг с ID=4 и статус 1 (активирован) и присвоить ему определённый скрипт расчёта процентов.

	<?php 
/*Скрипт для 10000*/ 
mysql_query($query); 
/* Отбираем из базы нужный ранг */ 
$query = "SELECT * FROM wp_ihc_user_levels WHERE level_id = \\\"4\\\" AND status != '0'"; 
/* Присваиваем level_id который равен 4 значение суммы (т.е. level_id="4" = 10000?) */ 
/* С даты из таблицы wp_ihc_user_levels и столбца start_time до даты в  
столбце expire_time начислять проценты к 10000 */ 
 
 
$row = ['start_time']; 
$row = ['expire_time']; 
/* Дата */ 
$row['start_time'] = strtotime($row['start_time']); 
$row['expire_time'] = strtotime($row['expire_time']); 
/* Сумма */ 
$amount = 10000;  
/* Даты начала и окончания */ 
$start = strtotime('start_time'); 
$end = strtotime('expire_time'); 
/* вычисляем количество месяцев (не знаю надо ли это делать если заранее известно их количество) */ 
$month = idate('m', $end) - idate('m', $start); 
/* Начисляем процент */ 
$amountWithPct = $amount + 25 * $month; 
/* Выводим результат */ 
printf( 
    "%s Было %s Стало $%.2F", date('d.m.Y', $row['start_time']), $amountWithPct);  
?>

Так как я пробую написать у меня не получается вычислить количество месяцев от даты окончания до даты начала начисления процентов + не работает само начисление. Я прекрасно понимаю, что есть ошибки, но пока мне не хватает знаний.

Изучая всё подряд я дошла до такого варианта, но он всё равно не работает так как надо.

<?php 
error_reporting(-1); 
header('Content-Type: text/html; charset=utf-8'); 
//Скрипт для 10000 
require_once 'connection.php'; // подключаем скрипт 
// подключаемся к серверу 
$link = mysqli_connect($host, $user, $password, $database)  
    or die("Ошибка подключения к базе" . mysqli_error($link)); 
mysqli_query($query); 
 
$res = mysqli_query($link,"SELECT * FROM `wp_ihc_user_levels` WHERE `level_id`= 1 AND `status` != 0") or die("Ошибка выборки" . mysqli_error($link)); 
if($res) { //если запрос успешный 
    while($row = mysqli_fetch_array($res)) 
		$start = ['start_time']; 
		$end = ['expire_time']; 
/* Дата */ 
		$start['start_time'] = strtotime($start['start_time']); 
		$end['expire_time'] = strtotime($end['expire_time']); 
/* Даты начала и окончания */ 
		$start = strtotime('start_time'); 
		$end = strtotime('expire_time'); 
$now = time(); // текущее время (метка времени) 
$reg_date = strtotime($start['start_time']); // какая-то дата в строке 
$datediff = $now - $reg_date; // получаем разность дат (в секундах) 
 
 
/* Начисляем процент */ 
			$amount = 10000;  
			$proc = 25; //Процентов за всё время 
	        $proc_d =25/$datediff; //Процентов в день 
			$proc = $amount/100*$proc; // высчитываем процент от числа 
			$proc_d = $amount/100*$proc_d; // высчитываем процент в день от числа 
			$amountWithPct_all = $amount + $proc; // суммируем число с процентами от этого числа 
			$amountWithPct_d = $amount + $proc_d; // суммируем число с процентами в день от этого числа 
			round ($amountWithPct_all); // округляем 
			round ($amountWithPct_d); // округляем 
	{ 
        //выводим как нам надо 
			echo "ДАТА НАЧАЛА:<br><br>"; 
echo date("d.m.Y h:m:s",strtotime($start)),'<br><br>'; 
			echo "ДАТА ОКОНЧАНИЯ:<br><br>"; 
echo date('d.m.Y h:m:s',strtotime($end)),'<br><br>'; 
		echo "Прошло дней:<br><br>"; 
		echo floor($datediff / (60 * 60 * 24)),'<br><br>'; // вычисляем количество дней из разности дат 
		echo "Сумма на данный момент: $amountWithPct_d<br><br>"; 
		echo "Итоговая сумма: $amountWithPct_all<br><br>"; 
		 
 
    } 
} 
 
    mysqli_free_result($res); //очищаем занятую память - она уже не нужна 
 
mysqli_close($link); 
?>

Даты почему-то всегда выводятся такие 1970-01-01, соответственно сумма с процентами на данный момент выводится странная. Вот так выглядит результат: ДАТА НАЧАЛА:

01.01.1970 03:01:00

ДАТА ОКОНЧАНИЯ:

01.01.1970 03:01:00

Прошло дней:

18113

Сумма на данный момент: (10000.000001597),'

'Итоговая сумма: (12500),'

' Где ошибки не пойму. Подскажите, пожалуйста. Вот так выглядит таблица в БД.

UPD: Кусок с обращением в пустоту, предложенный DaemonHK, исправила. Больше такого не вижу. Пожалуйста, ткните носом в ошибки. Я уже почти отчаялась.

<?php 
error_reporting(-1); 
header('Content-Type: text/html; charset=utf-8'); 
require_once 'connection.php'; 
  $link = mysqli_connect($host, $user, $password, $database); 
  if (!$link) { 
    echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error(); 
    exit; 
  } 
 
  $sql = mysqli_query($link, 'SELECT `user_id`, `level_id`, `start_time`, `expire_time`, `status` FROM `wp_ihc_user_levels` WHERE `level_id`=1'); 
  while ($result = mysqli_fetch_array($sql)) { 
	  	$start=($result['start_time']); 
	  	$end=($result['expire_time']); 
	  	$level=($result['level_id']); 
	  	$user_id=($result['user_id']); 
	  	$status=($result['status']); 
	  	$now = time(); 
	  	$datediff = date('d.m.Y') - date("d.m.Y", strtotime($result['start_time'])); 
			$amount = 10000;  
			$proc = 25; 
	    $proc_d =0.25*$datediff; 
			$proc = $amount/100*$proc; 
			$proc_d = $amount/100*$proc_d; 
			$amountWithPct_all = $amount + $proc; 
			$amountWithPct_d = $amount + $proc_d; 
			round ($amountWithPct_all); 
			round ($amountWithPct_d); 
 
    echo "Дата начала: {$start}<br>"; 
	  echo "Дата окончания:  {$end}<br>"; 
	  echo "Прошло дней: {$datediff}<br>"; 
	  echo "Внесено: {$amount} ₽<br>"; 
		echo "Заработано на данный момент: $proc_d ₽<br><br>"; 
		echo "Cумма на конец периода: $amountWithPct_all ₽<br><br>"; 
  } 
 
?>

Вот так стало работать. Выводит правильные даты и правильно считает. Правда выводит всех пользователей с level_id=1. Но и это уже неплохо. Всем спасибо. Вопрос можно закрывать.

Answer 1

<?php 
error_reporting(-1); 
header('Content-Type: text/html; charset=utf-8'); 
require_once 'connection.php'; 
  $link = mysqli_connect($host, $user, $password, $database); 
  if (!$link) { 
    echo 'Не могу соединиться с БД. Код ошибки: ' . mysqli_connect_errno() . ', ошибка: ' . mysqli_connect_error(); 
    exit; 
  } 
 
  $sql = mysqli_query($link, 'SELECT `user_id`, `level_id`, `start_time`, `expire_time`, `status` FROM `wp_ihc_user_levels` WHERE `level_id`=1'); 
  while ($result = mysqli_fetch_array($sql)) { 
	  	$start=($result['start_time']); 
	  	$end=($result['expire_time']); 
	  	$level=($result['level_id']); 
	  	$user_id=($result['user_id']); 
	  	$status=($result['status']); 
	  	$now = time(); 
	  	$datediff = date('d.m.Y') - date("d.m.Y", strtotime($result['start_time'])); 
			$amount = 10000;  
			$proc = 25; 
	    $proc_d =0.25*$datediff; 
			$proc = $amount/100*$proc; 
			$proc_d = $amount/100*$proc_d; 
			$amountWithPct_all = $amount + $proc; 
			$amountWithPct_d = $amount + $proc_d; 
			round ($amountWithPct_all); 
			round ($amountWithPct_d); 
 
    echo "Дата начала: {$start}<br>"; 
	  echo "Дата окончания:  {$end}<br>"; 
	  echo "Прошло дней: {$datediff}<br>"; 
	  echo "Внесено: {$amount} ₽<br>"; 
		echo "Заработано на данный момент: $proc_d ₽<br><br>"; 
		echo "Cумма на конец периода: $amountWithPct_all ₽<br><br>"; 
  } 
 
?>

Вот так стало работать. Выводит правильные даты и правильно считает. Правда выводит всех пользователей с level_id=1. Но и это уже неплохо. Всем спасибо. Вопрос можно закрывать.

READ ALSO
Slim. Не могу запустить &ldquo;Hello World&rdquo;

Slim. Не могу запустить “Hello World”

Хочу изучить Slim v4 для RESTFull сервера

95
Изменить формат вывода по regex

Изменить формат вывода по regex

Всем привет, еще только изучаю язык, строго не судите такой вопрос: все номера телефонов в тексте записанные в формате +375XXYYYYYYY с помощью regex заменить...

74
корректная работа значков BottomNavigation

корректная работа значков BottomNavigation

при создании активити происходит выбор какой фрагмент отобразить на основе Extras в intent, и при выборе не первого фрагмента, а второго или третьего...

114
Indexof не распознает кириллицу

Indexof не распознает кириллицу

Есть небольшая проблема - нужно найти индекс элемента в стринговом массиве с помощью IndexOfВот кусок моего кода:

84