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 ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

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