[SOLUCIONADO] Problema imagen en ej_fijo y ef_upload

Hola. Tengo un problema al insertar una imagen. Tengo varios registros, y al cargar (o editar) una imagen a uno de los registros, me actualiza en todos.

Este es el código del ci

  function conf__form(final_ei_formulario $form)
  {
    if (isset($this->s__datos['form'])) {
      $form->set_datos($this->s__datos['form']);
    } else {

      if ($this->cn()->hay_cursor()) {
         $datos = $this->cn()->get_tipos_zonas(); 
         $this->s__datos['form'] = $datos;
        $form->set_datos($datos);
      } else {
        $this->pantalla()->eliminar_evento('eliminar');
      }
    }

  }
	function evt__form__modificacion($datos)
	{
		$this->s__datos['form'] = $datos;
		$this->cn()->set_tipos_zonas($datos);
	}

Este es el código del cn


	function get_tipos_zonas()
	{
		$fp_imagen = $this->dep('dr_tiposdezonas')->tabla('dt_tipos_zonas')->get_blob('mapa');

		$datos = $this->dep('dr_tiposdezonas')->tabla('dt_tipos_zonas')->get();

		if (isset($fp_imagen)) {
			$temp_nombre = 'mapa' . $datos['id_tipo_zona'];

			$temp_archivo = toba::proyecto()->get_www_temp($temp_nombre);

			$temp_imagen = fopen($temp_archivo['path'], 'w');
			stream_copy_to_stream($fp_imagen, $temp_imagen);
			fclose($temp_imagen);
			$tamanio_mapa = round(filesize($temp_archivo['path']) / 1024);

			$datos['mapa_vista'] = "<img src = '{$temp_archivo['url']}' alt=\"Imagen\" WIDTH=180 HEIGHT=150 >";
			$datos['mapa'] = 'Tamanio foto actual: '.$tamanio_mapa.' KB';
		} else {
			$datos['mapa'] = null;
		}


		return $datos;
	}



	function set_tipos_zonas($datos)
	{
		$this->dep('dr_tiposdezonas')->tabla('dt_tipos_zonas')->set($datos);
		 if (is_array($datos['mapa'])) {

			$temp_archivo = $datos['mapa']['tmp_name'];
			$fp = fopen($temp_archivo, 'rb');
			$this->dep('dr_tiposdezonas')->tabla('dt_tipos_zonas')->set_blob('mapa', $fp);
		}
	}

Adjunto una captura de los elementos del formulario


Captura de pantalla de 2017-05-16 13:50:03.png

Captura de pantalla de 2017-05-16 13:50:03.png

Hola Mariano,

me pasas una imagen de la definicion del DR?. La tabla ‘tipos_zonas’ es la única en la relacion?.. cuantos registros maneja?.

Es extraño lo que mencionas, ya que no veo que le estes indicando un id de fila especifico al hacer el set_blob, lo que indica que se esta usando el cursor interno para determinar la fila, te fijaste en el log si las SQL ejecutadas estaban mal filtradas?.

Saludos

Analizando con mas atención, el problema surge al ejecutarse el evento cancelar. No se están reseteando las variables (supongo que debe ser temp_archivo).

Se me ocurrió algo así, pero no funciono

En el ci()


  function evt__cancelar()
  {
    unset($this->s__datos);
    $this->cn()->resetear_imagen();
    $this->set_pantalla('pant_inicial');
  }

En el cn()

	function resetear_imagen()
	{
		unlink($temp_archivo);
		unset($temp_archivo);
		$this->dep('dr_tiposdezonas')->tabla('dt_tipos_zonas')->set_blob('mapa', null);
	}

Todo solucionado. En el cn, tenia mal la función cargar_tipo_zona