Remoção de registo automatico, sem intervenção humana

DarkWolfXP

Power Member
Boas, venho outra vez a pedir o vosso auxilio ^^, eu neste momento possuo uma questão... pertinente... Vejamos o seguinte exemplo:
Um cliente compra um produto, e esse produto é valido por 2meses....
Quando cliente faz o pedido, eu posso aceitar ou não o pedido que ele realizou, caso eu aprove o pedido, será registado na base de dados...
-Nesta parte gostaria de saber quando uso date(); esta função mostra-me a data que está definida no meu computador ou a data que está definida no servidor?
-Após a aprovação e a inserção da data na base de dados, como faço para que nakele dia e 2 meses depois em que foi aprovado o produto, o produto deixe de ter validade....?
-Como posso fazer uma script que corra automaticamente...? Sem a minha intevenção... verficando o seguinte:
Código:
//data em que foi aprovada
$datestart
//date em que irá ficar fora de validade
$dateend
if($datestart == $dateend){
//remove da base de dados o registo do produto
}else{
....
Este código, seria valido se o date(); fosse a data definida no servidor, caso seja, eu não estou a ver como posso por o codigo acima descrito a funcionar automaticamente... sem intervenção humana :lol:
Alguma sugestão?
 
Última edição:
Sim, a função date devolve a data do servidor onde os scripts PHP estão a correr. Em relação à remoção de registos de forma automática, podes usar um trigger temporal se o SGBD que estás a utilizar suportar. As últimas versões do MySQL suportam este tipo de triggers sobre o nome de schedulers.
 
Usando apenas PHP, podes faze-lo de maneira a que sempre que aceda à informação desse produto, verifique a data de validade e, caso esteja "fora de prazo", elimine. Por exemplo:
PHP:
// Gravas na base de dados a data em que foi criado e a validade
$baseDeDados->gravarCriacao( date( 'dmY' ) );
$baseDeDados->gravarFim( date( 'dmY',mktime( 0,0,0,date('m')+2,date('d'),date('Y') ) ) );
Depois, para verificares
PHP:
$hoje = date( 'dmY' );
$datafim= $baseDeDados->irBuscarFim();

$diferenca = intval($datafim) - intval($hoje);

if( $diferenca < 0 ) {
     // Já expirou, remover
}
else {
     // Ainda não expirou
}
Deve funcionar, só testando.
 
Última edição:
Sim, mas isso implica a permanência do registo na base de dados, até alguém consultar alguma informação referente a esse mesmo registo; o que pode não acontecer.

No que diz respeito ao cron, é uma alternativa se o SGBD não suportar triggers temporais.
 
Back
Topo