Ir para conteúdo
Xicara

Duvida excluir um valor do BD após 30 dias

Recommended Posts

Olá boa tarde!

 Eu tenho um jogo e um site para cadastro de contas. E agora estou querendo implementar um sistema VIP de preferencia com dias para acabar! No meu  banco de dados do jogo, tenho a tabela: contas com os campos: id / senha / ip / e agora adicionei o campo vip, o valor é de 1 a 5 e já esta funcional no jogo porém esse beneficio está permanente para os jogadores, minha duvida é: o valor do campo vip tem como eu programar para cada 30 dias zerar novamente automático? Não zerar de todos, mais sim daquele que atingiu os 30 dias, eu estava pensando em adicionar mais um campo: data de inicio, será que tem possibilidade por exemplo o site identificar a data e excluir o valor do campo quando atingir os 30 dias?

Obrigado pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @Xicara, tudo bem?

 

Você pode sim fazer como você sugere. Isso seria feito através de cron jobs, porém não seria a melhor solução.

 

O ideal é você criar uma tabela adicional chamada assinaturas, vips, planos, ou algo assim. Nessa tabela você teria:

#id, &id_usuario, tipo_plano (1 a 5), inicio_plano, fim_plano

 

Daí você relaciona o usuário com seu último plano e verifica se está dentro de início_plano e fim_plano, que são colunas representando o intervalo de vigência dos planos.

Dessa forma você não precisa modificar nada no seu banco, apenas validar a assinatura do usuário com IFs ou outras operações simples, entende?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Matheus,

Obrigado pela idéia mais sou um pouco leigo em php e cron jobs principalmente, eu vou acabar cancelando as assinaturas manualmente mesmo via comando no banco de dados, caso aumentar a demanda procuro algum especialista e pago, claro que se eu estudar também vou conseguir, mas para mim não tem muito sentido em eu estudar para apenas fazer isso, eu tinha em mente que poderia haver algum código para colocar no site. Obrigado pela a dica e pela atenção ! 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, mas você não pode ser tão leigo, só precisa de um empurrãozinho, afinal de contas seu sistema já está funcionando e selecionando os usuários, atribuindo seus dados em sessões, certo? Ao menos que eu tenha entendido errado.

 

Bom, nesse caso, poste o código que faz o login do usuário nesse momento. É basicamente a partir de modificações nele que podemos fazer o que você quer, e nisso nós podemos ajudar você.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom vou dar uma ideia talvez não seja a melhor.

 

Mais tente da seguinte forma, ou seja conforme deseja fazer ai

 

<?php
$DataAtual = date('d/m/Y'); // Data Atual

//$DataValida = date('d/m/Y', strtotime($dados['data_banco_de_dados'])); // Data do banco de dados

$DataValida = date('d/m/Y', strtotime('2021-07-13')); // Data do banco de dados


// transforma a data do formato BR para o formato americano, ANO-MES-DIA
$DAtual = implode('-', array_reverse(explode('/', $DataAtual)));
$DValida = implode('-', array_reverse(explode('/', $DataValida)));

// converte as datas para o formato timestamp
$DA = strtotime($DAtual); 
$DV = strtotime($DValida);

// verifica a diferença em segundos entre as duas datas e divide pelo número de segundos que um dia possui
$ResultadoFinal = ($DV - $DA) /86400;

?>		
<?php if ($ResultadoFinal != -1) { 

}else{ 

//Atualizar O Usuario
/*
Acredito que neste campo vip 1 a 5 seria os nivel certo?

Onde esta o 17 seria o id do ususario
*/

 // DBUpdate('usuarios', array('nivel' => '0'), "id = '{$id}'");
 DBUpdate('usuarios', array('vip' => '1'), "id = '17'");
  Redireciona('./index.php');
  
}
?>

Espero ter ajudado

Compartilhar este post


Link para o post
Compartilhar em outros sites
18 horas atrás, Matheus Tavares disse:

Bom, mas você não pode ser tão leigo, só precisa de um empurrãozinho, afinal de contas seu sistema já está funcionando e selecionando os usuários, atribuindo seus dados em sessões, certo? Ao menos que eu tenha entendido errado.

 

Bom, nesse caso, poste o código que faz o login do usuário nesse momento. É basicamente a partir de modificações nele que podemos fazer o que você quer, e nisso nós podemos ajudar você.

Olá Matheus, 

O problema é que para o jogador jogar ele não acessa o login do site, então ele faz o cadastro e pode ficar até 5 dias sem fazer um login no site, minha ideia era que tivesse como o próprio site ir calculando a data e ir executando os comandos da database, mas muito obrigado pela a ajuda!

Compartilhar este post


Link para o post
Compartilhar em outros sites
18 horas atrás, Jack Oliveira disse:

Bom vou dar uma ideia talvez não seja a melhor.

 

Mais tente da seguinte forma, ou seja conforme deseja fazer ai

 


<?php
$DataAtual = date('d/m/Y'); // Data Atual

//$DataValida = date('d/m/Y', strtotime($dados['data_banco_de_dados'])); // Data do banco de dados

$DataValida = date('d/m/Y', strtotime('2021-07-13')); // Data do banco de dados


// transforma a data do formato BR para o formato americano, ANO-MES-DIA
$DAtual = implode('-', array_reverse(explode('/', $DataAtual)));
$DValida = implode('-', array_reverse(explode('/', $DataValida)));

// converte as datas para o formato timestamp
$DA = strtotime($DAtual); 
$DV = strtotime($DValida);

// verifica a diferença em segundos entre as duas datas e divide pelo número de segundos que um dia possui
$ResultadoFinal = ($DV - $DA) /86400;

?>		
<?php if ($ResultadoFinal != -1) { 

}else{ 

//Atualizar O Usuario
/*
Acredito que neste campo vip 1 a 5 seria os nivel certo?

Onde esta o 17 seria o id do ususario
*/

 // DBUpdate('usuarios', array('nivel' => '0'), "id = '{$id}'");
 DBUpdate('usuarios', array('vip' => '1'), "id = '17'");
  Redireciona('./index.php');
  
}
?>

Espero ter ajudado

Olá Jack,

Muito obrigado pela ajuda pode ter certeza que vai ajudar bastante, eu vou experimentar e ver o que dá ! 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Xicara 

Durante 8 anos  anos  fui administrador de um servidor de jogo online (Ragnarok Online), ao qual possuía sistema de conta vip.

Para minha realidade eu simplesmente apliquei que quando o usuário logasse comparava a data atual com a data de seu início de vip. Sendo que a cada login a tabela se atualizava removendo o período de acordo com o dia em que ele logou.

Exemplo:

UPDATE tabela_do_usuario SET indicacao_do_vip = 0 WHERE indicacao_do_vip = 1 AND (dias_vip IS NULL OR dias_vip < CURDATE())

Então mesmo que não seja o usuário específico qualquer usuário que logasse atualizava os dias vip de todos usuários.

Essa coluna de dia vip nada mais era que uma coluna date.

 

Como disse esse conceito já era o suficiente para minha realidade.

Porém você diz que quer a coisa automatizada, então não há outra forma a não ser usar uma tarefa CRON como o próprio @Matheus Tavares disse.

 

São suas únicas alternativas ou atualiza a tabela pelo login seja o próprio usuário seja qualquer um ou usa um cron job. Ao invés de ficar tentando fazer gabiarras grotescas de código.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
4 horas atrás, Omar~ disse:

@Xicara 

Durante 8 anos  anos  fui administrador de um servidor de jogo online (Ragnarok Online), ao qual possuía sistema de conta vip.

Para minha realidade eu simplesmente apliquei que quando o usuário logasse comparava a data atual com a data de seu início de vip. Sendo que a cada login a tabela se atualizava removendo o período de acordo com o dia em que ele logou.

Exemplo:


UPDATE tabela_do_usuario SET indicacao_do_vip = 0 WHERE indicacao_do_vip = 1 AND (dias_vip IS NULL OR dias_vip < CURDATE())

Então mesmo que não seja o usuário específico qualquer usuário que logasse atualizava os dias vip de todos usuários.

Essa coluna de dia vip nada mais era que uma coluna date.

 

Como disse esse conceito já era o suficiente para minha realidade.

Porém você diz que quer a coisa automatizada, então não há outra forma a não ser usar uma tarefa CRON como o próprio @Matheus Tavares disse.

 

São suas únicas alternativas ou atualiza a tabela pelo login seja o próprio usuário seja qualquer um ou usa um cron job. Ao invés de ficar tentando fazer gabiarras grotescas de código.

 

Olá Omar,

Que ótimo praticamente quase o mesmo sistema, então quando o jogador adquiria o vip você adicionava o level do vip e o total de dias? E esse comando faz com que atualize de todos os jogadores da tabela mesmo sem ele ter entrado no jogo? Bom de qualquer forma vou adicionar aqui e testar e pesquisar mais sobre o significado do comando eu não sei direito o que significa essa parte (dias_vip IS NULL OR dias_vip < CURDATE()).

 

 Por enquanto obrigado um sistema assim por comando é muito mais simples para executar junto com o jogo, obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

UPDATE tabela_do_usuario SET indicacao_do_vip = 0

Atualize a tabela de usuário definindo a coluna que indica quando o usuário vip para zero (1 era usuário vip / 0 sem vip)

WHERE indicacao_do_vip = 1

Quando a coluna que indique o vip for um (1) "Ou seja só usuários com vip serão alvos"

AND (dias_vip IS NULL OR dias_vip < CURDATE())

E quando a coluna de contagem de dias for nula ou a data registrada for menor que a data atual

Na verdade essa parte pode ser otimizada ficando só

AND dias_vip < CURDATE() Não precisa pegar o valor nulo pois se é nulo nunca teve um vip registrado ^^

 

Então digamos que a data de término desse vip seja 2021-01-01 e no momento do login for 2021-01-02 (um único dia a mais) a tabela era atualizada.

 

O que eu fazia para definir um vip era atualizar a coluna que registrava que aquele usuário era vip para 1 (um) e a data de término para x dias contando a partir dos dias aplicados exemplo:

<?php
$periodo = 5; /* Cinco dias */
$usuario = 99; /* ID da conta do usuário */
$query = "
UPDATE
    tabela_do_usuario
SET
    indicacao_do_vip = '1',
    dias_vip = DATE_ADD (
        CURDATE(),
        INTERVAL {$periodo} DAY
    )
WHERE
    id_da_conta = '{$usuario}'
";

Assim sendo se hoje era 2021-06-15 o término do vip seria 2021-06-20 então qualquer usuário que logasse no dia posterior involuntariamente atualizara o vip de todo mundo.

 

Veja o script em linguagem C++ que fiz ao qual eu comandava IN-GAME a  coisa toda, der uma olhada pode ser útil para que possa elaborar seu sistema aí, pois não se tratava só de adicionar ou remover vip e sim adicionar mais dias ou remover dias:

Spoiler

/*-----------------------------------------------------------------*\
|             ______ ____ _____ ___   __                            |
|            / ____ / _  / ____/  /  /  /                           |
|            \___  /  __/ __/ /  /__/  /___                         |
|           /_____/_ / /____//_____/______/                         |
|                /\  /|   __    __________ _________                |
|               /  \/ |  /  |  /  ___  __/ ___/ _  /                |
|              /      | / ' | _\  \ / / / __//  __/                 |
|             /  /\/| |/_/|_|/____//_/ /____/_/\ \                  |
|            /__/   |_|      npc Script         \/                  |
|                                                                   |
+-------------------------------------------------------------------+
|                     Projeto Ragnarok Online                       |
+-------------------------------------------------------------------+
| - Criação: Spell Master 16/07/2011                                |
+-------------------------------------------------------------------+
| - 17/05/2013:                                                     |
                Atualizado para novo source cod rAthena.            |
| - 22/09/2014:                                                     |
|               Atualizado conforme a nova estrutura do banco de    |
|                dados do rAthena.                                  |
| - 04/12/2014:                                                     |
|               Adicionado função de checagem se é verdadeira a     |
|                doação na conta do banco.                          |
| - 13/07/2015:                                                     |
|               Adicionado função para manipulação de GM.           |
| - 15/11/2015:                                                     |
|               Atualizado para compatibilidade com Hercules.       |
| - 08/12/2016:                                                     |
|               Removida funções de manipulação de cash.            |
|               Removida referências ao Ticket de Vip.              |
|               Removido desão de GM pois requer manipulação da     |
|                da source, inviável para uso geral.                |
|               Removido consulta para o ADM de verificar se o      |
|                foi feita doação na conta do tesoureiro no banco,  |
|                pois requer função php e manipulação de source se  |
|                tornando iniável para o uso geral.                 |
| - 09/12/2016:                                                     |
|               Adicionado variáveis globais para definir atributos.|
|               Atualizado para compatibilidade com Cronus.         |
\*-----------------------------------------------------------------*/

-	script	#vip_manager	-1,{

	// Configuração para noobs poderem usar o npc ^.^
	.@Vip_Room$ = "prontera"; // Nome do mapa da sala vip
	.@Vip_X = 150;            // Coordenadas 
	.@Vip_Y = 180;            // Coordenadas

	if(getgroupid() > 0 && getgroupid() < 10) {
		mes "[VIP]";
		mes "Olá ^FF0000"+strcharinfo(0)+"^000000";
		while(1) {
			next;
			mes "[VIP]";
			mes "O que posso fazer por você hoje?";
			next;
			switch(select("Ir para sala vip.:Consultar dias Vip restantes:Nada Obrigado")) {
				case 1:
				mes "[VIP]";
				mes "Volte sempre que precisar de meus serviços.";
				close2;
				warp .@Vip_Room$,.@Vip_X,.@Vip_Y;
				end;
				case 2:
				query_sql "SELECT DATE_FORMAT(`vip_days`, '%d/%m/%Y') FROM `login` WHERE `account_id`="+getcharid(3),.@VipDays$;
				mes "[VIP]";
				mes "Sua conta Vip é válida até o dia" +.@VipDays$;
				break;
				//case 3: Removida funções de consulta de cash
				//case 4: Removida funções de compra do ticket de vip
				//case 5: Trasformada em valor 3 para novo menu
				case 3:
				mes "[VIP]";
				mes "Volte sempre que precisar de meus serviços.";
				close;
			}
		}
	}
	else if(getgroupid() > 9 && getgroupid() < 99) {
		mes "[VIP]";
		mes "Olá membro da Staff ^FF0000"+strcharinfo(0)+"^000000";
		mes "O que posso fazer por você hoje?";
		next;
		switch(select("Ir para sala vip.:Nada Obrigado")) {
			case 1:
			mes "[VIP]";
			mes "Volte sempre que precisar de meus serviços.";
			close2;
			warp .@Vip_Room$,.@Vip_X,.@Vip_Y;
			end;
			case 2:
			mes "[VIP]";
			mes "Volte sempre que precisar de meus serviços.";
			close;
		}
	}
	else if(getgroupid() == 99) {
		mes "[VIP]";
		mes "Olá Administrador ^FF0000"+strcharinfo(0)+"^000000";
		while(1) {
			next;
			mes "[VIP]";
			mes "O que posso fazer por você hoje?";
			next;
			switch(select("Verificar Todas Vips:Verificar Conta vip:Adicionar Vip:Remover Vip:Nada Obrigado")) {
				//case 1: Removida checagem da doação
				//case 2: Removida manipulação de gm
				//case 3: Removida manipulação de cash point
				case 1:
				query_sql "SELECT `account_id`,`userid`,`group_id` FROM `login` WHERE `group_id` = 1",.@AccountId$,.@Userid$,.@GroupId;
				if(!.@GroupId) {
					mes "[VIP]";
					mes "Não foi encontrada nenhuma conta Vip apartir do ^BB0000group_id 1^000000";
					break;
				}
				mes "======================";
				for (.@i = 0; .@i < getarraysize(.@GroupId); ++.@i) {
					mes "^777777ID:^000000 "+.@AccountId$[.@i];
					mes "^777777Login:^000000 "+.@Userid$[.@i];
					mes "======================";
				}
				break;
				case 2:
				mes "[VIP]";
				mes "Por favor digite o ID ou login para verificar os dias vip na conta";
				next;
				input .@Account$; 
				query_sql "SELECT `account_id` FROM `login` WHERE `userid`='"+.@Account$+"' OR `account_id`='"+.@Account$+"'",.@AccountCheck;
				if (!.@AccountCheck) { 
					mes "[VIP]";
					mes "Conta inexistente.";
					break;
				}
				else {
					query_sql "SELECT DATE_FORMAT(`vip_days`, '%d/%m/%Y') FROM `login` WHERE `account_id`='"+.@Account$+"' OR `userid`='"+.@Account$+"'",.@VipDays$; 
					if (.@VipDays$ == "") {
						mes "[VIP]";
						mes "A conta '^0000FF"+.@Account$+"^000000' não possui status Vip.";
						break;
					}
					else {
						mes "[VIP]";
						mes "A conta Vip de '^0000FF"+.@Account$+"^000000' é válida até o dia ^BB0000"+.@VipDays$+"^000000.";
						break;
					}
				}
			case 3:
			mes "[VIP]";
			mes "Por favor digite o ID ou login para adicionar os dias vip na conta";
			next;
			input .@GetAccount$;
			query_sql "SELECT `account_id`,`group_id` FROM `login` WHERE `userid`='"+.@GetAccount$+"' OR `account_id`='"+.@GetAccount$+"'",.@AccountCheck,.@GroupCheck;
			if (!.@AccountCheck) { 
				mes "[VIP]";
				mes "Conta inexistente.";
				break;
			}
			mes "[VIP]";
			mes "Quantos dias vip?";
			next;
			input .@GetVipTime;
			if (.@GroupCheck > 9) {
				mes "[VIP]";
				mes "^FF0000Não é possível adicionar Vip a conta^000000 "+.@GetAccount$+".";
				mes "^FF0000Porque ela é uma conta Administrativa^000000!";
				break;
			}
			else if (.@GroupCheck == 1) {
				mes "[VIP]";
				mes "Esta conta já possui status Vip.";
				mes "Deseja almentar mais "+.@GetVipTime+" dias vip a conta?";
				next;
				switch(select("Adicionar VIP:Cancelar")) {
					case 1:
					query_sql "UPDATE `login` SET `group_id` = '1', `vip_days` = DATE_ADD(`vip_days`,INTERVAL "+.@GetVipTime+" DAY) WHERE `group_id` = '1' AND `account_id`='"+.@GetAccount$+"' OR `userid`='"+.@GetAccount$+"'";
					mes "[VIP]";
					mes "Foi adicionado ^FF0000"+.@GetVipTime+"^000000 dias vip na conta ^0000FF"+.@GetAccount$+"^000000.";
					break;
					case 2:
					break;
				}
				break;
			}
			else {
				query_sql "UPDATE `login` SET `group_id` = '1', `vip_days` = DATE_ADD(CURDATE(),INTERVAL "+.@GetVipTime+" DAY) WHERE `group_id` = '0' AND `account_id`='"+.@GetAccount$+"' OR `userid`='"+.@GetAccount$+"'";
				mes "[VIP]";
				mes "Foi adicionado ^FF0000"+.@GetVipTime+"^000000 dias vip na conta ^0000FF"+.@GetAccount$+"^000000.";
				break;
			}
			case 4:
				mes "[VIP]";
				mes "Por favor digite o ID ou login para Remover os dias vip na conta";
				next;
				input .@VipRemove$;
				query_sql "SELECT `account_id`,`group_id` FROM `login` WHERE `userid`='"+.@VipRemove$+"' OR `account_id`='"+.@VipRemove$+"'",.@RemoveCheck,.@VipCheck;
				if (!.@RemoveCheck) { 
					mes "[VIP]";
					mes "Conta inexistente.";
					break;
				}
				if (.@VipCheck > 9) {
					mes "[VIP]";
					mes "^FF0000Não é possível remover Vip da conta^000000 "+.@VipRemove$+".";
					mes "^FF0000Porque ela é uma conta Administrativa^000000!";
					break;
				}
				else if (.@VipCheck == 1) {
					mes "[VIP]";
					mes "Tem certesa que deseja remover os dias vips da conta "+.@VipRemove$+"?";
					next;
					switch(select("Tenho Sim:Cancelar")) {
						case 1:
						query_sql "UPDATE `login` SET `group_id` = 0, `vip_days` = NULL WHERE `group_id` = '1' AND `account_id`='"+.@VipRemove$+"' OR `userid`='"+.@VipRemove$+"'";
						mes "[VIP]";
						mes "Status Vip removido da conta ^0000FF"+.@VipRemove$+"^000000.";
						mes "Porém só será válido após o jogador deslogar.";
						break;
						case 2:
						break;
					}
					break;
				}
				else {
					mes "[VIP]";
					mes "^FF0000Não é possível remover Vip da conta^000000 "+.@VipRemove$+".";
					mes "^FF0000Porque ela não contém status de Vip^000000!";
					break;
				}
			case 5:
			mes "[VIP]";
			mes "Volte sempre que precisar de meus serviços.";
			close;
			}
		}
	}
	else {
		mes "[VIP]";
		mes "Olá ^FF0000"+strcharinfo(0)+"^000000";
		mes "Está perdio?";
		close;
		// Remoção dos artigos referentes aos dados removidos
	}

}

prontera,160,186,4	duplicate(#vip_manager)	Emisária Vip#Evip1	4_F_AGENTKAFRA
morocc,153,81,4	duplicate(#vip_manager)	Emisária Vip#Evip2	4_F_AGENTKAFRA
geffen,133,64,4	duplicate(#vip_manager)	Emisária Vip#Evip3	4_F_AGENTKAFRA
payon,163,124,4	duplicate(#vip_manager)	Emisária Vip#Evip4	4_F_AGENTKAFRA
alberta,104,76,4	duplicate(#vip_manager)	Emisária Vip#Evip5	4_F_AGENTKAFRA
izlude,120,96,4	duplicate(#vip_manager)	Emisária Vip#Evip6	4_F_AGENTKAFRA
aldebaran,154,111,4	duplicate(#vip_manager)	Emisária Vip#Evip7	4_F_AGENTKAFRA
xmas,162,114,4	duplicate(#vip_manager)	Emisária Vip#Evip8	4_F_AGENTKAFRA
comodo,226,157,4	duplicate(#vip_manager)	Emisária Vip#Evip9	4_F_AGENTKAFRA
yuno,177,189,4	duplicate(#vip_manager)	Emisária Vip#Evip10	4_F_AGENTKAFRA
amatsu,190,140,4	duplicate(#vip_manager)	Emisária Vip#Evip11	4_F_AGENTKAFRA
gonryun,171,142,4	duplicate(#vip_manager)	Emisária Vip#Evip12	4_F_AGENTKAFRA
umbala,101,169,4	duplicate(#vip_manager)	Emisária Vip#Evip13	4_F_AGENTKAFRA
louyang,223,120,4	duplicate(#vip_manager)	Emisária Vip#Evip14	4_F_AGENTKAFRA
ayothaya,142,103,4	duplicate(#vip_manager)	Emisária Vip#Evip15	4_F_AGENTKAFRA
einbroch,84,201,4	duplicate(#vip_manager)	Emisária Vip#Evip16	4_F_AGENTKAFRA
lighthalzen,152,110,4	duplicate(#vip_manager)	Emisária Vip#Evip17	4_F_AGENTKAFRA
hugel,105,152,4	duplicate(#vip_manager)	Emisária Vip#Evip18	4_F_AGENTKAFRA
rachel,165,135,4	duplicate(#vip_manager)	Emisária Vip#Evip19	4_F_AGENTKAFRA
veins,221,141,4	duplicate(#vip_manager)	Emisária Vip#Evip20	4_F_AGENTKAFRA
moscovia,215,218,4	duplicate(#vip_manager)	Emisária Vip#Evip21	4_F_AGENTKAFRA
brasilis,211,162,4	duplicate(#vip_manager)	Emisária Vip#Evip22	4_F_AGENTKAFRA

// --------------------------------------------------------------------------------
-	script	GerenciadorVip	-1,{
OnPCLoginEvent:
	if (getgroupid() == 0) {
		query_sql "SELECT (`vip_days` IS NULL OR `vip_days` < CURDATE()) FROM `login` WHERE `account_id` = "+getcharid(3);
		dispbottom "Torne-se um(a) jogador(a) hoje mesmo!";
		end;
	}
	if (getgroupid() == 1) {
		query_sql "UPDATE `login` SET `group_id`= 0 WHERE `group_id` = 1 AND (`vip_days` IS NULL OR `vip_days` < CURDATE())";
		query_sql "SELECT DATE_FORMAT(`vip_days`, '%d/%m/%Y') FROM `login` WHERE `account_id` = "+getcharid(3), @OffVip$;
		dispbottom "Sua conta Vip é válida até o dia "+@OffVip$+"";
		end;
	}
	if (getgroupid() > 9) {
		end;
	}
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, Omar~ disse:

UPDATE tabela_do_usuario SET indicacao_do_vip = 0

Atualize a tabela de usuário definindo a coluna que indica quando o usuário vip para zero (1 era usuário vip / 0 sem vip)

WHERE indicacao_do_vip = 1

Quando a coluna que indique o vip for um (1) "Ou seja só usuários com vip serão alvos"

AND (dias_vip IS NULL OR dias_vip < CURDATE())

E quando a coluna de contagem de dias for nula ou a data registrada for menor que a data atual

Na verdade essa parte pode ser otimizada ficando só

AND dias_vip < CURDATE() Não precisa pegar o valor nulo pois se é nulo nunca teve um vip registrado ^^

 

Então digamos que a data de término desse vip seja 2021-01-01 e no momento do login for 2021-01-02 (um único dia a mais) a tabela era atualizada.

 

O que eu fazia para definir um vip era atualizar a coluna que registrava que aquele usuário era vip para 1 (um) e a data de término para x dias contando a partir dos dias aplicados exemplo:


<?php
$periodo = 5; /* Cinco dias */
$usuario = 99; /* ID da conta do usuário */
$query = "
UPDATE
    tabela_do_usuario
SET
    indicacao_do_vip = '1',
    dias_vip = DATE_ADD (
        CURDATE(),
        INTERVAL {$periodo} DAY
    )
WHERE
    id_da_conta = '{$usuario}'
";

Assim sendo se hoje era 2021-06-15 o término do vip seria 2021-06-20 então qualquer usuário que logasse no dia posterior involuntariamente atualizara o vip de todo mundo.

 

Veja o script em linguagem C++ que fiz ao qual eu comandava IN-GAME a  coisa toda, der uma olhada pode ser útil para que possa elaborar seu sistema aí, pois não se tratava só de adicionar ou remover vip e sim adicionar mais dias ou remover dias:

  Ocultar conteúdo


/*-----------------------------------------------------------------*\
|             ______ ____ _____ ___   __                            |
|            / ____ / _  / ____/  /  /  /                           |
|            \___  /  __/ __/ /  /__/  /___                         |
|           /_____/_ / /____//_____/______/                         |
|                /\  /|   __    __________ _________                |
|               /  \/ |  /  |  /  ___  __/ ___/ _  /                |
|              /      | / ' | _\  \ / / / __//  __/                 |
|             /  /\/| |/_/|_|/____//_/ /____/_/\ \                  |
|            /__/   |_|      npc Script         \/                  |
|                                                                   |
+-------------------------------------------------------------------+
|                     Projeto Ragnarok Online                       |
+-------------------------------------------------------------------+
| - Criação: Spell Master 16/07/2011                                |
+-------------------------------------------------------------------+
| - 17/05/2013:                                                     |
                Atualizado para novo source cod rAthena.            |
| - 22/09/2014:                                                     |
|               Atualizado conforme a nova estrutura do banco de    |
|                dados do rAthena.                                  |
| - 04/12/2014:                                                     |
|               Adicionado função de checagem se é verdadeira a     |
|                doação na conta do banco.                          |
| - 13/07/2015:                                                     |
|               Adicionado função para manipulação de GM.           |
| - 15/11/2015:                                                     |
|               Atualizado para compatibilidade com Hercules.       |
| - 08/12/2016:                                                     |
|               Removida funções de manipulação de cash.            |
|               Removida referências ao Ticket de Vip.              |
|               Removido desão de GM pois requer manipulação da     |
|                da source, inviável para uso geral.                |
|               Removido consulta para o ADM de verificar se o      |
|                foi feita doação na conta do tesoureiro no banco,  |
|                pois requer função php e manipulação de source se  |
|                tornando iniável para o uso geral.                 |
| - 09/12/2016:                                                     |
|               Adicionado variáveis globais para definir atributos.|
|               Atualizado para compatibilidade com Cronus.         |
\*-----------------------------------------------------------------*/

-	script	#vip_manager	-1,{

	// Configuração para noobs poderem usar o npc ^.^
	.@Vip_Room$ = "prontera"; // Nome do mapa da sala vip
	.@Vip_X = 150;            // Coordenadas 
	.@Vip_Y = 180;            // Coordenadas

	if(getgroupid() > 0 && getgroupid() < 10) {
		mes "[VIP]";
		mes "Olá ^FF0000"+strcharinfo(0)+"^000000";
		while(1) {
			next;
			mes "[VIP]";
			mes "O que posso fazer por você hoje?";
			next;
			switch(select("Ir para sala vip.:Consultar dias Vip restantes:Nada Obrigado")) {
				case 1:
				mes "[VIP]";
				mes "Volte sempre que precisar de meus serviços.";
				close2;
				warp .@Vip_Room$,.@Vip_X,.@Vip_Y;
				end;
				case 2:
				query_sql "SELECT DATE_FORMAT(`vip_days`, '%d/%m/%Y') FROM `login` WHERE `account_id`="+getcharid(3),.@VipDays$;
				mes "[VIP]";
				mes "Sua conta Vip é válida até o dia" +.@VipDays$;
				break;
				//case 3: Removida funções de consulta de cash
				//case 4: Removida funções de compra do ticket de vip
				//case 5: Trasformada em valor 3 para novo menu
				case 3:
				mes "[VIP]";
				mes "Volte sempre que precisar de meus serviços.";
				close;
			}
		}
	}
	else if(getgroupid() > 9 && getgroupid() < 99) {
		mes "[VIP]";
		mes "Olá membro da Staff ^FF0000"+strcharinfo(0)+"^000000";
		mes "O que posso fazer por você hoje?";
		next;
		switch(select("Ir para sala vip.:Nada Obrigado")) {
			case 1:
			mes "[VIP]";
			mes "Volte sempre que precisar de meus serviços.";
			close2;
			warp .@Vip_Room$,.@Vip_X,.@Vip_Y;
			end;
			case 2:
			mes "[VIP]";
			mes "Volte sempre que precisar de meus serviços.";
			close;
		}
	}
	else if(getgroupid() == 99) {
		mes "[VIP]";
		mes "Olá Administrador ^FF0000"+strcharinfo(0)+"^000000";
		while(1) {
			next;
			mes "[VIP]";
			mes "O que posso fazer por você hoje?";
			next;
			switch(select("Verificar Todas Vips:Verificar Conta vip:Adicionar Vip:Remover Vip:Nada Obrigado")) {
				//case 1: Removida checagem da doação
				//case 2: Removida manipulação de gm
				//case 3: Removida manipulação de cash point
				case 1:
				query_sql "SELECT `account_id`,`userid`,`group_id` FROM `login` WHERE `group_id` = 1",.@AccountId$,.@Userid$,.@GroupId;
				if(!.@GroupId) {
					mes "[VIP]";
					mes "Não foi encontrada nenhuma conta Vip apartir do ^BB0000group_id 1^000000";
					break;
				}
				mes "======================";
				for (.@i = 0; .@i < getarraysize(.@GroupId); ++.@i) {
					mes "^777777ID:^000000 "+.@AccountId$[.@i];
					mes "^777777Login:^000000 "+.@Userid$[.@i];
					mes "======================";
				}
				break;
				case 2:
				mes "[VIP]";
				mes "Por favor digite o ID ou login para verificar os dias vip na conta";
				next;
				input .@Account$; 
				query_sql "SELECT `account_id` FROM `login` WHERE `userid`='"+.@Account$+"' OR `account_id`='"+.@Account$+"'",.@AccountCheck;
				if (!.@AccountCheck) { 
					mes "[VIP]";
					mes "Conta inexistente.";
					break;
				}
				else {
					query_sql "SELECT DATE_FORMAT(`vip_days`, '%d/%m/%Y') FROM `login` WHERE `account_id`='"+.@Account$+"' OR `userid`='"+.@Account$+"'",.@VipDays$; 
					if (.@VipDays$ == "") {
						mes "[VIP]";
						mes "A conta '^0000FF"+.@Account$+"^000000' não possui status Vip.";
						break;
					}
					else {
						mes "[VIP]";
						mes "A conta Vip de '^0000FF"+.@Account$+"^000000' é válida até o dia ^BB0000"+.@VipDays$+"^000000.";
						break;
					}
				}
			case 3:
			mes "[VIP]";
			mes "Por favor digite o ID ou login para adicionar os dias vip na conta";
			next;
			input .@GetAccount$;
			query_sql "SELECT `account_id`,`group_id` FROM `login` WHERE `userid`='"+.@GetAccount$+"' OR `account_id`='"+.@GetAccount$+"'",.@AccountCheck,.@GroupCheck;
			if (!.@AccountCheck) { 
				mes "[VIP]";
				mes "Conta inexistente.";
				break;
			}
			mes "[VIP]";
			mes "Quantos dias vip?";
			next;
			input .@GetVipTime;
			if (.@GroupCheck > 9) {
				mes "[VIP]";
				mes "^FF0000Não é possível adicionar Vip a conta^000000 "+.@GetAccount$+".";
				mes "^FF0000Porque ela é uma conta Administrativa^000000!";
				break;
			}
			else if (.@GroupCheck == 1) {
				mes "[VIP]";
				mes "Esta conta já possui status Vip.";
				mes "Deseja almentar mais "+.@GetVipTime+" dias vip a conta?";
				next;
				switch(select("Adicionar VIP:Cancelar")) {
					case 1:
					query_sql "UPDATE `login` SET `group_id` = '1', `vip_days` = DATE_ADD(`vip_days`,INTERVAL "+.@GetVipTime+" DAY) WHERE `group_id` = '1' AND `account_id`='"+.@GetAccount$+"' OR `userid`='"+.@GetAccount$+"'";
					mes "[VIP]";
					mes "Foi adicionado ^FF0000"+.@GetVipTime+"^000000 dias vip na conta ^0000FF"+.@GetAccount$+"^000000.";
					break;
					case 2:
					break;
				}
				break;
			}
			else {
				query_sql "UPDATE `login` SET `group_id` = '1', `vip_days` = DATE_ADD(CURDATE(),INTERVAL "+.@GetVipTime+" DAY) WHERE `group_id` = '0' AND `account_id`='"+.@GetAccount$+"' OR `userid`='"+.@GetAccount$+"'";
				mes "[VIP]";
				mes "Foi adicionado ^FF0000"+.@GetVipTime+"^000000 dias vip na conta ^0000FF"+.@GetAccount$+"^000000.";
				break;
			}
			case 4:
				mes "[VIP]";
				mes "Por favor digite o ID ou login para Remover os dias vip na conta";
				next;
				input .@VipRemove$;
				query_sql "SELECT `account_id`,`group_id` FROM `login` WHERE `userid`='"+.@VipRemove$+"' OR `account_id`='"+.@VipRemove$+"'",.@RemoveCheck,.@VipCheck;
				if (!.@RemoveCheck) { 
					mes "[VIP]";
					mes "Conta inexistente.";
					break;
				}
				if (.@VipCheck > 9) {
					mes "[VIP]";
					mes "^FF0000Não é possível remover Vip da conta^000000 "+.@VipRemove$+".";
					mes "^FF0000Porque ela é uma conta Administrativa^000000!";
					break;
				}
				else if (.@VipCheck == 1) {
					mes "[VIP]";
					mes "Tem certesa que deseja remover os dias vips da conta "+.@VipRemove$+"?";
					next;
					switch(select("Tenho Sim:Cancelar")) {
						case 1:
						query_sql "UPDATE `login` SET `group_id` = 0, `vip_days` = NULL WHERE `group_id` = '1' AND `account_id`='"+.@VipRemove$+"' OR `userid`='"+.@VipRemove$+"'";
						mes "[VIP]";
						mes "Status Vip removido da conta ^0000FF"+.@VipRemove$+"^000000.";
						mes "Porém só será válido após o jogador deslogar.";
						break;
						case 2:
						break;
					}
					break;
				}
				else {
					mes "[VIP]";
					mes "^FF0000Não é possível remover Vip da conta^000000 "+.@VipRemove$+".";
					mes "^FF0000Porque ela não contém status de Vip^000000!";
					break;
				}
			case 5:
			mes "[VIP]";
			mes "Volte sempre que precisar de meus serviços.";
			close;
			}
		}
	}
	else {
		mes "[VIP]";
		mes "Olá ^FF0000"+strcharinfo(0)+"^000000";
		mes "Está perdio?";
		close;
		// Remoção dos artigos referentes aos dados removidos
	}

}

prontera,160,186,4	duplicate(#vip_manager)	Emisária Vip#Evip1	4_F_AGENTKAFRA
morocc,153,81,4	duplicate(#vip_manager)	Emisária Vip#Evip2	4_F_AGENTKAFRA
geffen,133,64,4	duplicate(#vip_manager)	Emisária Vip#Evip3	4_F_AGENTKAFRA
payon,163,124,4	duplicate(#vip_manager)	Emisária Vip#Evip4	4_F_AGENTKAFRA
alberta,104,76,4	duplicate(#vip_manager)	Emisária Vip#Evip5	4_F_AGENTKAFRA
izlude,120,96,4	duplicate(#vip_manager)	Emisária Vip#Evip6	4_F_AGENTKAFRA
aldebaran,154,111,4	duplicate(#vip_manager)	Emisária Vip#Evip7	4_F_AGENTKAFRA
xmas,162,114,4	duplicate(#vip_manager)	Emisária Vip#Evip8	4_F_AGENTKAFRA
comodo,226,157,4	duplicate(#vip_manager)	Emisária Vip#Evip9	4_F_AGENTKAFRA
yuno,177,189,4	duplicate(#vip_manager)	Emisária Vip#Evip10	4_F_AGENTKAFRA
amatsu,190,140,4	duplicate(#vip_manager)	Emisária Vip#Evip11	4_F_AGENTKAFRA
gonryun,171,142,4	duplicate(#vip_manager)	Emisária Vip#Evip12	4_F_AGENTKAFRA
umbala,101,169,4	duplicate(#vip_manager)	Emisária Vip#Evip13	4_F_AGENTKAFRA
louyang,223,120,4	duplicate(#vip_manager)	Emisária Vip#Evip14	4_F_AGENTKAFRA
ayothaya,142,103,4	duplicate(#vip_manager)	Emisária Vip#Evip15	4_F_AGENTKAFRA
einbroch,84,201,4	duplicate(#vip_manager)	Emisária Vip#Evip16	4_F_AGENTKAFRA
lighthalzen,152,110,4	duplicate(#vip_manager)	Emisária Vip#Evip17	4_F_AGENTKAFRA
hugel,105,152,4	duplicate(#vip_manager)	Emisária Vip#Evip18	4_F_AGENTKAFRA
rachel,165,135,4	duplicate(#vip_manager)	Emisária Vip#Evip19	4_F_AGENTKAFRA
veins,221,141,4	duplicate(#vip_manager)	Emisária Vip#Evip20	4_F_AGENTKAFRA
moscovia,215,218,4	duplicate(#vip_manager)	Emisária Vip#Evip21	4_F_AGENTKAFRA
brasilis,211,162,4	duplicate(#vip_manager)	Emisária Vip#Evip22	4_F_AGENTKAFRA

// --------------------------------------------------------------------------------
-	script	GerenciadorVip	-1,{
OnPCLoginEvent:
	if (getgroupid() == 0) {
		query_sql "SELECT (`vip_days` IS NULL OR `vip_days` < CURDATE()) FROM `login` WHERE `account_id` = "+getcharid(3);
		dispbottom "Torne-se um(a) jogador(a) hoje mesmo!";
		end;
	}
	if (getgroupid() == 1) {
		query_sql "UPDATE `login` SET `group_id`= 0 WHERE `group_id` = 1 AND (`vip_days` IS NULL OR `vip_days` < CURDATE())";
		query_sql "SELECT DATE_FORMAT(`vip_days`, '%d/%m/%Y') FROM `login` WHERE `account_id` = "+getcharid(3), @OffVip$;
		dispbottom "Sua conta Vip é válida até o dia "+@OffVip$+"";
		end;
	}
	if (getgroupid() > 9) {
		end;
	}
}

 

 

Show de bola consegui, muito obrigado a você e todos que tiraram um tempinho pra ajudar! 

Quando precisar estarei aqui novamente! ( Botão obrigado não funciona? )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
    • Por violin101
      Caros amigos, saudações
       
      Por favor, me perdoa em recorrer a orientação dos amigos, tenho uma dúvida.
       
      Gostaria de uma rotina onde o Sistema possa acusar para o usuário antes dos 30 dias, grifar na Tabela o aviso de vencimento próximo, por exemplo:
       
      Data Atual: 15/11/2024
                                           Vencimento
      Fornecedor.....................Data.....................Valor
      Fornecedor_1...........01/12/2024..........R$ 120,00 <== grifar a linha de Laranja
      Fornecedor_1...........01/01/2025..........R$ 130,00
      Fornecedor_2...........15/12/2024..........R$ 200,00 <== grifar a linha de Amarelo
      Fornecedor_2...........15/01/2025..........R$ 230,00
      Fornecedor_3...........20/12/2024..........R$ 150,00
       
      Alguém tem alguma dica ou leitura sobre este assunto ?

      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a ajuda dos amigos, mas preciso entender uma processo que não estou conseguindo sucesso.

      Como mencionado no Título estou escrevendo um Sistema Web para Gerenciamento de Empresa.
       
      Minha dúvida, que preciso muito entender:
      - preciso agora escrever a Rotina para Emissão de NFe e essa parte não estou conseguindo.
       
      tenho assistido alguns vídeos e leituras, mas não estou conseguindo sucesso, já fiz toda as importações das LIB da NFePhp conforme orientação.

      Preciso de ajuda.

      Algum dos amigos tem conhecimento de algum passo-a-passo explicando a criação dessa rotina ?

      tenho visto alguns vídeos com LARAVEL, mas quando tento utilizar e converter para PHP+Codeiginter, dá uma fila de erros que não entendo, mesmo informando as lib necessárias.

      Alguns do amigo tem algum vídeo, leitura explicando essa parte ?

      Grato,

      Cesar.
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer ao auxílio dos amigos, mas preciso entender e resolver um problema.
       
      Tenho uma Rotina que o usuário seleciona os produtos que deseja para requerer ao setor responsável.
       
      O usuário escolhe um produto qualquer e Clicla em um button para incluir a lista.

      O problema que estou enfrentando é que após escolher o produto e teclar ENTER o Sistema já salva no BD.
       
      Gostaria de criar uma Tecla de Atalho, para quando incluir/escolher o produto na lista, o usuário tecla como exemplo:
      ALT+A  para agregar a lista
      ALT+S para salvar a lista de itens desejados.

      Assim, quando teclar enter, o sistema não dispara o GRAVAR na Base de Dados.

      Grato,

      Cesar
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.