• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Andrer757

duvida com horas

11 mensagens neste tópico

boas,

isto e provavelmente uma duvida parva mas eu precisava de fazer uma função que corresse uma tabela mysql de noticias e eliminasse todas as informações com mais de 10 minutos e em que o estado seja igual a resolvido, o código sql eu sei fazer, onde tenho duvida é o que colocar na guard do if para que ele verifique se a informação tem mais de 10 minutos.

a hora na tabela e gerada com a função gmdate e esta no formato H:i

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se a hora estivesse em Unix timestamp, bastava fazer qualquer coisa do tipo


$ligacao //variavel da ligacao
$timemax = time() - 600;
$query = "DELETE * FROM tabela WHERE hora <= $timemax OR estado = 'RESOLVIDO'";
$query = mysql_query($query, $ligacao);
if (!$query) {

echo "erro";

}

else

{ 

echo "já foram...";

}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem isso quer dizer que 1º vou ter que converter a hora da informação do formato H:i para time() com a função strtotime verificar se é maior ou igual a time()-600 e entao eliminar esse campo se no campo estado estiver como resolvido.

thanks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se a hora estivesse em Unix timestamp, bastava fazer qualquer coisa do tipo


$ligacao //variavel da ligacao
$timemax = time() - 600;
$query = "DELETE * FROM tabela WHERE hora <= $timemax OR estado = 'RESOLVIDO'";
$query = mysql_query($query, $ligacao);
if (!$query) {

echo "erro";

}

else

{ 

echo "já foram...";

}

cuidado que nesse query o que ele quer é os tais 10 minutos e não podes usar o OR no query mas sim o AND

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

cuidado que nesse query o que ele quer é os tais 10 minutos e não podes usar o OR no query mas sim o AND

Neste caso pode ser indiferente, porque a hora pode ser a da data em que foi resolvido. Logo, o OR ia remover algum que pudesse ficar para trás.

PS: Gostei do teu avatar :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

mysql_select_db($database_aratransito, $aratransito);
$query_rsreg = "SELECT * FROM noticias WHERE estado <> '0'";
$rsreg = mysql_query($query_rsreg, $aratransito) or die(mysql_error());
$row_rsreg = mysql_fetch_assoc($rsreg);
$actualmenos10 = time()-600;
while ($row_rsreg = mysql_fetch_assoc($rsreg)) {
$horatime = strtotime($row_rsreg['hora']);
if (($horatime <= $actualmenos10) && ($row_rsreg['estado'] == '1')) {
	$update = "UPDATE noticias SET estado = '0' WHERE cod_info = '".$row_rsreg['cod_info']."'";
	mysql_select_db($database_aratransito, $aratransito);
	$result = mysql_query($update, $aratransito) or die(mysql_error());
}
if (($horatime <= $actualmenos10) && ($row_rsreg['estado'] == '2')) {
	$update = "UPDATE noticias SET estado = '0' WHERE cod_info = '".$row_rsreg['cod_info']."'";
	mysql_select_db($database_aratransito, $aratransito);
	$result = mysql_query($update, $aratransito) or die(mysql_error());
}
if (($horatime <= $actualmenos10) && ($row_rsreg['estado'] == '3')) {
	$update = "DELETE FROM noticias WHERE cod_info = '".$row_rsreg['cod_info']."' AND estado = '3'";
	mysql_select_db($database_aratransito, $aratransito);
	$result = mysql_query($update, $aratransito) or die(mysql_error());
}
}	

legenda:

1 = Novo

2 = Actualizado

3= Resolvido

Boas,

Depois da vossa ajuda criei este código que tem funcionado mas detectei um bug, umas das informações de estado actualizado e que foi "Actualizada às 17:58 do dia 20/01/2008" não faz o que devia ou seja por o estado a 0 e não percebo porque  ;)

alguém me poderá ajudar

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já consegui resolver o problema

tive de alterar esta linha:

$horatime = strtotime($row_rsreg['hora']);

para:

$horatime = strtotime($row_rsreg['data']." ".$row_rsreg['hora']);

afinal não resolveu pelo contrario fez pior  ;) quer tenha ou não mais de 10 min activa o código.

alguem me pode ajudar?

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

bem estou a ver que ninguém me consegue ajudar  :(

sinceramente já não sei o que fazer com este código  :D e estou com alguma urgência nisto.

obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pega no que vem da BD, faz split e usa o mktime()

boas djthyrax,

já alterei para mktime mas não percebi isso do split. poderias-me explicar para que serve e como utilizar?

obrigado pela ajuda

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se passares os argumentos correctamente ao mktime(), ele faz-te o mesmo que o strtotime().

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora