Make upload optional

Asked

Viewed 147 times

0

I am using the Codeigniter File Upload Class in a form to send a photo, but by default the field is required, I wonder if there is how and if you have how to change the rule, because there will not always be image to be sent in this form.

View:

<?= form_open_multipart('filmes/cadastro')  ?>
    <input type="hidden" name="id_user" value="<?= $id_user?>" />
    <div class="form-group  col-lg-12">
        <label for="userfile">Poster</label><span class="erro"><?php echo form_error('userfile') ?  : ''; ?></span>
        <input type="file" name="userfile" id="userfile" class="form-control" value="<?= set_value('userfile') ? : (isset($userfile) ? $userfile : '') ?>" autofocus='true' />
    </div>
<?= form_close(); ?>

Controller

$config['upload_path'] = './include/img/poster';
$config['allowed_types'] = 'jpg|png';
$config['max_size'] = '0';
$config['max_width']  = '0';
$config['max_height']  = '0';
$config['file_name'] = $slug_titulo;

$this->load->library('upload', $config);

if ( ! $this->upload->do_upload()){ //tentei alterar essa classe, mas não obtive exito
    $variaveis['generos'] = $this->m_generos->generos();
    $variaveis['nacionalidades'] = $this->m_nacionalidades->nacionalidadesFull();
    $variaveis['mensagem'] = $this->upload->display_errors();
    $this->load->view('v_filme_cadastro', $variaveis);
}   
else{
    $pfoto = $this->upload->data();
    $foto = $pfoto['file_name'];

    $filme = $this->m_filme->store($foto, $titulo_original, $titulo_traduzido, $slug_titulo, $data_lancamento, $duracao, $classificacao, $status, $orcamento, $faturamento, $sinopse, $generos, $nacionalidades, $id_user, $dt_criacao);
    redirect(base_url("cadastros/filme/{$filme}"));
}

Model:

public function store($foto, $titulo_original, $titulo_traduzido, $slug_titulo, $data_lancamento, $duracao, $classificacao, $status, $orcamento, $faturamento, $sinopse, $generos, $nacionalidades, $id_user, $dt_criacao) {

    $this->db->query("INSERT INTO obras
        (poster, titulo_original, titulo_traduzido, slug_titulo, data_lancamento, duracao, classificacao, status, sinopse, midia, id_usuario, dt_criacao)
        VALUES('{$foto}','{$titulo_original}','{$titulo_traduzido}','{$slug_titulo}','{$data_lancamento}','{$duracao}','{$classificacao}','{$status}','{$sinopse}', 'filme', '{$id_user}','{$dt_criacao}')");

    $id_obras = $this->db->insert_id();

    $this->db->query("INSERT INTO filmes
        (id_obras, orcamento, faturamento)
        VALUES('{$id_obras}','{$orcamento}','{$faturamento}')");

    foreach ($generos as $genero){
        $this->db->query("INSERT INTO obras_generos
        (id_obras, id_generos)
        VALUES('{$id_obras}','{$genero}')");
        }

    foreach ($nacionalidades as $nacionalidade){
        $this->db->query("INSERT INTO paises_obras
        (id_obras, id_paises)
        VALUES('{$id_obras}','{$nacionalidade}')");
        }

        return $id_obras;
    }
  • 2

    Put the validation code (php) or the form

  • Put the code that creates the field and validates this upload field.

  • @rray codes inserted in the post

1 answer

0

You can do the following check:

if (empty($_FILES['nome_input_upload']['name'])) {
   // fluxo sem upload de imagem
} else {
  $config['upload_path'] = './include/img/poster';
  $config['allowed_types'] = 'jpg|png';
  $config['max_size'] = '0';
  $config['max_width']  = '0';
  $config['max_height']  = '0';
  $config['file_name'] = $slug_titulo;
  $this->load->library('upload', $config);

  // continua o fluxo com upload
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.