Alfredao 0 Denunciar post Postado Junho 3, 2011 Olá, Estou simulando um desses leilões online para meu site, para usuários poderem comprar os itens do jogo mais baratos, assim dizendo, está basicamente pronto, o problema é atualizar o cronometro do site, mesmo se não tiver ninguém no site, ou alguma página em um servidor atualizando tudo de tempos em tempos. No momento está funcionando mais ou menos assim. Existe uma coluna na tabela leiloes, data_inicio que está com o valor de 1307118600, equivalente à 03/06/2011 13:30:00. A coluna duracao, com o valor de 20, e o tempoparcial, mesmo valor da duracao. Apenas dizendo, era para a coluna tempoparcial diminuir 1 a cada segundo, assim que a data_inicio fosse igual ou menor que a data atual, que seria o cronometro do site, se chegar a zero, a ultima pessoa que der o lance arremata o produto pelo preco que estiver em valorparcial. Porém a cada lance que um usuário der, o tempoparcial é setado ao valor da duracao, aumenta 0.01 no valorparcial, e recomeça tudo de novo, esse tempo vai diminuindo 1 a cada segundo até outro usuário dar outro lance, fazendo começar tudo de novo. Quando o cronometro chegar a 0, o ultimo usuário ganhará o leilão. Acho que falei um pouco demais, é que eu realmente preciso de ajuda. Como fazer esse campo atualizar, diminuir 1 a cada segundo. Muito obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
welitonjose 1 Denunciar post Postado Junho 3, 2011 de uma olhada vai ter ajudar jquery Compartilhar este post Link para o post Compartilhar em outros sites
Alfredao 0 Denunciar post Postado Junho 4, 2011 Isso ai não seria o problema, preciso de atualizar o tempo no banco de dados também. Em todas as pessoas que estiverem na tela de leilão, o tempo deve ser o mesmo. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 4, 2011 Simples amigo, você vai criar uma tabela pra dados temporários quando a pessoa fizer seu login, você registra tal usuário e seu respectivo ID nessa tabela, calcule também um intervalo de 1 minuto de inatividade desses usuários é os remova da tal tabela, compreendeu a lógica ? Com esses usuários guardados em tal tabela, você roda algum Iterator e faz o update em cada um deles . Exemplo :seta: http://forum.imasters.com.br/topic/384775-contador-de-usuarios-on-line/ []'s Compartilhar este post Link para o post Compartilhar em outros sites
Alfredao 0 Denunciar post Postado Junho 4, 2011 Andrey Knupp, não é disso que preciso, mas obrigado pela ajuda. Até o momento, fiz dessa maneira. Um script que seria executado durante 12 horas usando comando no terminal "php update.php >/dev/null &" Salvaria o inicio do loop em uma variável. Selecionaria na tabela de leiloes onde o tempo fosse diferente de 0, e a data de inicio fosse menor que agora. Diminuiria um segundo do tempo. Agora se o tempo do final do loop em relação ao inicio dele não fosse 1 segundo, daria um usleep até dar um segundo e começar novamente, o problema é que está indo rápido demais, Acho que na parte do sleep que estou me confundindo, se alguém puder me dar uma luz ai. O script está assim até o momento. <?php include("../initdata.php"); ini_set("max_execution_time", 45000); $inicio_script = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); if ($inicio_script > mktime(12, 0, 0, date("m"), date("d"), date("Y"))) { $final_script = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")); } else { $final_script = mktime(12, 0, 0, date("m"), date("d"), date("Y")); } while ($leilao == false) { if (time() >= $inicio_script && time() <= $final_script) { $query = mysql_query("SELECT * FROM leiloes WHERE tempo != 0 WHERE tempo > " . $hora_agora . " ORDER BY idleiloes") or die(mysql_error()); if(mysql_num_rows($query) > 0) { while ($obj = mysql_fetch_array($query)) { mysql_query("UPDATE leiloes SET tempo = tempo - 1 WHERE idleiloes ='" . $obj['idleiloes'] . "'") or die(mysql_error()); } } $final_loop = microtime(true); $tempo_consumido = ($final_loop - $inicio_loop); if ($tempo_consumido > 0) { usleep($tempo_consumido); } } else { $leilao = true; } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Alfredao 0 Denunciar post Postado Junho 4, 2011 Consegui fazer funcionar, tudo ficou assim. checkupdate.php <?php exec("php update.php >/dev/null &"); update.php <?php define('LANCEPHP', 1); include("../initdata.php"); ini_set("max_execution_time", 45000); $inicio_script = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); if ($inicio_script > mktime(12, 0, 0, date("m"), date("d"), date("Y"))) { $final_script = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")); } else { $final_script = mktime(12, 0, 0, date("m"), date("d"), date("Y")); } $auctiontime = 0; while ($leilao == false) { if (time() >= $inicio_script && time() <= $final_script) { $inicio_loop = microtime(true); $hora_agora = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); $query = mysql_query("SELECT * FROM leiloes WHERE tempo != 0 AND datainicio < " . $hora_agora . " ORDER BY idleiloes") or die(mysql_error()); if(mysql_num_rows($query) > 0) { while ($obj = mysql_fetch_array($query)) { mysql_query("UPDATE leiloes SET tempo = tempo - 1 WHERE idleiloes ='" . $obj['idleiloes'] . "'") or die(mysql_error()); } } $final_loop = microtime(true); $tempo_consumido = (1000000 - (($final_loop - $inicio_loop) * 1000000)); if ($tempo_consumido > 0) { usleep($tempo_consumido); } $auctiontime++; if ($auctiontime >= 43200) { $leilao = true; } } else { $leilao = true; } } ?> Só executar o checkupdate.php a cada 12 horas e pronto. Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
dsnilo 0 Denunciar post Postado Abril 21, 2012 Se puder entre em contato pois preciso de um contador desses também. Grato Consegui fazer funcionar, tudo ficou assim. checkupdate.php <?php exec("php update.php >/dev/null &"); update.php <?php define('LANCEPHP', 1); include("../initdata.php"); ini_set("max_execution_time", 45000); $inicio_script = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); if ($inicio_script > mktime(12, 0, 0, date("m"), date("d"), date("Y"))) { $final_script = mktime(0, 0, 0, date("m"), date("d") + 1, date("Y")); } else { $final_script = mktime(12, 0, 0, date("m"), date("d"), date("Y")); } $auctiontime = 0; while ($leilao == false) { if (time() >= $inicio_script && time() <= $final_script) { $inicio_loop = microtime(true); $hora_agora = mktime(date("H"), date("i"), date("s"), date("m"), date("d"), date("Y")); $query = mysql_query("SELECT * FROM leiloes WHERE tempo != 0 AND datainicio < " . $hora_agora . " ORDER BY idleiloes") or die(mysql_error()); if(mysql_num_rows($query) > 0) { while ($obj = mysql_fetch_array($query)) { mysql_query("UPDATE leiloes SET tempo = tempo - 1 WHERE idleiloes ='" . $obj['idleiloes'] . "'") or die(mysql_error()); } } $final_loop = microtime(true); $tempo_consumido = (1000000 - (($final_loop - $inicio_loop) * 1000000)); if ($tempo_consumido > 0) { usleep($tempo_consumido); } $auctiontime++; if ($auctiontime >= 43200) { $leilao = true; } } else { $leilao = true; } } ?> Só executar o checkupdate.php a cada 12 horas e pronto. Obrigado pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites