Fóruns sobre PHP, JavaScript, HTML, MySQLi, jQuery, Banco de Dados, CSS


Moderador: web

 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1090
Sexo: Masculino
Localização: Ourinhos, SP

expiração automática de anúncio com avisos preliminares

13-05-2011 21:04

Preciso de ajuda no seguinte: cadastro um anúncio, e são inseridos no bd os registros correspondentes à data de cadastro e à data de expiração; esta, 30 dias após a data de cadastro. Quando faltarem, respectivamente, 15, 10 e 5 dias para a expiração, desejo que se enviem mensagens de e-mail ao usuário, informando que a expiração está próxima. Estou trabalhando em cima de um código que não está dando certo. Não estou sabendo comparar a data de expiração com as datas de envio das mensagens. Dá para dar uma ideia de como posso fazer essa comparação. Se precisar, posto o código com a forma que estou tentando. Um abraço.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

expiração automática de anúncio com avisos preliminares

13-05-2011 21:43

Abaixo deixo uma base para você usar.

Esse compara a data atual com uma data definida manualmente, ou vinda de uma variável. Compara os 2 valores, e retorna o número de dias. Com base nisso você pode enviar um email nessa data.

Para usar esse script que considero viável, você vai ter que usar o "cron", para carregar o script uma vez por dia.

<?php $hoje = date('Y-m-d'); $vencimento = ('2011-05-29'); $a = explode("-","$vencimento"); $b = explode("-","$hoje"); $antiga= mktime(0, 0, 0, $b[1], $b[2], $b[0]); $atual= mktime(0, 0, 0, $a[1], $a[2], $a[0]); $diferenca= $atual-$antiga; $dias = floor($diferenca/84600); if($dias=='15') { echo "<font color=\"blue\">faltam 15 dias</font>"; } elseif($dias=='10') { echo "<font color=\"blue\">faltam 10 dias</font>"; } elseif($dias=='5') { echo "<font color=\"blue\">faltam 5 dias</font>"; } else { echo "faltam $dias"; } ?>

Você também pode fazer direto na query MySQL da seguinte forma:

- Primeiro, a data salva no banco de dados deve estar no seguinte formato: aaaa/mm/dd;

Ai, você usa a seguinte query:

$query=mysql_query("SELECT seuscampos FROM suatabela WHERE to_days(campodadata) - to_days(NOW()) = 1");

seuscampos são todos que vai usar no while, que consequentemente vai enviar os emais para os cadastros do período

suatabela é a tabela consultada

campodadata é o campo com a data no formato aaaa/mm/dd, você pode até salvar a data com o NOW()

NOW() pega a data atual no formato aaaa-mm-dd hh:mm:ss

1 é a diferença de dias, ou seja, no caso os cadastros que expiram amanhã, se fosse daqui a 7 dias, seria o 7
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1090
Sexo: Masculino
Localização: Ourinhos, SP

expiração automática de anúncio com avisos preliminares

14-05-2011 07:25

No exemplo em que me baseei, o cara deve ter traduzido um código norte-americano, e deve ter se enrolado. Ele criou um código para imobiliária, depois vi o mesmo código sendo usado para revenda de automóveis, em inglês. Vou pôr o código a título de ilustração, depois, se quiser, peço que apague. Testando o código, dando echo, a não ser que eu não tenho feito certo, as variáveis $ten1 e $ten2 mostram o décimo dia além da data atual, uma a partir da zero hora e a outra até 23:59:59. Acho que faltou parâmetro para comparar com a data de expiração existente no bd:

//send emails to the expire agents //            10 days to the Expire Date (ExpDate) $ten1 = mktime(0,0,0,date(m),date(d) + 10,date(Y)); $ten2 = mktime(23,59,59,date(m),date(d) + 10,date(Y)); $qexp = "select * from re2_agents where ExpDate between '$ten1' and '$ten2' and days10 = 'n' "; $rexp = mysql_query($qexp) or die(mysql_error()); if(mysql_num_rows($rexp) > '0') {     while($aexp = mysql_fetch_array($rexp))     {         //send an email         $to = $aexp[email];         $subject = "10 dias para expirar!";         $message = "Olá $aexp[FirstName] $aexp[LastName],\nsua conta em $_SERVER[HTTP_HOST] expirará em 10 dias!\n\nPara renovar sua conta, entre com seu nome de usuário e senha e vá em \"Renovar Conta\" .\n\nObrigado!\n$_SERVER[HTTP_HOST]";         $headers = "MIME-Version: 1.0\n";          $headers .= "Content-type: text/plain; charset=iso-8859-1\n";         $headers .= "Content-Transfer-Encoding: 8bit\n";          $headers .= "From: $_SERVER[HTTP_POST] <$aset[ContactEmail]>\n";          $headers .= "X-Priority: 1\n";          $headers .= "X-MSMail-Priority: High\n";          $headers .= "X-Mailer: PHP/" . phpversion()."\n";          mail($to, $subject, $message, $headers);         mysql_query("update re2_agents set days10 = 'y' where AgentID = '$aexp[AgentID]' ") or die(mysql_error());     } } 

Ele fez para expirar o usuário cadastrado, e eu estou adaptando para expirar o anúncio. Vou testar o seu script.

Uma pergunta mais, no momento: como estou usando o servidor local, estou alterando a data de meu computador para testar o script. Estou agindo certo?

Ops! Tenho de perguntar também: o funcionamento dos dois modos que você colocou é automático, independente de procedimento pelo administrador do site? E o "cron", que surgiu em alguns resultados quando eu pesquisava, já está no código que você forneceu? Desculpe: pelo que vi, no segundo código, deverei inserir no bd a data com hora, minutos e segundos. É isso?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

expiração automática de anúncio com avisos preliminares

14-05-2011 07:35

Quando testo scripts de data que se baseiam no banco de dados, eu costumo somente criar algumas linhas fictícias na tabela para poder comparar com a data atual, geralmente não altero o relógio do Windows. A questão da hora no script é porque usei o NOW(), quando você usa o NOW() como valor para inserir uma data no banco de dados, a data atual é inserida no campo ( data e hora ). Com base no script que indiquei é verificado a diferença de dias, nesse caso a hora é relativa.

Já o cron é uma ferramenta oferecida por alguns provedores de hospedagem. Geralmente fica no painel de controle do domínio: Cron jobs

Essa ferramenta permite executar uma ação no servidor de tempo em tempo, por exemplo, carregar um arquivo que atualiza a tabela todo os dias as 10 da manhã.

Se você não tem essa ferramenta Cron jobs na sua hospedagem, você vai ter que carregar o arquivo manualmente sempre que precisar.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1090
Sexo: Masculino
Localização: Ourinhos, SP

expiração automática de anúncio com avisos preliminares

14-05-2011 08:21

Por enquanto, estou testando o código localmente. Estou pesquisando sobre o cron, e como posso utilizá-lo localmente, se é que isso é possível. Encontrei um sistema chamado Moodle, baseado em PHP/MySQL, que me parece desenvolvido para a área educacional (http://aprender.rosana.unesp.br/mod/res ... php?id=254), que diz sobre a forma de invocar o cron por aquele sistema (vou baixá-lo e ver como funciona):

"No Moodle 1.9 Há um número de forma a invocar cron.php. Cron pode ser iniciado a partir da barra de endereços no navegador (URL geralmente terminando em admin / cron.php) através de um daemon , wq1et ouro, ouro onda algum outro código.". O texto foi obtido a partir deste link http://docs.moodle.org/en/Installation_ ... ng_EasyPHP, e o traduzi a partir do Google.
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

expiração automática de anúncio com avisos preliminares

14-05-2011 08:59

Já ouvi falar de ferramentas que simulam o cron job localmente, só não tive oportunidade de testar.

Basicamente o que o cron fará é rodar o arquivo executando a ação. Assim que tiver um tempo vou verificar os links indicados.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1090
Sexo: Masculino
Localização: Ourinhos, SP

expiração automática de anúncio com avisos preliminares

14-05-2011 09:29

Você se lembra dos nomes de tais pacotes? Achei um software que se chama cron.exe, e instalei no Windows. É da Lucent Tecnologies. Tem os campos path/program options, time, days, style, run, mas não sei como usá-lo. Também li sobre um pacote chamado CURL, num tutorial do qual extraí o seguinte (se não houver problema, depois passo o link do mesmo):

A solução a este problema consiste em utilizar CURL. Este pacote vem incorporado na maioria das distribuições Linux, e em caso contrário, pode ser baixado através deste endereço http://curl.haxx.se.

CURL é uma ferramenta para transferência de arquivos com sintaxe URL, que envia a saída padrão à tela. Podemos fazer a seguinte prova:

# curl http://www.google.com

Também podemos re-enviar a saída e salvá-la em um arquivo

# curl http://www.google.com > google.htm

CURL suporta diferentes protocolos FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE, LDAP e alguns mais que poderão consultar em sua web. Ademais, instala-se uma biblioteca com um conjunto de funções que podem ser usadas desde php, mas isto é outra história.

Continuando com nosso caso, podemos executar agora um script php desde a linha de comandos, simplesmente escrevendo isto:

# curl http://localhost/meuscript.php

Suponhamos que vamos executar um script que envia os e-mails de nosso boletim de correio chamado boletim.php, porém este se encontra hospedado em uma pasta protegida de nosso servidor web. Neste caso executamos o script passando-lhe o usuário e senha para acessar ao diretório protegido.

#curl -u username:password http://localhost/protegido/boletim.php

Para programar no cron de nosso linux esta tarefa e que seja executada automaticamente de forma periódica, devemos conhecer a rota completa onde está instalado o curl que habitualmente costuma ser em /usr/bin.

Agora, editaremos nosso arquivo de tarefas de cron (por exemplo, com o comando crontab -e), e adicionamos esta linha:

30 4 * * * /usr/bin/curl -u username:password http://localhost/protegido/boletim.php

Isto fará com que todos os dias às 4:30 da madrugada se execute o script boletim.php de maneira automática. Se desejar conhecer mais informações sobre a programação de tarefas consulte a ajuda (man crontab).
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

expiração automática de anúncio com avisos preliminares

14-05-2011 15:27

Criei um mini artigo sobre como usar o Cron, dá uma olhada
Como-usar-o-cron-no-Xampp-com-Windows-7_19_6292.html
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1090
Sexo: Masculino
Localização: Ourinhos, SP

expiração automática de anúncio com avisos preliminares

14-05-2011 17:54

Beleza. Obrigado. Testei os scripts que você postou acima. O primeiro deu certo, consegui adaptar à consulta no banco de dados, mas o outro, da query, não entendi muito bem. Depois posto minha adaptação do seu código e as dúvidas que ainda tenho sobre ele: melhor formato para o campo date, por exemplo (há um formato em que não se põe barra nem hífen).
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

expiração automática de anúncio com avisos preliminares

14-05-2011 18:33

Acho que deve ter o separador, caso contrário ficaria complicado trabalhar com os valores.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1090
Sexo: Masculino
Localização: Ourinhos, SP

expiração automática de anúncio com avisos preliminares

17-05-2011 11:31

Abaixo, adaptei o código que você inseriu no princípio do post, e está funcionando (dei echo em todas as variáveis para conhecer seus valores):

<? $dbhost="localhost"; /* servidor */ $dbuser="root"; /* usuário do banco de dados */ $dbpasswd=""; /* senha do banco de dados */ $dbname="anuncios_bd"; /* nome do banco de dados */ /* abaixo abrimos a conexão com os dados acima */ $conexao = @mysql_connect($dbhost, $dbuser, $dbpasswd) or die ("não foi possível a conexão, verifique os dados."); $db = @mysql_select_db($dbname) or die ("não foi possível o acesso ao banco de dados $dbname."); /* nome da tabela onde estão os nossos registros */ $tabela="tab_anuncios"; $q1 = "select * from $tabela"; $r1 = mysql_query($q1) or die(mysql_error()); echo $q1; echo "<br>"; while($a1 = mysql_fetch_array($r1)) { $hoje = date('Y/m/d'); $vencimento = $a1['DataExpiracao']; //$vencimento = ('2011/05/29'); echo $hoje; echo "<br>"; echo $vencimento; echo "<br>"; $a = explode("/","$vencimento"); $b = explode("/","$hoje"); $antiga = mktime(0, 0, 0, $b[1], $b[2], $b[0]); $atual= mktime(0, 0, 0, $a[1], $a[2], $a[0]); $diferenca = $atual-$antiga; $dias = floor($diferenca/84600); echo $a; echo "<br>"; echo $b; echo "<br>"; echo $antiga; echo "<br>"; echo $atual; echo "<br>"; echo $diferenca; echo "<br>"; echo $dias; echo "<br>"; if($dias=='15') { echo "<font color=\"blue\">faltam 15 dias</font>"; echo "<br>"; } elseif($dias=='10') { echo "<font color=\"blue\">faltam 10 dias</font>"; echo "<br>"; } elseif($dias=='5') { echo "<font color=\"blue\">faltam 5 dias</font>"; echo "<br>"; } else { echo "faltam $dias"; echo "<br>"; } }//fecha while ?>

No código original em que estou baseando o meu, as datas de cadastro e expiração eram inseridas sem separadores, e passei a inseri-las com separadores:

<? $DataCadastroSemSeparador = mktime(0,0,0,date(m),date(d), date(Y)); echo $DataCadastroSemSeparador; echo "<br>";  $DataExpiracaoSemSeparador = mktime(0,0,0,date(m) + 1,date(d), date(Y)); echo $DataExpiracaoSemSeparador; echo "<br>";  $DataCadastroComSeparador = date('Y/m/d', $DataCadastroSemSeparador); echo $DataCadastroComSeparador;  echo "<br>"; $DataExpiracaoComSeparador = date('Y/m/d', $DataExpiracaoSemSeparador); echo $DataExpiracaoComSeparador;  echo "<br>"; ?>

No seu exemplo, é dado o explode dos registros dos campos date, e daí é feita uma subtração utilizando os valores sem os separadores:

$a = explode("/","$vencimento"); $b = explode("/","$hoje"); $antiga = mktime(0, 0, 0, $b[1], $b[2], $b[0]); $atual= mktime(0, 0, 0, $a[1], $a[2], $a[0]); $diferenca = $atual-$antiga; $dias = floor($diferenca/84600); 

Se eu fizer essa subtração com os registros dos campos date no bd sem os separadores, a operação não seria mais rápida, já que há um procedimento para se excluírem os separadores, e depois ser feita a subtração sem os mesmos? Dá na mesma de uma ou de outra forma?Abaixo, adaptei o código que você inseriu no princípio do post, e está funcionando (dei echo em todas as variáveis para conhecer seus valores):
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

expiração automática de anúncio com avisos preliminares

17-05-2011 11:52

O primeiro exemplo que dei, sem ser na query, é mais indicado se você precisa de qualquer forma mostrar todos os cadastros, já na segunda opção, na query, você pega somente os registros que precisa, ou seja, o que estão com o anúncio para expirar em tantos dias. Ai você tem que ver o mais viável no seu caso.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1090
Sexo: Masculino
Localização: Ourinhos, SP

expiração automática de anúncio com avisos preliminares

17-05-2011 18:25

Eu coloquei uma consulta em seu primeiro exemplo. Ainda não entendi muito bem a consulta do segundo exemplo. É que eu pensei numa maneira de trabalhar com os registros do campo date do bd sem separadores, como possibilidade de ser mais rápido do que com separadores. O quanto a "dar na mesma", que perguntei, foi nesse sentido.

Ainda quanto ao seu primeiro exemplo, alterei-o para não utilizar separadores. Não sei se está correto o que fiz, mas me parece que funciona corretamente:

<?php $hoje = mktime(0,0,0,date(m),date(d), date(Y)); //$vencimento = mktime(0,0,0,date(m),date(d) + 13, date(Y)); $vencimento = mktime(0,0,0,date(m) + 1,date(d), date(Y)); echo $hoje; echo "<br>"; echo $vencimento; echo "<br>"; $HojeComSeparador = date('Y/m/d', $hoje); echo $HojeComSeparador;  echo "<br>"; $VencimentoComSeparador = date('Y/m/d', $vencimento); echo $VencimentoComSeparador;  echo "<br>"; $atual = $hoje; $futura = $vencimento; $diferenca = $futura-$atual; $dias = floor($diferenca/84600); echo $atual; echo "<br>"; echo $futura; echo "<br>"; echo $diferenca; echo "<br>"; echo $dias; echo "<br>"; if($dias=='15') { echo "<font color=\"blue\">faltam 15 dias</font>"; } elseif($dias=='10') { echo "<font color=\"blue\">faltam 10 dias</font>"; } elseif($dias=='5') { echo "<font color=\"blue\">faltam 5 dias</font>"; } else { echo "faltam $dias"; } ?>

0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

expiração automática de anúncio com avisos preliminares

17-05-2011 18:42

O script ai parece estar ok. Quanto ao post, você informou que precisa enviar um email quando o usuário estiver faltando tantos dias para fazer o pagamento.

O segundo script vai filtrar todos os cadastrados, e mostrar no while somente os que estão tantos dias para pagar. Isso irá agilizar todo o processo porque você só vai pegar os resultados que se enquadram no que precisa.

O segundo script seria mais um tipo de função, onde você irá ter que mostrar todos os cadastrados, e ai rodar o script que indique para ver os que estão com prazos a vencer.

Quanto a separadores, barra ou hífen, acho que ambos separadores dá no mesmo, o importante é salvar com um e usar o mesmo para trabalhar com eles.
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:
 
Mais de 1000 postagens
Mais de 1000 postagens
Tópico Autor
Mensagens: 1090
Sexo: Masculino
Localização: Ourinhos, SP

expiração automática de anúncio com avisos preliminares

18-05-2011 09:58

Mas se eu colocar o seu primeiro exemplo numa consulta (como fiz mais acima), de alguma forma ele fará o que o segundo exemplo faz. Ou não? Depois eu vou testar melhor o segundo exemplo, vou ler sobre o comando NOW(), pois ainda não o fiz. Desculpe insistir na questão do separador, prometo que não mais perguntarei sobre isso: se os registros que estão no bd num campo date contêm separadores (barra ou hífen), eu terei de tirá-los, e isso é uma etapa do procedimento. O tempo gasto pelo código para um procedimento nessa situação será o mesmo se os registros no bd já se encontrarem sem os separadores (pois não haveria essa etapa de se tirarem os separadores)? Veja a situação do seu primeiro exemplo, com os separadores, e a da adaptação do mesmo, que postei antes de sua última resposta, em que tirei os separadores. Você entende que um (contendo separadores) seria mais lento do que o outro (não contendo separadores)?
0
 
Avatar do usuário
ADMIN
ADMIN
Mensagens: 17422
Nome: Kleber
Descrição do site: Onde você encontra scripts grátis para o seu site
Sexo: Masculino
Localização: RJ / RJ / Brasil
Contato:

expiração automática de anúncio com avisos preliminares

18-05-2011 11:17

O segundo exemplo é mais rápido, porque só os resultados desejados são carregados. Quanto aos separadores, você pode tirar eles na query

Como-usar-o-replace-na-sua-consulta-mysql_19_2290.html
0
Tem um script legal em HTML, CSS, PHP, HTML, JavaScript, jQuery? Poste e compartilhe com os usuários do fórum :rock:

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado