Jump to content
JoaoVM

PHP Condição para Sistema de Ponto

Recommended Posts

JoaoVM

Boas Pessoal,

Tenho um problema com o meu código PHP, o que acontece e que tenho algo parecido com um registo de ponto, nesse registo de ponto cada toque do cartão com tag RFID insere na base de dados, o meu problema é quando insere o primeiro registo de entrada ele faz tudo bem, quando passo novamente o cartão e ele insere com o registo de saída, mas quando volto a passar novamente o cartão ele insere um registo de saída novamente quando deveria inserir um registo de entrada.

Como faço para se já existir uma saída daquele colaborador na data atual para voltar a inserir uma entrada, visto que ele pode sair e entrar varias vezes na linha, que condição utilizo para isto?

Outro problema é que o campo Total Horas é calculado corretamente mas só é mostrado quando insere o novo registo de saída que vem erradamente, o que acontece é que o resultado é correto mas só aparece no novo registo como mostra a imagem...

Vejamos o código...

http://prntscr.com/21u7wu

if(isset($_POST['entrada'])) {
$rfid = $_POST['rfid'];

$query = mysql_query("select ... from transacoes_bmw where rfid=".$rfid." and data=timestamp(current_date())");
$mostra = mysql_fetch_array($query);

if ($mostra['rfid'] == 0){

	mysql_query("insert into transacoes_bmw (...,evento, total_horas,...) values (...,'$evento1','$total_horas1',...)");

}
elseif ($mostra['rfid'] >= 1 && $mostra['evento'] == 'E'){

	mysql_query("insert into transacoes_bmw (...,evento, total_horas,...) values (...,'$evento2','$total_horas2',...)");

}
elseif ($mostra['rfid'] >= 1 && $mostra['evento'] == 'S'){

	mysql_query("insert into transacoes_bmw (...,evento, total_horas,...) values (...,'$evento1','$total_horas1',...)");

}
//TER EM CONSIDERAÇÃO QUE
$evento1='E';
$evento2='S';
$total_horas1='00:00:00'
$total_horas2=($hora_saida - $hora_entrada)
//CLARO QUE O CALCULO NAO E ASSIM MAS E APENAS PARA DAR UMA IDEIA

Share this post


Link to post
Share on other sites
HappyHippyHippo

Como faço para se já existir uma saída daquele colaborador na data atual para voltar a inserir uma entrada, visto que ele pode sair e entrar varias vezes na linha, que condição utilizo para isto?

perguntas à base de dados se existe o registo de saída.

se sim, então tens de inserir uma entrada

quanto à diferença de tempo, tens o código SQL que te apresentei no teu outro tópico ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JoaoVM

HappyHippyHippo,

Vejamos a lógica da minha condição, penso que está certa, apenas não percebo o que se está a passar com a query porque os dados da hora_saida estão na hora_entrada, realmente o ultimo registo de id_transacao é o 256 mas como vemos na imagem não é um evento de E e é um evento de S e o ultimo registo é na hora 15:12:11 com o evento de S. E não é o que aparece na minha query. o calculo to total de horas deveria ser feito no primeiro evento S e não quando ele faz erradamente o segundo evento S.

Quanto ao código SQL que me apresentaste noutro tópico está bem feito, apenas deveria calcular logo quando faz o evento de saída, porque se fizermos as contas ele mostra o valor do total de horas desse registo e não do registo em que está a ser mostrado.

Não percebo o que se está a passar aqui :(

smzb.png

id3m.png

//A MINHA QUERY SUPOSTAMENTE DEVOLVER O ULTIMO REGISTO DE UM DADO COLABORADOR ATRAVES DA LEITURA DO RFID
$queryE = mysql_query("SELECT MAX(id_transacao) AS ULTIMO, rfid, data, evento FROM transacoes_bmw WHERE rfid=".$rfid." and data=timestamp(current_date());");
$eventoE= mysql_fetch_array($queryE);
//echo $eventoE['evento'];
   echo '<img src="ok.png" width="50" height="50">';
   echo '<br>';
   echo "<font color='green' size='5'>Operação Realizada com Sucesso!!!</font>";
//SE O NUMERO RFID NAO EXISTIR ELE INSERE COMO ENTRADA
if ($eventoE['rfid'] == 0){

	mysql_query("insert into transacoes_bmw ...E");

}

//DE ACORDO COM A QUERY SE O ULTIMO EVENTO DO DADO NUMERO RFID FOR UMA ENTRADA(E) ENTAO ELE VAI INSERIR UMA SAIDA.
elseif ($eventoE['evento'] == 'E'){

	mysql_query("insert into transacoes_bmw ...S");

}
//DE ACORDO COM A QUERY SE O ULTIMO EVENTO DO DADO NUMERO RFID FOR UMA SAIDA(S) ENTAO ELE VAI INSERIR UMA ENTRADA.
elseif ($eventoE['evento'] == 'S'){

	mysql_query("insert into transacoes_bmw ...E");

}

Edited by JoaoVM

Share this post


Link to post
Share on other sites
JoaoVM

Consegui colocar a funcionar, alterei o modo como chamo o campo do rfid, em vez de declarar a variável $rfid, coloquei diretamente $_POST['rfid'] assim passando a funcionar.

Continuo apenas com o problema de ele não me fazer o calculo no local certo do total de horas, deve ser um problema de estrutura que vou olhar mais atentamente.

//TINHA A VARIAVEL DECLARADA AQUI DO $_POST['RFID']
$rfid = $_POST['rfid'];
//RETIREI O MAX DO SELECT INICIAL E COLOQUEI COM UMA SUBQUERY,
$queryE = mysql_query("SELECT id_transacao rfid, data, evento FROM transacoes_bmw WHERE rfid=".$_POST['rfid']." and data=timestamp(current_date()) AND id_transacao=(SELECT max(id_transacao) FROM transacoes_bmw);");
$eventoE= mysql_fetch_array($queryE);
//O RFID COM A VARIAVEL $RFID NAO ESTAVA A FUNCIONAR NAO PERCEBO PORQUE MAS DIRETAMENTE COM O $_POST JÁ CONSEGUI

Share this post


Link to post
Share on other sites
JoaoVM

Parece que ainda não e desta, quando insiro apenas um colaborador ele faz tudo certo, quando alterno entre colaboradores ele falha nos pontos que se pode ver na imagem..

cotj.png

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.