$ _FILES ['imagem']在Firefox中未定义

时间:2016-04-13 20:41:35

标签: codeigniter firefox

我的网站是使用Codeigniter构建的,并且有一个区域供用户修改其信息。此区域允许用户选择个人资料图片,并在编辑时预览所选图片。如果他们没有选择新的,有一个hidden字段存储其名称,该字段将传递给控制器​​以指定相同的图像名称,但如果用户决定更改它,则会传递新名称到控制器。

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(),
        ));
    }
}

这是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>

使用谷歌浏览器,它运行正常,但在Firefox 45中,如果我不选择新图像,则会引发错误:

  

严重性:注意

     

消息:未定义的索引:imagem

     

文件名:controllers / Usuario.php

     

行号:362

它只适用于本地。

1 个答案:

答案 0 :(得分:0)

如果您没有上传新图片,那么$ _FILES []是未定义的,如错误所示。要检查用户是否更改了他的图像,您应该这样做:

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