[RESOLVIDO] Criar contador usando PHP/MySQL

Olá,

Vamos lá…

(Acho que esse tópico promete…é polêmico).

Já tentei e pesquisei muito o assunto e quase cheguei a uma conclusão.

Quero criar um contador que conte até 60 segundos e quando chegar aos 60 o código adiciona +3 ao campo “turno” no banco de dados.

Estou utilizando duas tecnologias para tentar esse “feito”: PHP/MySQL.

Já fiz um sistema de turnos legal em Javascript, mas ele é client-side e então não ajuda muito e nem resolve o problema.

Em PHP dizem que não tem jeito. (Ainda penso que tenha jeito sim).

Então tem o MySQL. Fazer algum código automático que adicione valores de turnos na tabela de tempos em tempos.

Pensei em triggers e eventos que não entendo muito. E é o que tentarei agora.

Alguma sugestão geral ou sobre funções do MySQL para criar um sistema de turnos?

Minha idéia é a seguinte.

A partir do momento que o usuário clicar em um botão do formulário(botão ‘Fundar Nova Cidade’), o sistema dispara um contador que adiciona turnos em um campo da tabela no banco de dados após o contador chegar a determinado valor.
E enquanto a cidade “existir”, o sistema deve continuar a gerar e adicionar turnos de tempo em tempo no banco de dados.

Alguma idéia ou sugestão?

Muito obrigado por qualquer informação ou ajuda. É bem vinda.

Obrigado.

Jeito tem, a questão é vc “dividir” o processo entre o client/server, já que o seu impeditivo seria o tempo máximo de uma requisição (geralmente 60 segundos), vc pode criar uma funcão em js que aciona o clique do botão e outra que após ser clicado ficará pedindo aumento do contador a cada 60 segundos usando setTimeout por exemplo…

var acionado = false;

function acionaContador() {
    if (!acionado) {
        acionado = true;
        setTimeout("aumentaContador()", 1000 * 60); //1 segundo X 60 = 1 minuto
    }
}

function aumentaContador() {
    //ajax...
}

Tendo essa base, você cria uma página php que será buscada pelo ajax, informando que precisa aumentar o contador, e o melhor, nem precisa de trigger para isso… boa sorte!

1 curtida

Obrigado pela ajuda @rodevops.

Eu consegui fazer uma função(Stored Procedure) dentro do MySQL no PHPMYADMIN que dispara um contador que adiciona +3 turnos a cada 10 segundos em um campo chamado “turnos” no banco de dados.

Está funcionando. Só não posso parar o servidor do MySQL senão tenho que fazer um CALL para chamar a função do contador novamente manualmente.

A questão é fazer a Stored Procedure e o CALL da função ser chamado no PHP. Eu implementei um código básico mas ainda não está atualizando o banco de dados. Mas no MySQL esta funcionando. Preciso saber como implementar esse código…

Código até agora:

https://pastebin.com/nxndcRKX

Obrigado por qualquer ajuda.

=== EDIT ===

Estou finalizando meu tópico aqui. Consegui fazer funcionar utilizando PHP/MySQL e somente o MySQL, porém como é um LOOP infinito pra ficar atualizando o banco de dados, trava o servidor do MySQL nessa tarefa apenas e não aceita mais requisições novas, pois não para de rodar. Mas funciona.

Utilizei triggers e stored procedures.

Código usando PHP/MySQL:
https://pastebin.com/gPptE9nF

Código usando MySQL:
https://pastebin.com/k9U9GnEq

Fica a título de estudos pra quem precisar.

Obrigado.

Bom é um recurso, mas sinceramente você está usando um excesso e tanto de processamento para uma coisa tão simples, já que você quer apenas usar MySQL, pesquise sobre event scheduler

https://dev.mysql.com/doc/refman/8.0/en/events-overview.html

Bascicamente é um tarefa agendada, melhor que usar proc (abreviação de procedure), func (functions) e principalmente trigger’s, como o pessoal falou em outros tópicos, trigger é interessante mas pra travar tudo é uma beleza! (principalmente em tabelas não indexadas)… e vc mesmo já está vendo o resultado (travando tudo) mas enfim, vale para seu aprendizado…

1 curtida