JoaoVM 0 Denunciar post Postado Novembro 4, 2013 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. http://prntscr.com/21txxs 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... 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 Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Novembro 4, 2013 --- ops, editei, nao li direito, já vejo uma saida pra ti Compartilhar este post Link para o post Compartilhar em outros sites
JoaoVM 0 Denunciar post Postado Novembro 5, 2013 Vejamos alterei o meu código mas alterei as condições, e 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 do total de horas deveria ser feito no primeiro evento S e não quando ele faz erradamente o segundo evento S. Vejamos, ele 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 //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 ENTRADAif ($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"); } ninguém? Alguém consegue dar uma ajuda para resolver o meu problema? Compartilhar este post Link para o post Compartilhar em outros sites
JoaoVM 0 Denunciar post Postado Novembro 8, 2013 Pessoal, já descobri, afinal a condição está bem feita, o que está mal era a query que devolve o ultimo registo do colaborador, em vez de fazer subquery fazer: ... WHERE rfid=".$_POST['rfid']" ORDER BY data, hora DESC LIMIT 1 ;) Compartilhar este post Link para o post Compartilhar em outros sites