Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 552601
            [titulo] => Salvar dados do formulario sem obrigacao de atualizar a imagem
            [dataCadastro] => DateTime Object
                (
                    [date] => 2016-04-28 13:31:38
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 269142
            [status] => A
            [isExample] => 
            [NomeUsuario] => William 
            [Apelido] => William (Devwilliam)
            [Foto] => 269142_20150809195205.jpg
            [Conteudo] => Tente algo assim no controller:

[code]
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;
[/code] ) )

Salvar dados do formulario sem obrigacao de atualizar a imagem

Wagner Fillio
   - 28 abr 2016

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
#Código

<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
#Código
#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
#Código
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)
#Código
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)
#Código
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();
}
}

Post mais votado

William (devwilliam)
   - 28 abr 2016

Tente algo assim no controller:

#Código

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;

1
|
0

Wagner Fillio
   - 28 abr 2016

William,
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.

0
|
0

William (devwilliam)
   - 28 abr 2016

Antes do bloco try..catch .. na função editar().

0
|
0

Wagner Fillio
   - 28 abr 2016

Não funcionou,

Tentei da seguinte forma...

#Código

  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?

0
|
0

William (devwilliam)
   - 28 abr 2016

Wagner não sei se você observou, mas o "name" tem que ser o mesmo do input file do seu form "$_FILES['userfile']"!

Tente assim:
#Código

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;

1
|
0

Wagner Fillio
   - 28 abr 2016

Willian,

Está passando como NULL e salvando NULL no BD.

Este é o mesmo problema que enfrentei ao usar outros códigos.

0
|
0

William (devwilliam)
   - 28 abr 2016

Detalhe muito importante, se não tem imagem não tem pq enviar na array() "$data" a chave 'url_foto' isso é meio lógico!

Por isso estou inserindo essa chave na array dentro do IF.

1
|
0

Wagner Fillio
   - 28 abr 2016

Tem razão, ajustei aqui.

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.

0
|
1

William (devwilliam)
   - 28 abr 2016

Com certeza não está entrando na condição IF.

0
|
0

Wagner Fillio
   - 28 abr 2016

Willian,

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.

0
|
0

Wagner Fillio
   - 28 abr 2016

Melhor, não está gravando..

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.

0
|
0

William (devwilliam)
   - 28 abr 2016

O ideal é renomear a imagem e excluir a antiga, geralmente os navegadores fazem cache da imagem.

0
|
0

Wagner Fillio
   - 28 abr 2016

Na verdade, a função Upload envia para o servidor a nova imagem com outro nome.
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.

0
|
0

Wagner Fillio
   - 29 abr 2016

Willian,

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,

0
|
0

William (devwilliam)
   - 29 abr 2016

Cara eu nunca gravo o path das imagens no banco, somente o nome das imagens, pq se muda a estrutura por algum motivo tem que sair "pinçando" caminhos.

0
|
0

Wagner Fillio
   - 29 abr 2016

É,

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.

0
|
0

William (devwilliam)
   - 29 abr 2016

Blz quando tiver disponibilidade novamente vai postando, vou deixar o tópico aberto!

0
|
0

Wagner Fillio
   - 29 abr 2016

Certo,

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

0
|
0

Wagner Fillio
   - 29 abr 2016

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

0
|
0

Wagner Fillio
   - 02 mai 2016

Willian,
Boa tarde!

Conseguiu ver?

0
|
0

Wagner Fillio
   - 02 mai 2016

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.

#Código

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;

0
|
0