arldin 1 Denunciar post Postado Abril 1, 2015 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
Beraldo 864 Denunciar post Postado Abril 1, 2015 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
arldin 1 Denunciar post Postado Abril 2, 2015 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
Mateus Silva 64 Denunciar post Postado Abril 2, 2015 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
Beraldo 864 Denunciar post Postado Abril 2, 2015 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
arldin 1 Denunciar post Postado Abril 2, 2015 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
arldin 1 Denunciar post Postado Abril 2, 2015 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
Beraldo 864 Denunciar post Postado Abril 2, 2015 O array $se_users tem os campos da tabela de usuários, certo? Nessa tabela tem a data de expiração? É essa data que será usada na comparação com a data atual Compartilhar este post Link para o post Compartilhar em outros sites
arldin 1 Denunciar post Postado Abril 2, 2015 Eu uso a Calculando diferença entre datas da dica do seu blog E isto Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 2, 2015 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
arldin 1 Denunciar post Postado Abril 2, 2015 Eu quero sabe e a diferença das datas Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Abril 2, 2015 Eu quero sabe e a diferença das datas então use diff, como no link que postei Compartilhar este post Link para o post Compartilhar em outros sites
arldin 1 Denunciar post Postado Abril 3, 2015 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
Beraldo 864 Denunciar post Postado Abril 3, 2015 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
arldin 1 Denunciar post Postado Abril 3, 2015 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
Beraldo 864 Denunciar post Postado Abril 3, 2015 $Data1 = new DateTime( $data ); $Data2 = new DateTime( $data_pg ); $diff = $Data1->diff( $Data2 ); Compartilhar este post Link para o post Compartilhar em outros sites
Tatsunow 2 Denunciar post Postado Abril 3, 2015 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
arldin 1 Denunciar post Postado Abril 4, 2015 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
arldin 1 Denunciar post Postado Abril 4, 2015 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
Beraldo 864 Denunciar post Postado Abril 4, 2015 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