Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

arldin

Como bloqueia usuario depois de 1 mes

Recommended Posts

Bom dia a todos como posso fazer que um usuario seja bloqueiado depois de 1 mes.

E o seguinte estou tentando fazer um site a onde o usuario depois de 1 mes tenha que fazer pagamento para continuar com o cadastro e assim por diante

Quando o usuario faz o cadastro ele grava a data do cadastro e gera mais um mes

Depois de 1 mes ele vai receber um email para fazer o pagamento

Então eu gostaria de fazer um script que enguanto ele não fizer p gamento ele ficar bloqueado ate fazer o pagamento

nesta parte do script e a onde faz o cadastro do dia e gera mais 1

<br>
 <label for='data'>Data do seu cadastro</label><br>
 <span><?php echo $data=date("d-m-Y");?></span>
 <input type="hidden" name="data" value="<?php echo $data=date("Y-m-d");?>">
 <input type="hidden" name="data_pg" value="<?php echo date("Y-m-d", strtotime("+ 1 Month")); ?>" >
 <br>

tem como fazer isto e depois que ele pagar fazer um update para gerar mais um mes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer uma restrição na hora do login. Verifique a data de expiração. Se for menor que a data atual, não crie a session/cookie e negue o login, enviando para a tela de pagamento.

 

Só um detalhe: seu formulário permite que eu mude a minha própria data de expiração. Se eu acessar seu site e, pelo Firebug, mudar a data para o ano 2025, terei acesso até 2025 sem precisar pagar. Você precisa gerar essa data no backend, não no frontend. Gere a data final após o envio do formulário, não na geração dele. Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como faço para gera a data no backend

Quanto a restriçao ja existe uma restriçao ele só pode fazer o login depois que fazer a confirmação pelo email que esta assim

 

$qry="SELECT * FROM se_users WHERE user_email='$user_username' AND user_password='$user_password' AND user_verified='1'";

 

Como posso colocar esta outra restrição

Compartilhar este post


Link para o post
Compartilhar em outros sites

a data no backend você pode gerar assim:

$query = "INSERT INTO usuarios(login, email, senha, data_cadastro) VALUES('$login', '$email', '$senha', NOW())";

ou seja, use o NOW() ele vai retornar a data no formato datetime (Y-m-d H:i:s) então seu campo no db tem que ser datetime também

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como faço para gera a data no backend

Hoje você recebe o valor em $_POST['data_pg'], certo?

Basta remover esse input do form e usar a mesma função date no backend, no script que processa o formulário.

Por exemplo:

$data_pg = date("Y-m-d", strtotime("+ 1 Month"));

 

Como posso colocar esta outra restrição

No SELECT, pegue o a data de expiração e compare com a data de hoje.

Há várias formas de fazer isso com PHP. Uma delas é usando a classe DateTime. Outra é usar o timestamp retornado por strtotime, que você já usa no seu script

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Mateus Silva coloquei desta forma mais ela não gerou a data


Ok amigo Beraldo esta parte ja resolvida vou da uma estuda no link que voce me enviou

Compartilhar este post


Link para o post
Compartilhar em outros sites

Analisando o seu link qual e que eu posso usar no meu caso

A parte onde o usuario faz o login e esta

<div class="topleft"></div> 
  <form action="login-exec.php" method="post">
  <div class="qwerty">  
		<div class="label">
		  <div class="email">E-mail</div>
		  <div class="password">Senha</div>
		</div>
		<div class="label1">				
				<div class="emailtext"><input name="user_email" type="text" id="user_username"  />
				</div>
		  		<div class="passwordtext"><input name="user_password" type="password"  />
                <input type="hidden" name="acao" value="logar" />
		  		<input type="submit" class="greenButton" value="logar" /></div>				
		</div>
		<div class="label2">		
				<div class="email">
				<div class="radio"><input name="check" type="checkbox" value="" /></div>
				<div class="text1">Mantenha-me logado</div>
				</div>
		  		<div class="password"></div>		
		</div>
</div>
</form>
</div>

e o script respondave pela a analize e este

<?php
session_start();
	
	require_once('config.php');	
	
	$errmsg_arr = array();	
	
	$errflag = false;	
	
include("config.php");	
	
	function clean($str) {
		$str = @trim($str);
		if(get_magic_quotes_gpc()) {
			$str = stripslashes($str);
		}
		return mysql_real_escape_string($str);
	}	
	$user_username = clean($_POST['user_email']);
	$user_password = clean(sha1($_POST['user_password']));
	
	if($user_username == '') {
		$errmsg_arr[] = 'Login ID missing';
		$errflag = true;
	}
	if($user_password == '') {
		$errmsg_arr[] = 'Password missing';
		$errflag = true;
	}	
	
	if($errflag) {
		$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
		session_write_close();
		header("location: index.php");
		exit();
	}	
	
	$qry="SELECT * FROM se_users WHERE user_email='$user_username' AND user_password='$user_password' AND user_verified='1'";	
	
	$result=mysql_query($qry);	
	
	if($result) {
		if(mysql_num_rows($result) > 0) {
			
			session_regenerate_id();
			$se_users = mysql_fetch_assoc($result);
			
			$_SESSION['SESS_ID'] = $se_users['id'];
			$_SESSION['id_user'] = $se_users['id'];
			
			$_SESSION['SESS_FIRST_NAME'] = $se_users['user_fname'];
			$_SESSION['SESS_LAST_NAME'] = $se_users['profImage'];
			
			session_write_close();
			header("location: div1.php");
			exit();
			
		}else {
			
			header("location: login-failed.php");
			exit();
		}
		
		}
	{
		die("Query failed");
	}
?>

em qual deles e que eu incuo a clase

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você quer saber apenas se a data1 é maior ou menor que a data2, certo? A diferença em si não te interessa.

 

Então basta comprar os dois objetos DateTime.

 

Veja:

 

php > $hoje = new DateTime;
php > $ontem = new DateTime('yesterday');
php > var_dump( $ontem >= $hoje );
bool(false)
php > var_dump( $ontem <= $hoje );
bool(true)

 

É possível comparar os objetos. Então basta algo assim:

 

if ( $DataExpiracao < $DataDeHoje )
{
    // plano expirou. bloqueie o acesso
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo me descupe pela minha pouca experiencia

Eu aprendo pelas videos aulas que pego na net e pelas duvidas aqui postadas

Pois tem sido muito uteis para mim pois não tenho como fazer um bom curso

eu entendi em relação a diff só que não sei a onde coloco ele e como coloco

A data do cadastro ta assim $data e a data do pagamento assim $data_pg

Então como posso desenvolver a diff

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende dos valores de $data e $data_pg. Se forem strings, você precisa criar objetos DateTime a partir deles. Pode usar o construtor (com new) ou o método createFromFormat. Falo sobre isso no artigo. Dê uma olhada lá.

 

Tendo os dois objetos, basta usar diff como mostro no tutorial.

 

Se tiver dificuldade com objetos, pode usar strtotime e trabalhar com timestamps. Você terá o resultado em segundos e terá de converter para dias ou meses. É só fazer a divisão.

 

Tente fazer e poste as dúvidas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma esta assim

$data = date("Y-m-d");

a outra assim

$data_pg = date("Y-m-d", strtotime("+ 1 Month"));

Como faço para colocar elas no diff

Compartilhar este post


Link para o post
Compartilhar em outros sites

salva o dia em que tem que terminar (cobrar)
ai tu verifica toda vez que ele logar se é aquele dia e o mês ai se for tu cobra o kra poxa!
kra vacilão n paga os otro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Beraldo boa noite fiz como voce surgeriu mais mesmo assim continua se logando mesmo com data diferentes


Amiga Tatsunow boa noite
as duas datas são salvo no bd e que eu quero bloqueia pois antes ele irar receber um email avisando da cobrança ai se ele não fizer o pagamento ate a data do vencimento fique bloqueado ate ele fazer o pagamento

Compartilhar este post


Link para o post
Compartilhar em outros sites

esou colocando a sugestão do amigo Bereldo assim

 <?php
	 $qry="SELECT * FROM se_users WHERE data='$data' AND data_pg='$data_pg'";
	 
	 $result=mysql_query($qry);	
	
	if($result) {
	
$data = new DateTime($data);
$data_pg = new DateTime($data_pg);

$diff = $data->diff($data_pg);

echo  "Seu cadastro expirou! Deseja renovar?";
}else {
echo "Cadastro ativo";
 }
 
?>

Como as datas estão no bd so que mesmo se ja tiver passado da data do pagamento da que esta ativo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não está fazendo verificação alguma. Você só seleciona o registro, faz a diferença entre as datas, mas não faz nada com a diferença, pois não usou a variável diff em nenhum if.

 

Há duas opções:

 

1. Fazer a verificação no SELECT

 

 

$qry="SELECT * FROM se_users WHERE data='$data' AND data_pg > NOW()";

 

A restrição com NOW() vai retornar apenas quem tem data de expiração maior que a data atual.

 

 

2. Fazer a verificação depois do SELECT:

 

 

$qry="SELECT * FROM se_users WHERE data='$data' AND data_pg='$data_pg'";
 
  $result=mysql_query($qry);

if($result) {

$agora = new DateTime;
$expiracao = new DateTime( $data_pg );
 
if ( $expiracao < $agora )
{
    // plano expirou
}

 

Como eu disse antes, basta verificar se uma data é maior que a outra. Não te interessa a diferença propriamente dia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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