Foros del Web » Programando para Internet » PHP »

guardar un dato si se cumple una condicion

Estas en el tema de guardar un dato si se cumple una condicion en el foro de PHP en Foros del Web. buenas tengo un fallo en mi codigo! resulta que estoy guardando en mi BD: 'cedula', 'fechaActual', hora_entrada, 'hora_salida' OJO: - Primero guardo: cedula, fechaActual, hora_entrada ...
  #1 (permalink)  
Antiguo 29/10/2009, 12:49
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
Exclamación guardar un dato si se cumple una condicion

buenas tengo un fallo en mi codigo!

resulta que estoy guardando en mi BD: 'cedula', 'fechaActual', hora_entrada, 'hora_salida'

OJO:


- Primero guardo: cedula, fechaActual, hora_entrada

- Segundo: la 'hora_salida' si al ingresar el nº de cedula' cumple con la condicion de ser igual a la ('cedula' y la 'fechaActual ingresada' ).

todo esto se guarda normal....PERO cuando deseo hacer la misma operacion con otra fecha (AL DIA SIGUIENTE) NO GUARDA DE NUEVO: (cedula, fechaActual, hora_entrada) POR QUE EL CAMPO 'cedula' es clave primaria.

el campo fechaActual tambien lo tengo como calve primaria


les agradeceria en gran manera su generosa AYUDA!!!

Última edición por sinai21; 29/10/2009 a las 13:06
  #2 (permalink)  
Antiguo 29/10/2009, 12:51
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: guardar un dato si se cimple una condicion

hace una condicion si ya existe que aga un UPDATE en ves de INSERT ?
  #3 (permalink)  
Antiguo 29/10/2009, 12:55
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
no te entiendo!

mi codigo es para guardar la sistencia de X empleados y necesito que se guarde dia a dia la asistencia.

buenas sera posible que pueda guardar un campo varias veces si es primari key, pero hay otro campo clave primaria

'cedula' primari key

'fechaactual' primari key

tengo problemas al insertar datos en mi BD ya que tengos 2 campos primary key y hambos se repiten!!

debo guardar la 'cedula' 'fecha_actual' y 'hora de entrada'

luego guardo la 'hora de salida' si corresponde con la 'cedula' y 'fecha_actual'


EL PROBLEMA ESTA, que si quiero hacer lo mismo para otro dia NO LO HACE YA QUE NO SE PUEDEN REPETIR LOS CAMPOS 'cedula' 'fecha_actual' .

HE INTENTADO CON INDICES y nada de NADA

por favor NECESITO su AYUDA! GRACIAS

alguien que me ayude

tengo 2 campos primary key : cedula , fecha_Actual ,ambos los necesito repetir,
es decir, cuando una perosna guarda su hora de entrada , hora de salida y fecha_Actual al ingresar su 'cedula'


quisiera saber si uno puede colocar el campo 'cedula' que es primary key en AUTO_INCREMENT, esto lo pregunto porque tengo problemas cuando es otro dia y quiero guardar mi asistencia ingresando mi 'cedula', ya que no lo hace porque no se puede repetir


por favor ayuda, se lo agradeceria muchisimo

Última edición por GatorV; 29/10/2009 a las 15:17
  #4 (permalink)  
Antiguo 29/10/2009, 15:10
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años
Puntos: 7
Respuesta: guardar un dato si se cumple una condicion

Cita:
Iniciado por sinai21 Ver Mensaje
alguien que me ayude

tengo 2 campos primary key : cedula , fecha_Actual ,ambos los necesito repetir,
es decir, cuando una perosna guarda su hora de entrada , hora de salida y fecha_Actual al ingresar su 'cedula'


quisiera saber si uno puede colocar el campo 'cedula' que es primary key en AUTO_INCREMENT, esto lo pregunto porque tengo problemas cuando es otro dia y quiero guardar mi asistencia ingresando mi 'cedula', ya que no lo hace porque no se puede repetir


por favor ayuda, se lo agradeceria muchisimo
emmmm buenas
primero que todo es raro poner un campo celula y un cam
po fecha en el mismo lugar
yo creo que los datos del personal deberian estar en otra tabla y crusar un id autonumerico que seria tu pka con la id del personas y le fecha
asi tendrias el id del personas que apuntaria a la pèrsona y le fecha con su hora, esto segun mi vision del tu problema
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #5 (permalink)  
Antiguo 29/10/2009, 15:11
Avatar de darkasecas  
Fecha de Ingreso: marzo-2005
Ubicación: SantaCata, NL, Mexico
Mensajes: 1.553
Antigüedad: 19 años, 1 mes
Puntos: 77
Respuesta: guardar un dato si se cumple una condicion

Esta definida correctamente tu llave primaria con los dos campos? porque hice una prueba con una tabla con los campos qe mencionas, con llave primaria (cedula, fecha), grabe un registro con una cedula y una fecha, luego grabe otro con la misma cedula y otra fecha, y se guardo sin problemas.

Si ejecutas el insert en phpmyadmin marca algun error?
  #6 (permalink)  
Antiguo 30/10/2009, 07:04
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
Exclamación Respuesta: guardar un dato si se cumple una condicion

Buenas !!!

el siguiente codigo funciona bien en un solo sentido, ya que puedo guardar la asistencia correctamente, pero al dia siguiente cuando quiero hacer lo mismo no guarda la asistencia porque la cedula ya existe.

ojo:
los campos 'UsuarioFecha' y 'cedula' son clave primaria, he intentado colocando indices, con un campo id adicional que lo coloque tambien como clave primaria junto a los otros dos, pero NADA QUE PUEDO REGISTRAR LA ASISTENCIA DE OTRO DIA.
POR FAVOR ALGUIEN QUE ME AYUDE, ESTARIA AGRADECIDA, gracias!!
  #7 (permalink)  
Antiguo 30/10/2009, 07:16
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años
Puntos: 7
Respuesta: guardar un dato si se cumple una condicion

Cita:
Iniciado por sinai21 Ver Mensaje
Buenas !!!

el siguiente codigo funciona bien en un solo sentido, ya que puedo guardar la asistencia correctamente, pero al dia siguiente cuando quiero hacer lo mismo no guarda la asistencia porque la cedula ya existe.

ojo:
los campos 'UsuarioFecha' y 'cedula' son clave primaria, he intentado colocando indices, con un campo id adicional que lo coloque tambien como clave primaria junto a los otros dos, pero NADA QUE PUEDO REGISTRAR LA ASISTENCIA DE OTRO DIA.
POR FAVOR ALGUIEN QUE ME AYUDE, ESTARIA AGRADECIDA, gracias!!
insito en vez de poner las 2 como pkas deberias crear una clave compuesta, porque una pka no se puede repetir osea pones el rut y ese no puede repetir.

insisto que la informacion del personal la deberias poner en otra tabla y solo crear una afk con la id del personal mas la hora
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #8 (permalink)  
Antiguo 30/10/2009, 07:17
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 4 meses
Puntos: 20
Respuesta: guardar un dato si se cumple una condicion

por que tenes clave primaria la celula???

por lo que entiendo, vos necesitas repetir varias veces la celula,

en el caso de que no quieras modificar mucho tu tabla crea un nuevo campo idasistencia, y colocalo como clave primaria y a celula dejalo libre para repetirlo la cantidad de veces:

se entiende???
  #9 (permalink)  
Antiguo 30/10/2009, 07:21
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: guardar un dato si se cumple una condicion

Esta demas decir que los campos primarios no puede duplicarse.


Creo que tu problema esta en el diseno de tus tablas.


Lo que te sigiero que que hagas una tabla donde tengas todos tus usuarios.

Ejemplo


Tabla usuarios

Cedula | Nombre | Apellido | Departamento


En esta tabla de Usuarios puedes creas el campo Cedula como llave primaria, haci te aseguras de que no exista datos concurrentes dentro de la tabla de usuarios.


Luego creas una tabla de asistencia


Num_Reg | Cedula | Fecha_Actual | Hr_Entrada | Hr_Salida


En esta tabla la llave primaria es Num_Reg la cual la colocas si quieres como auto Increment.

Ojo: Cedula no puede ser una llave primaria en este caso, por que su valor va hacer duplicado.
Todo los dias.

Los campos candidatos aqui son
Num_Reg

En la tabla asistencia es que vas a insertar todos tus datos.


Luego si deseas recuperar la informacion de un usuario como por ejemplo todas las entradas de Juan Perez desde php realizas un Inner Join con las dos tablas y listo.
  #10 (permalink)  
Antiguo 30/10/2009, 07:32
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
De acuerdo Respuesta: guardar un dato si se cumple una condicion

MUCHISIMAS AGRACIAS, MUY EXELENTE TU EXPLICACION, PONDRE EN PRACTICA TU SUGERENCIA.
  #11 (permalink)  
Antiguo 30/10/2009, 07:36
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años
Puntos: 7
Respuesta: guardar un dato si se cumple una condicion

plop te lo vienen diciendo hace rato -.-
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:
  #12 (permalink)  
Antiguo 30/10/2009, 07:48
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
Exclamación Respuesta: guardar un dato si se cumple una condicion

gracias a ti por tu sugerencia tambien!!


es que no te entendia mucho, un poquito nada mas, estaba confundida.


ahora hize lo que me dijiste pero igual, no vuelve a guardar la asistencia cuando ingreso un nº de 'cedula', no se si mi problema tiene que ver con el codigo.


esto esparte del codigo:
Código PHP:
$selec_tabla=("select * from asistencia where UsuarioFecha='$UsuarioFecha' and cedula='$cedula' and  h_entrada='$h_entrada' ");
$selection=mysql_query($selec_tabla);


if(
$selection==0){

$insert=("insert into asistencia(UsuarioFecha,cedula,h_entrada) values('$UsuarioFecha','$cedula','$h_entrada')"); //Ejecuta el Query en la Base de Datos
$result_entrada=mysql_query($insert) or die(mysql_error());

            echo 
"Asistencia aceptada";
            
        } else{    
        
                        
$select_verificar=("select * from asistencia where cedula='$cedula' and UsuarioFecha='$UsuarioFecha'");
$result_salida=mysql_query($select_verificar);

        if (
$result_salida 0){
        
$guardar_salida=("update asistencia set h_salida='$h_salida' where cedula='$cedula' and UsuarioFecha='$UsuarioFecha'");
$result_final=mysql_query($guardar_salida) or die(mysql_error()); 

no se que estoy haciendo mal, no tengo experiencia en esto.

sin mas gracias
  #13 (permalink)  
Antiguo 30/10/2009, 07:59
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 4 meses
Puntos: 20
Respuesta: guardar un dato si se cumple una condicion

si has creado un nuevo id, debes ponelo en el codigo, debe ser por eso que no se te da de alta.
  #14 (permalink)  
Antiguo 30/10/2009, 08:02
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: guardar un dato si se cumple una condicion

disculpa! como podria hacer referencia al campo id en mi consulta.

gracias!
  #15 (permalink)  
Antiguo 30/10/2009, 08:11
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 4 meses
Puntos: 20
Respuesta: guardar un dato si se cumple una condicion

mira hagamos unas cosa, pon la estructura de tu bd, para poder ayudarte y no andar adivinando que es lo que tenes, te parece???
  #16 (permalink)  
Antiguo 30/10/2009, 08:16
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: guardar un dato si se cumple una condicion

estos son los campos de mi tabla ASISTENCIA:

id_usuario (auto increment) , UsuarioFecha , cedula, h_entrada, h_salida




gracias por tu gentileza!!
  #17 (permalink)  
Antiguo 30/10/2009, 08:19
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: guardar un dato si se cumple una condicion

Sinai21

Sigueme la idea.




Esto es solo a modo de ejemplo
Ya luego usted lo reemplaza con los campos validos de su tabla.

Problema:
Deseo insertar hr_entrada, cedula , fecha cuando el usuario no exista en una fecha determinada
y si existe deseo actualizar el campo Hr_salida de ese usuario.


Posible solucion:

Código PHP:
Ver original
  1. // Si es por primera vez que entra el usuario en el dia de hoy esta consulta le devolvera cero registros encontrados.
  2.     $sql = mysql_query("select * from asistencia where (Cedula = '$cedula') and (Fecha= '$Fecha' and Hr_entrada < $hr_Actual )")or die(mysql_error());
  3.    
  4.  
  5.     if(mysql_num_rows($sql)>0){
  6.         // Si la consulta devuelve dato entonces quiere decir que ese usuario entro en el dia de hoy , solo tengo que actualizar su campo con la hr de salida.
  7.        
  8.         mysql_query("update asistencia Hr_Salir = '$hr_Actual' where Fecha=$Fecha and Cedula='$Cedula'");
  9.    
  10.    
  11.     }else{
  12.         // En el caso de que ese usuario de que el usuario no entro en el dia de hoy , inserto un nuevo dato.
  13.     mysql_query("insert into asistencia(Fecha,Cedula,Hr_entrada)values('$Fecha','$Cedula','$hr_Actual'");
  14.    
  15.     }


La variable $hr_Actual la obtiene con la hora del momento en que estas insertando el dato

Algo como

Código PHP:
Ver original
  1. $hr_Actual = date("H:i:s");

Última edición por gjx2; 30/10/2009 a las 08:27 Razón: Explicacion de la VARIABLE $hr_Actual
  #18 (permalink)  
Antiguo 30/10/2009, 08:31
Avatar de sinai21  
Fecha de Ingreso: octubre-2009
Mensajes: 89
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: guardar un dato si se cumple una condicion

Le doy gracias a Dios primeramente! y a todos los que se han tomado su tiempo para leer y dar sugerencia a mis preguntas en este foro.


me fue de mucha ayuda todas sus sugerencia. una ves mas gracias


exelente ayuda


hasta luego
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:02.