Salvar dados do formulario sem obrigacao de atualizar a imagem

28/04/2016

0

Tenho um formulario de cadastro e este formulario tem uma imagem de perfil do usuario cadastrado.
O insert e update da imagem estao funcionando perfeitamente.
O problema esta em quando atualizo qualquer dado que não seja a imagem, o sistema nao salva, retornando erro de upload de imagem.
O formulario nao esta aceitando o input file vazio e quer atualizar a imagem de qualquer forma.
O que eu quero: Editar e Salvar CPF ou NOME. Manter IMAGEM que ja esta cadastrado sem obrigacao de altera-la

Parte do código HTML - PHP - CSS - JAVASCRIPT
<div class="collapse in accordion-body" id="collapseGOne"><!--Dados Pessoais-->
<div class="widget-content ">
<table>
         <tbody>
         <tr>
         <td style="width: 14%">
                 <?php if (!empty($result->url_foto)) { ?>
                         <img id="avatar" src="<?php echo $result->url_foto; ?>" >
                 <?php }
                 else
                 {
                         return;
                 }
                 ?>
                 </div>
         </td>
<td>
<div class="span12" style="padding: 1%">
         <div class="span4">
         <?php echo form_hidden('idColaboradores',$result->idColaboradores) ?>
                 <label for="nome">Nome<span class="required">*</span></label>
                 <input id="nome" class="span12" type="text" name="nome" value="<?php echo $result->nome; ?>" />
         </div>
         <div class="span2">
                 <label for="sexo">Sexo<span class="required">*</span></label>
                 <select name="sexo" id="sexo" class="span12" value="">
                         <option <?php if($result->sexo == 'Masculino'){echo 'selected';} ?> value="Masculino">Masculino</option>
                                 <option <?php if($result->sexo == 'Feminino'){echo 'selected';} ?> value="Feminino">Feminino</option>
                 </select>
         </div>
</div>
<div class="span12" style="padding: 1%; margin-left: 0">
         <div class="span2">
                 <label for="cpf">CPF<span class="required">*</span></label>
                 <input id="cpf" class="span12 cpf" type="text" name="cpf" placeholder="000.000.000-00" value="<?php echo $result->cpf; ?>" />
         </div>
         <div class="span2">
                 <label for="rg">RG<span class="required">*</span></label>
                 <input id="rg" class="span12" type="text" name="rg" value="<?php echo $result->rg; ?>" />
         </div>
         <div class="span2">
                 <label for="data_nascimento">Data Nascimento<span class="required">*</span></label>
                         <input id="data_nascimento" class="span12" type="date" name="data_nascimento" value="<?php echo $result->data_nascimento; ?>" />
         </div>
</div>
</td>
                 </tr>
         </tbody>
</table>
</div>
<div class=""><!--input Foto-->
<label for="" class="control-label"><span class="required">Foto*</span></label>
<div class="controls">
         <input type="file" onchange="preview(this)" name="userfile" /> (.png, .jpg, .jpeg)
</div>
</div><!--input Foto-->

</div><!--Dados Pessoais-->


CSS
#avatar {
width: 180px;
height: 180px;
background-position: center center;
background-size: cover;
border-radius: 0;
-moz-border-radius: 0px;
-webkit-border-radius: 0px;
-webkit-box-shadow: 0 0 1px 1px rgba(0, 0, 0, .3);
display: inline-block;
}


SCRIPT
function preview(fileInput) {
var files = fileInput.files;
for (var i = 0; i < files.length; i++) {                
         var file = files[i];
         var imageType = /image.*/;     
         if (!file.type.match(imageType)) {
                 continue;
         }              
         var img=document.getElementById("avatar");             
         img.file = file;
         var reader = new FileReader();
         reader.onload = (function(aImg) {
                 return function(e) {
                         aImg.src = e.target.result;
                 };
         })(img);
         reader.readAsDataURL(file);
}
}


FUNÇÃO EDITAR NO CONTROLLER(CODEIGNITER)
function editar() {
         if(!$this->permission->checkPermission($this->session->userdata('permissao'),'eColaborador')){
                 $this->session->set_flashdata('error','Você não tem permissão para editar colaboradores.');
                 redirect(base_url());
         }
         $this->load->library('form_validation');
         $this->data['custom_error'] = '';
         if ($this->form_validation->run('colaboradores') == false) {
                 $this->data['custom_error'] = (validation_errors() ? '<div class="form_error">' . validation_errors() . '</div>' : false);
         } else {
                 $data_admissao = $this->input->post('data_admissao');
$data_demissao = $this->input->post('data_demissao');

$foto = $this->do_upload();
                 $file = $foto['file_name'];
                 $url_foto = base_url().'assets/fotos/'.date('d-m-Y').'/'.$file;
                 try {
                 }catch (Exception $e) {
                         $data_admissao = date('Y/m/d');
         $data_demissao = date('Y/m/d');
         $data_inicio_aviso = date('Y/m/d');
         $data_fim_aviso = date('Y/m/d');
         $data_inicio_ferias = date('Y/m/d');
         $data_fim_ferias = date('Y/m/d');
         $data_abandono1 = date('Y/m/d');
         $data_abandono15 = date('Y/m/d');
         $data_abandono28 = date('Y/m/d');
         $data_inicio_previdencia = date('Y/m/d');
         $data_fim_previdencia = date('Y/m/d');
         $data_inicio_justica_a = date('Y/m/d');
         $data_fim_justica_a = date('Y/m/d');
         $data_inicio_justica_i = date('Y/m/d');
         $data_fim_justica_i = date('Y/m/d');
         $data_inicio_licasamento = date('Y/m/d');
         $data_fim_licasamento = date('Y/m/d');
         $data_inicio_suspensao = date('Y/m/d');
         $data_fim_suspensao = date('Y/m/d');
                 }

                 $data = array(
                         'nome' => $this->input->post('nome'),
                         'sexo' => $this->input->post('sexo'),
'cpf' => $this->input->post('cpf'),
'rg' => $this->input->post('rg'),
'url_foto' => $url_foto,
'data_nascimento' => $this->input->post('data_nascimento'),
                         'rua' => $this->input->post('rua'),
                         'numero' => $this->input->post('numero'),
'complemento' => $this->input->post('complemento'),
                         'bairro' => $this->input->post('bairro'),
                         'cep' => $this->input->post('cep'),
                         'estado' => $this->input->post('estado'),
                         'cidade' => $this->input->post('cidade'),
'telefone' => $this->input->post('telefone'),
                         'celular' => $this->input->post('celular'),
                         'email' => $this->input->post('email'),
'ctps'=> $this->input->post('ctps'),
'serie' => $this->input->post('serie'),
'uf' => $this->input->post('uf'),
'pis' => $this->input->post('pis'),
'salario' => $this->input->post('salario'),
'banco' => $this->input->post('banco'),
'agencia' => $this->input->post('agencia'),
'conta' => $this->input->post('conta'),
'jornada_trabalho'=> $this->input->post('jornada_trabalho'),
'horario_trabalho' => $this->input->post('horario_trabalho'),
'data_admissao' => $this->input->post('data_admissao'),
'departamento' => $this->input->post('departamento'),
'cargo' => $this->input->post('cargo'),
'situacao' => $this->input->post('situacao'),
'data_demissao' => $this->input->post('data_demissao'),
'tipo_demissao' => $this->input->post('tipo_demissao'),
'motivo_demissao' => $this->input->post('motivo_demissao'),
'data_inicio_aviso' => $this->input->post('data_inicio_aviso'),
'data_fim_aviso' => $this->input->post('data_fim_aviso'),
'data_inicio_ferias' => $this->input->post('data_inicio_ferias'),
'data_fim_ferias' => $this->input->post('data_fim_ferias'),
'data_abandono1' => $this->input->post('data_abandono1'),
'data_abandono15' => $this->input->post('data_abandono15'),
'data_abandono28' => $this->input->post('data_abandono28'),
'data_inicio_previdencia' => $this->input->post('data_inicio_previdencia'),
'data_fim_previdencia' => $this->input->post('data_fim_previdencia'),
'data_inicio_justica_a' => $this->input->post('data_inicio_justica_a'),
'data_fim_justica_a' => $this->input->post('data_fim_justica_a'),
'data_inicio_justica_i' => $this->input->post('data_inicio_justica_i'),
'data_inicio_licasamento' => $this->input->post('data_inicio_licasamento'),
'data_fim_licasamento' => $this->input->post('data_fim_licasamento'),
'data_inicio_limaternidade' => $this->input->post('data_inicio_limaternidade'),
'data_fim_limaternidade' => $this->input->post('data_fim_limaternidade'),
'data_inicio_suspensao' => $this->input->post('data_inicio_suspensao'),
'data_fim_suspensao' => $this->input->post('data_fim_suspensao'),
'observacao' => $this->input->post('observacao'),
'usuario_alteracao' => $this->input->post('usuario_alteracao'),
'data_alteracao' => date('Y-m-d')
                 );
                 if ($this->colaboradores_model->edit('colaboradores', $data, 'idColaboradores', $this->input->post('idColaboradores')) == TRUE) {
                         $this->session->set_flashdata('success','Colaborador editado com sucesso!');
                         redirect(base_url() . 'index.php/colaboradores/editar/'.$this->input->post('idColaboradores'));
                 } else {
                         $this->data['custom_error'] = '<div class="form_error"><p>An Error Occured</p></div>';
                 }
         }

$this->load->model('departamentos_model');
         $this->data['departamentos'] = $this->departamentos_model->getActive('departamentos','departamentos.idDepartamentos,departamentos.departamento');
$this->load->model('cargos_model');
         $this->data['cargos'] = $this->departamentos_model->getActive('cargos','cargos.idCargos,cargos.cargo');

$this->data['result'] = $this->colaboradores_model->getById($this->uri->segment(3));
         $this->data['view'] = 'colaboradores/editarColaborador';
         $this->load->view('tema/topo', $this->data);
        
}


FUNÇÃO UPLOAD NO CONTROLLER(CODEIGNITER)
public function do_upload(){
         if(!$this->permission->checkPermission($this->session->userdata('permissao'),'vColaborador')){
                 $this->session->set_flashdata('error','Você não tem permissão para adicionar colaboradores.');
                 redirect(base_url());
         }

         $date = date('d-m-Y');
$config['upload_path'] = './assets/fotos/'.$date;
         $config['allowed_types'] = 'txt|jpg|jpeg|gif|png|pdf|PDF|JPG|JPEG|GIF|PNG';
         $config['max_size']     = 0;
         $config['max_width'] = '3000';
         $config['max_height'] = '2000';
         $config['encrypt_name'] = true;

if (!is_dir('./assets/fotos/'.$date)) {
mkdir('./assets/fotos/' . $date, 0777, TRUE);
}
$this->load->library('upload', $config);
if ( ! $this->upload->do_upload())
{
$error = array('error' => $this->upload->display_errors());
$this->session->set_flashdata('error','Erro ao fazer upload do arquivo, verifique se a extensão do arquivo é permitida.');
                 redirect(base_url() . 'index.php/colaboradores/adicionar/');
}
else
{
//$data = array('upload_data' => $this->upload->data());
return $this->upload->data();
}
}
Wagner Fillio

Wagner Fillio

Responder

Post mais votado

28/04/2016

Tente algo assim no controller:

if (!empty($_FILES['avatar']['tmp_name'])):
    $foto = $this->do_upload();
    $file = $foto['file_name'];
    $url_foto = base_url().'assets/fotos/'.date('d-m-Y').'/'.$file;
    $data['url_foto'] = $url_foto;
endif;

William

William
Responder

Mais Posts

29/04/2016

Wagner Fillio

Certo,


Mas por hora, não teria uma solução de gravar o path baseado no seu código?
Responder

29/04/2016

Wagner Fillio

Por enquanto vou manter o projeto atual de salvar o path da imagem.
Responder

02/05/2016

Wagner Fillio

Willian,
Boa tarde!

Conseguiu ver?
Responder

02/05/2016

Wagner Fillio

Willian.

Consegui cara!!

Muito obrigado pela ajuda, que foi de grande importância.

Segue código que funcionou no meu caso.

Não estava funcionando porque, como sua função terminava com endif, eu deveria colocar uma função de validação, antes do endif, conforme abaixo, ou seja, se fosse preenchido algo; além da imagem ir para o servidor, deve registrar no banco de dados.

if (!empty($_FILES['userfile']['name'])):
			$foto = $this->do_upload();
			$file = $foto['file_name'];
			$url_foto = base_url().'assets/fotos/'.date('d-m-Y').'/'.$file;
			$data['url_foto'] = $url_foto;
			
			if ($this->colaboradores_model->edit('colaboradores', $data, 'idColaboradores', $this->input->post('idColaboradores')) == TRUE) {
                $this->session->set_flashdata('success','Colaborador editado com sucesso!');
                redirect(base_url() . 'index.php/colaboradores/editar/'.$this->input->post('idColaboradores'));
            } else {
                $this->data['custom_error'] = '<div class="form_error"><p>An Error Occured</p></div>';
            }
			endif;
Responder

02/05/2016

William

Legal Wagner, estou finalizando tópico!
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar