FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Evaluar una consulta o un campo.
Hola estoy intentado pasar una aplicacion que hice en delphi a php, en la cual debe poder fichar cada empleado cada vez que entra o sale de la oficina, en principio la entrada y salida matutina y la entrada y salida vespertina. Para ello he utilizado el servidor Sql Server 2000 que tengo instalado y el php5, junto con Apache.
Tengo una tabla que se llama fichaje con las siguientes columnas: USER, FECHA, H1, H2, H3, H4 , TF user- > usuario que ficha Fecha -> el dia que lo hace h1,h2,h3,h4 -> cada una de las horas a las que se controla el fichaje Tf -> tipo de fichaje que realiza (jornada normal, jornada reducida...etc) mi problema es el siguiente habia pensado en controlar el fichaje de la siguiente manera: Código:
<?php // variables globales $usr = $HTTP_GET_VARS[ 'usr' ]; $pwd = $HTTP_GET_VARS[ 'pwd' ]; $tf = $HTTP_GET_VARS[ 'TFichajes' ]; // variables locales $fecha= date("j-n-Y"); $hora= date("h:i"); echo ( "$usr,$pwd,$tf"); // conexión con el servidor atraves de un ODBC $conex = @odbc_connect( "localserver", "" ,"", SQL_CUR_USE_ODBC ); if ( ! $conex ) { echo (" ERROR 1: No contesta el servidor. <p>"); return; } $consulta = " select * from Fichaje where niwin = '$usr' and fecha = '$fecha'"; $consult = @odbc_exec( $conex, $consulta ); $rdo_consulta = @odbc_result ( if ( ) { echo ( "Primer fichaje del dia" ); // primer fichaje $f1= "insert into Fichaje values ('$usr','$fecha','$hora','NULL','NULL','NULL','$tf')"; $ejec_f1 = @odbc_exec( $conex, $f1 ); if ( ! $ejec_f1) { echo ("ERROR 2: Resultado vacio en la consulta <p>"); return; } odbc_free_result ( $ejec_f1 ); } else { // ya ha fichado almenos una vez echo ("Ya has fichado una vez, almenos. <br>"); $f2 = " select * from Fichaje where niwin = '$usr' and fecha = '$fecha' and h1 is not null "; echo ("$f2<br>"); $ejec_f2 = @odbc_exec ( $conex, $f2); if ( ! $ejec_f2 ) { // no ha fichado por segunda vez $ficha = " update Fichaje set h2 = '$hora' where niwin = '$usr' and fecha = '$fecha' "; echo ("$ficha<br>"); $ejec_ficha = @odbc_exec( $conex, $ficha ); if ( ! $ejec_ficha) { echo ("ERROR FICHAJE: Error al fichar por segunda vez <p>"); return; } odbc_free_result ($ejec_ficha); odbc_free_result ( $ejec_f2 ); } else { // ha fichado como minimo 2 veces hoy echo (" Ya has fichado como minimo dos veces <br>"); $f3 = " select * from Fichaje where niwin = '$usr' and fecha '$fecha' and h2 is not null "; $ejec_f3 = @odbc_exec ($conex, $f3); if ( ! $ejec_f3 ) { // ha fichado 2 veces, modifico el fichaje para añadir el tercer fichaje $ficha3 = "update Fichaje set h3 = '$hora' where niwin = '$usr' and fecha = '$fecha' "; $ejec_ficha3 = @odbc_exec ( $conex, $ficha); if ( ! $ejec_ficha3 ) { echo ("ERROR FICHAJE: Error al fichar por tercera vez <p>"); return; } odbc_free_result ($ejec_f3); } else { // si llego aqui es pq solo me queda por hacer un ultimo fichaje echo ("Ya has fichado 3 veces y solo te queda esta ultima <br>"); $ficha4 = "update Fichaje set h5 = '$hora' where niwin = '$usr' and fecha = '$fecha' "; $ejec_ficha4 = @odbc_exec ( $conex, $ficha ); if ( ! $ejec_ficha4 ) { echo (" ERROR FICHAJE: Error al fichar por cuarta vez <p>"); return; } odbc_free_result ($ejec_ficha4); } } } // liberación de los cursores y cierre de la conexión odbc_free_result ( $consulta); odbc_free_result ( $f1 ); odbc_close( $conex ); ?> Por lo cual me gustaria que me ayudariais, odbc_result es una opción mejor para controlar el valor de un campo en un momento determinado? creeis que deberia cambiar la forma de controlar los fichajes? bueno cualquier ayuda sera bien recibida. Gracias y perdonar por lo largo del hilo. |
#2
|
||||
|
||||
Yo diría que ese if ( ) que tienes para que te entre en el primer fichaje del día te está traicionando, prueba a cambiarle esa condición nula por otra que fuerce su evaluación.
__________________
Saludos Emilio |
|
|
|