2016-04-13 8 views
0

Meine Website ist mit Codeigniter erstellt, und es gibt einen Bereich für Benutzer ihre Informationen zu ändern. In diesem Bereich können Benutzer ein Profilbild auswählen. Bei der Bearbeitung wird das ausgewählte Bild in der Vorschau angezeigt. Falls sie keine neue wählen, gibt es ein hidden Feld, das ihren Namen speichert, der an den Controller übergeben wird, um den gleichen Bildnamen anzugeben, aber wenn der Benutzer entscheidet, ihn zu ändern, wird der neue Name an den Controller übergeben.

public function edit($id) 
{ 
    $this->input->post('tipo_usuario') === 'F' ? $validator = 'editar_pessoa_fisica' : $validator = 'editar_pessoa_juridica'; 

    if ($this->form_validation->run($validator)) { 
     $data = array(); 
     $data['nome_razao_social'] = $this->input->post('nome_razao_social'); 
     $data['nome_responsavel'] = $this->input->post('nome_responsavel'); 
     $data['nome_fantasia'] = $this->input->post('nome_fantasia'); 
     $data['cpf_cnpj'] = $this->input->post('cpf_cnpj'); 
     $data['telefone'] = $this->input->post('telefone'); 
     $data['telefone_2'] = $this->input->post('telefone_2'); 
     $data['email'] = $this->input->post('email'); 
     $data['novo_email'] = $this->input->post('novo_email'); 
     $data['senha'] = md5($this->input->post('senha')); 
     $data['cep'] = $this->input->post('cep'); 
     $data['logradouro'] = $this->input->post('logradouro'); 
     $data['id_cidade'] = $this->input->post('id_cidade'); 
     $data['id_estado'] = $this->input->post('id_estado'); 
     $data['numero'] = $this->input->post('numero'); 
     $data['complemento'] = $this->input->post('complemento'); 
     $data['tipo_usuario'] = $this->input->post('tipo_usuario'); 
     /* 
     HERE IS IN CASE THE USER DOES NOT CHANGE HIS PROFILE PICTURE 
     */ 
     $data['imagem'] = $this->input->post('imagem_old'); 
     $data['url'] = $this->input->post('url'); 

     // Nova senha? 
     if ($this->input->post('novasenha') !== '') { 
      $data['senha'] = md5($this->input->post('novasenha')); 
     } else { 
      $data['senha'] = $this->input->post('senha'); 
     } 

     /* 
     HERE IS IN CASE THE USER CHANGES HIS PROFILE PICTURE 
     */ 
     // Nova imagem? 
     if ($_FILES['imagem']['name'] !== '') { 
      $data['imagem'] = $_FILES['imagem']['name']; 
     } 

     // Novo e-mail? 
     if ($this->input->post('email') !== $this->input->post('novoemail')) { 
      $data['novo_email'] = $this->input->post('novoemail'); 
      $this->Usuarios_model->update($data, $id); 
      $this->Usuarios_model->send_confirmation_email($data['novo_email'], $data['email']); 
     } 

     if ($this->input->post('novo_novo_email') !== $this->input->post('novo_email')) { 
      $data['novo_email'] = $this->input->post('novo_novo_email'); 
      $this->Usuarios_model->update($data, $id); 
      $this->Usuarios_model->send_confirmation_email($data['novo_email'], $data['email']); 
     } 

     if ($this->Usuarios_model->update($data, $id)) { 
      $this->upload->do_upload('imagem'); 
      $this->session->set_flashdata('message', 'Dados alterados'); 
      echo json_encode(array(
       'redirect' => '/usuario/painel' 
      )); 
     } 
    } else { 
     echo json_encode(array(
      'type' => 'validation', 
      'message' => validation_errors(), 
     )); 
    } 
} 

Dies ist der HTML:

<form action="/auto/usuario/edit/<?php echo $id_usuario; ?>" method="POST" class="formulario" enctype="multipart/form-data"> 
    <input type="hidden" name="tipo_usuario" value="F"/> 
    <div class="p100"> 
     <span class="titulo">Foto de Perfil</span> 
     <div class="imagem_destaque img_perfil image-trigger"> 
      <div class="file-upload-trigger"> 
       <input type="file" name="imagem" class="none file-chooser"/> 
       <img src="/uploads/perfil/<?php echo $u['imagem'] ?>" class="preview more"/> 
      </div> 
     </div> 
     <input type="hidden" name="imagem_old" value="<?php echo $u['imagem']; ?>"/> 
    </div> 

Mit Google Chrome, es funktioniert gut, aber in Firefox 45, wenn ich nicht ein neues Bild auswählen, wird ein Fehler ausgelöst:

Schweregrad: Hinweis

Nachricht: Undefined index: imagem

Dateiname:

Controller/Usuario.php

Zeilennummer: 362

Es nur lokal arbeitet.

+0

Wo ist Ihr Formular schließendes Tag? Können Sie zeigen, dass Sie es geschlossen haben? –

Antwort

0

Wenn Sie kein neues Bild hochladen, ist Ihre $ _FILES [] nicht definiert, wie der Fehler sagt. Um zu überprüfen, ob der Benutzer sein Bild geändert hat, sollten Sie Folgendes tun:

if (isset($_FILES['imagem']['name'])) { 
    $data['imagem'] = $_FILES['imagem']['name']; 
} 
Verwandte Themen