Salvar dados do formulario sem obrigacao de atualizar a imagem
28/04/2016
0
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
Post mais votado
28/04/2016
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
Mais Posts
28/04/2016
Wagner Fillio
Obrigado pela resposta.
Este código eu incluiria ele na função editar ou preciso criar uma nova função?
Em qual parte do código devo incluí-lo?
Perguntou, pois já tentei uma nova função #editarFoto e não deu.
Tambem tentei incluir um if $url_foto != null, passa o valor do input file para o array, else Não passa o valor para o array; mas tambem não deu.
28/04/2016
Wagner Fillio
Tentei da seguinte forma...
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'); 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; 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(...
Devo fazer alguma outra alteração no código view?
28/04/2016
William
Tente assim:
if(isset($_FILES['userfile']) && $_FILES['userfile']['size'] > 0): $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;
28/04/2016
Wagner Fillio
Está passando como NULL e salvando NULL no BD.
Este é o mesmo problema que enfrentei ao usar outros códigos.
28/04/2016
Wagner Fillio
Agora salva os dados que eu editar sem atualizar a imagem e não retorna erro.
Mas se eu quiser editar somente imagem e trocar por outra, a nova imagem não é gravada no banco.
28/04/2016
Wagner Fillio
Me desculpe, a imagem está passando sim para o banco.
O que acontecendo, é que a nova imagem não está sendo exibida no formulário, ficando visível a imagem anterior a alteração.
28/04/2016
Wagner Fillio
Uma nova imagem está sendo criada na pasta assets/fotos/28-04-2016/"Nova Imagem Criada".
Mas a url não está sendo gravada no banco.
28/04/2016
William
28/04/2016
Wagner Fillio
Exemplo:
Nome da imagem antes do submit: "Qualquer Nome.jpg"
Nome da mesma imagem que é gravada no servidor: "3cef2263d0aef25ce282da770e5e6f58.jpg"
Lembrando que o nome é alterado a cada envio de imagem e nunca se repetirá, mesmo se for a mesma imagem carregada.
Observação: Eu fiz uma comparação da url gravada no banco de dados, antes e depois da alteração e o resultado não mudou.
O que o script fez, foi enviar uma nova imagem para o servidor, sem que seu caminho fosse gravado no bd.
29/04/2016
Wagner Fillio
Bom dia!
Desculpe ser chato, tentei outras opções e não deu certo, o código que você criou foi o que chegou mais perto, pois a imagem é transferida para o servidor, com um novo nome e tudo mais.
O único problema, é que o path não está sendo gravado no banco de dados.
Baseado no seu código, existiria alguma opção e alteração a ser aplicada?
Obrigado
Att,
29/04/2016
William
29/04/2016
Wagner Fillio
Tem razão, mas não está gravando nem o nome das imagens.
E para isso eu teria que alterar uma série de código.
Acontece que tô meio agarrado com umas coisas e meio sem tempo, por hora, o caminho resolveria e caso o seu código funcione, basearia nele um novo insert somente com o nome da imagem.
29/04/2016
William
Clique aqui para fazer login e interagir na Comunidade :)