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

 
 
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
 



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 12:53:33.


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