Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/03/2011, 17:57
Ojopex2
 
Fecha de Ingreso: abril-2010
Mensajes: 112
Antigüedad: 14 años, 1 mes
Puntos: 2
Grabar varios registros dependiendo de los checkbox marcados true.

Hola amigos, tengo una duda

El panorama es el siguiente, trabajo con php y espero que corresponda al foro este.
Tengo la siguiente base de datos.

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `area_trabajo` (
  2.   `id_area_trabajo` int(11) NOT NULL,
  3.   `area_trabajo` varchar(45) DEFAULT NULL,
  4.   PRIMARY KEY (`id_area_trabajo`)
  5.  
  6. --
  7.  
  8. CREATE TABLE IF NOT EXISTS `tareas_area_trabajo` (
  9.   `tareas_id_tareas` int(11) NOT NULL,
  10.   `area_trabajo_id_area_trabajo` int(11) NOT NULL,
  11.   PRIMARY KEY (`tareas_id_tareas`,`area_trabajo_id_area_trabajo`),
  12.   KEY `fk_tareas_has_area_trabajo_tareas1` (`tareas_id_tareas`),
  13.   KEY `fk_tareas_has_area_trabajo_area_trabajo1` (`area_trabajo_id_area_trabajo`)
  14.  
  15. --
  16.  
  17. CREATE TABLE IF NOT EXISTS `tareas_esp` (
  18.   `id_tareas` int(11) NOT NULL AUTO_INCREMENT,
  19.   `tarea` varchar(45) DEFAULT NULL,
  20.   PRIMARY KEY (`id_tareas`)
  21.  
  22. --
  23. CREATE TABLE IF NOT EXISTS `tipos_maquinas` (
  24.   `id_tipos_maquinas` int(11) NOT NULL,
  25.   `tipo_maquina` varchar(45) DEFAULT NULL,
  26.   PRIMARY KEY (`id_tipos_maquinas`)

En el fondo es una lista de tareas, a la que se le relaciona con el tipo de máquina (reloj) a la que pertenece (reloj, cronometro..etc) y estas tareas tambien pertenecen a grupos de áreas de trabajos (basica, mecanismo, pulsera, etc)

Entonces lo que en teoría tengo que hacer para agregar una tarea es primero insertar el id y nombre de la tarea. tomar el id de esa tarea creada e insertar en las relaciones de area y tipo de maquina, entonces por ejemplo, varios tipos de reloj pueden tener la misma tarea, por ejemplo, las reparaciones bases aplica para todos pero la reparacion de mmm aguja de cronografo aplica solo a los crono. Y así.

Bueno para insertar más de 1 registro a la vez, ya que pueden ser 6 al mismo tiempo en el caso que sean todos, ejecuto la siguiente sentencia:

Código MySQL:
Ver original
  1. INSERT INTO tipo_maquina_area (id_tipo_maquina, id_area, id_tarea)
  2. VALUES ($qtz, $area, $tarea_id),
  3. ($auto, $area, $tarea_id),
  4. ($cronoqtz, $area, $tarea_id),
  5.  ($cronoauto, $area, $tarea_id),
  6.  ($electro, $area, $tarea_id),
  7. ($otro, $area, $tarea_id);

Pero eso requiere que todos los checkbox que estoy marcando para seleccionar a que tipos de relojes pertenece estén todos marcados. Al dejar sin marcar solo uno sale el siguiente error

Notice: Undefined index: chkTipo6 in C:\xampp\htdocs\sav11neo\mantenedores\tareas\tarea s.funciones.php on line 163.
Cannot add or update a child row: a foreign key constraint fails (`mulleryc_sav`.`tipo_maquina_area`, CONSTRAINT `tipo_maquina_area_ibfk_1` FOREIGN KEY (`id_tipo_maquina`) REFERENCES `tipos_maquinas` (`id_tipos_maquinas`) ON DELETE CASCADE ON UPDATE CASCADE)


Y asi con los que no se marcan, por un lado, el problema del sql, como hacer para que no inserte si el valor es 0 en el checkbox.
El error de undefined index, es porque lo dejo en 0, el checkbox de por si el valor es el value del tipo de reloj.

Entonces no se cómo hacer la sentencia, o si es problema de php.

Eso, espero que se entienda la problemática y me puedan aconsejar.

Gracias de antemano,

Saludos.