Codeigniter - Ayuda con la Carga de Archivos

 
Vista:
sin imagen de perfil

Ayuda con la Carga de Archivos

Publicado por Alejandro (2 intervenciones) el 01/08/2017 11:43:07
Hola, primero gracias por dejarme participar de este foro.

Tengo un formulario el que utilizo para cargar los usuarios de una aplicación, en el cual se piden un montón de datos y por ultimo agregue la función do_upload para cargar la foto del mismo, el tema es que no quiero que sea obligatorio, y el problema surge cuando creo un usuario sin cargarle la imagen, o sea si completo los campos y cargo la imagen al darle crear sale todo ok, pero si no pongo una imagen me sale el error:

"You did not select a file to upload."

El campo en la bd es photo y la version de code igniter que estoy utilizando es 3.1
Esta es mi vista:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<form action="<?php echo current_url(); ?>" id="formCliente" method="post" enctype="multipart/form-data">
 
<div class="box-body">
	<div class="row">
		<div class="col-md-4">
		<div class="form-group">
			<label for="nome">Nombre <span style="color:red;">*</span></label>
			<input id="nome" type="text" name="nome" class="form-control" placeholder="Ingrese Nombre del Técnico/Responsable/Usuario" value="<?php echo set_value('nome'); ?>"  />
		</div>
	</div>
.....
y por ultimo
<div class="col-md-6">
	<div class="form-group">
		<div class="btn btn-default btn-file">
			<i class="fa fa-paperclip"></i> Foto del Usuario
			<div class="controls">
			<input name="userfile" type="file" size="30" id="imagen" value="" >
 
		</div>
		<p class="help-block">Sube una imagen.</p>
		</div>
	</div>
	</div>
</div>
<div class="box-footer">
	<button type="submit" class="btn btn-success pull-right"><i class="fa fa-plus fa fa-white"></i>Agregar</button>
	<a href="<?php echo site_url('panel/admin/usuarios') ?>" id="" class="btn btn-default pull-left"><i class="fa fa-reply"></i> Volver</a>

Este es mi Control
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
function do_upload(){
 
	$this->load->library('upload');
	$image_upload_folder = FCPATH . 'assets/img/users/';
	if (!file_exists($image_upload_folder)) {
		mkdir($image_upload_folder, DIR_WRITE_MODE, true);
	}
	$this->upload_config = array(
		'upload_path'   => $image_upload_folder,
		'allowed_types' => 'png|jpg|jpeg|bmp|JPEG||PNG||JPG||pdf||BMP||PDF',
		'max_size'      => 2048,
		'remove_space'  => TRUE,
		'encrypt_name'  => TRUE,
	);
	$this->upload->initialize($this->upload_config);
	if (!$this->upload->do_upload()) {
		$upload_error = $this->upload->display_errors();
		print_r($upload_error);
		exit();
	} else {
		$file_info = array($this->upload->data());
		return $file_info[0]['file_name'];
	}
}
 
function adicionar(){
 
	$this->load->library('form_validation');
	$this->data['custom_error'] = '';
 
	if ($this->form_validation->run('usuarios') == false)
	{
		$this->data['custom_error'] = (validation_errors() ? '<div class="alert alert-danger">'.validation_errors().'</div>' : false);
 
	} else
....

Si alguien me puede dar una mano con este problema se lo agradecería de corazón, desde ya muchas gracias por su tiempo.
Atte
Alejandro
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda con la Carga de Archivos

Publicado por elddenmedio (4 intervenciones) el 01/08/2017 18:29:05
Hola

Lo primero es
-El form lo tienes que mandar a tu function
1
adicionar()
-Despues de validar
1
trim|required|etc
-Cuando estes en el la parte de que todas las validaciones fueron correctas agrega esto
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public function adicionar(){
//config array
$config = array(array(...));
$this->form_validation->set_rules($config);
 
if ($this->form_validation->run() === FALSE){
    //error control
}
else{
    if( $_FILES['userfile']['name'] == "" && $_FILES['userfile']['size'] == 0) {
        $this->_insert_user();
    }
    else{
        $upload_config = array(
                                          'upload_path'      => $image_upload_folder,
                                          'allowed_types'   => 'png|jpg|jpeg|bmp|JPEG||PNG||JPG||pdf||BMP||PDF',
                                          'max_size'          => 2048,
                                          'remove_space'  => TRUE,
                                          'encrypt_name'   => TRUE,
                                        );
 
        $this->upload->initialize($this->upload_config);
 
        $this->_insert_user($this->upload->data()->file_name);
    }
}
}
 
private function _inseret_user( $file_name = '' ){
    //creamos variables con el nombre del form y les asignamos su valor
    foreach($this->input->post() as $item => $value){
        ${$item} = $value;
    }
 
    if( ! empty($file_name)){
        //creamos logica de guardar info con nombre de imagen
    }
    else{
        //creamos logica de guardar info sin imagen
    }
}

Espero te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con la Carga de Archivos

Publicado por Alejandro (2 intervenciones) el 03/08/2017 16:40:09
Hola, gracias por tu ayuda, te comento tengo la función de adicionar y la de do_upload, por separado, para validar los datos de adicionar uso el form_validation.
Intente hacer lo que me paso pero no logro hacerlo funcionar.
Gracias por su ayuda, aun estoy luchando con el problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar