Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-08-2004
Telemaco Telemaco is offline
Miembro
 
Registrado: feb 2004
Posts: 50
Poder: 21
Telemaco Va por buen camino
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 );
  ?>
Pero me da problemas, ya que siempre me dice que el segundo fichaje ya lo he hecho y es mentira, creo que el problema es que no he utilizado la sentencia correcta para evaluar si la expresión es cierta o no (es decir, si no hay ninguna anotación en "h2" pues entonces deberia devovler un nulo la variable $f2, pero no es asi).

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.
Responder Con Cita
  #2  
Antiguo 19-08-2004
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 04:18:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi