Jump to content
marcelobbt

Fazer upload de arquivo no codeigniter

Recommended Posts

Estou tentando fazer um form com upload de arquivos mas não está funcionando. Ele não carrega os arquivos e nem indica os erros.

 

Controler: Noticias.php

public function CriarNoticia () {
		//carrega a blibioteca
		$this->load->library('upload');
		//verifica nível de acesso
		if ($this->session->userdata('nivel') < 4) { 
			//redireciona página
			header("Location: ".base_url()."Principal");
		}
		//zera variáveis
		$erro = '';
		//cria objeto
		$noticia = new Noticia;
		//valida campos do form
		$this->form_validation->set_rules('titulo','T&iacute;tulo','required');
		$this->form_validation->set_rules('data','Data','required');
		$this->form_validation->set_rules('texto','Texto','required');
		$this->form_validation->set_rules('resumo','Resumo','required');
		$this->form_validation->set_rules('categoria','Categoria','required');
		
		//verifica validação
		if ($this->form_validation->run() == TRUE){
			//atribui valor do form para variável
			$noticia->__set('titulo', $this->input->post('titulo'));
			$noticia->__set('data', $this->input->post('data'));
			$noticia->__set('texto', $this->input->post('texto'));
			$noticia->__set('resumo', $this->input->post('resumo'));
			$noticia->__set('categoria', $this->input->post('categoria')); 
			
			//configura arquivos
			$config['upload_path'] = './galeria/imagensdestaque';
			$config['allowed_types'] = 'gif|jpg|png';
			$config['max_width'] = '500';
			$config['overwrite'] = 'true';
			//inicializa as configurações
			$this->upload->initialize($config);
			// faz o upload
			if ( ! $this->upload->do_upload('imagem')) {
	            // em caso de erro retorna os mesmos para uma variável
	            $erro = array('error' => $this->upload->display_errors());
	        } else { 
	            //se correu tudo bem, recuperamos os dados do arquivo
	            $imagem['dadosArquivo'] = $this->upload->data();
	            // definimos o caminho original do arquivo
	            $arquivoPath = 'imagensdestaque/'.$imagem['dadosArquivo']['file_name'];
	            // passando para o array
	            $imagem['urlArquivo'] = base_url($arquivoPath);
	        }
			
			$noticia->__set('imagem', $imagem['urlArquivo']);
			//cria objeto			
			$crud = new Crud2;
			//prepara dados
			$resultado = array('Titulo' => $noticia->titulo, 'Data' => $noticia->data, 'Texto' => $noticia->texto, 'Resumo' => $noticia->resumo, 'Categoria' => $noticia->categoria, 'Imagem' => $noticia->imagem);
			//salva dados
			$crud->Inserir('noticias', $resultado);
		} else {
			//indica os erros
			$erro = validation_errors('<p class="vermelho">','</p>');
		}
		//coloca dados em array para transmitir a vista
		$dados = array (
			'menu' => 'padroes/menu',
			'pagina' => 'InserirNoticia',
			'rodape' => 'padroes/Rodape',
			'erro' => $erro
		);
		//carrega vista
		$this->load->view('Padroes/PaginaPadrao',$dados);
	}

 

View: InserirNoticia.php

<div class="container">
	<div class="row">
		<div class="col-sm-10">
			<H2>Cadastrar Not&iacute;cia</H2>
			<fieldset>
				<p><?php echo form_open('Noticias/CriarNoticia'); ?></p>
				<label>Título:</label>
				<p><?php echo form_input(array('name'=>'titulo','id'=>'titulo'),set_value('titulo')); ?></p>
				<label>Data:</label>
				<p><?php echo form_input(array('type'=>'date', 'name'=>'data','id'=>'data'),set_value('data')); ?></p>
				<label>Texto: </label>
				<p><?php echo form_textarea(array('name'=>'texto','id'=>'texto'),set_value('texto')); ?></p>
				<label>Resumo: </label>
				<p><?php echo form_input(array('name'=>'resumo','id'=>'resumo'),set_value('resumo')); ?></p>
				<label>Imagem de Destaque: </label>
				<p><?php echo form_input(array('type'=>'file', 'name'=>'imagem','id'=>'imagem'),set_value('imagem')); ?></p>
				<label>Categoria: </label>
				<p><?php echo form_dropdown(array('name'=>'categoria','id'=>'categoria'), array('noticia' => "Not&iacute;cia"), set_value('categoria')); ?></p>
				<label>&nbsp;</label>
				<p><?php echo form_submit(array('name'=>'cadastrar'),"Cadastrar"); ?></p>
				</form>
				<label>&nbsp;</label>
			</fieldset>
			<?php echo $erro; ?>
		</div>
	</div>
</div>

 

 

Share this post


Link to post
Share on other sites

Bem, provavelmente você já fez isso, mas vou colocar o óbvio que sei:

 

1) Não vejo nesse código você carregando um $this->load->library("form_validation"), ele já está no autoload.php?

 

2) Coloque isso no começo do código para fazer o PHP exibir erros:

ini_set('display_errors', true);
error_reporting(E_ALL);

 

3) Mude a variável do arquivo de configuração do CodeIgniter que está no config.php:

$config['log_threshold'] = 0;

para:

$config['log_threshold'] = 4;.

Rode o upload uma vez, e veja os logs do CodeIgniter, ou se aparece algum erro.

Share this post


Link to post
Share on other sites

Sim o form_validation está carregado.

 

Quanto ao erro o único erro que ele dá é esse:

 

Citar

A PHP Error was encountered

Severity: Notice

Message: Undefined variable: imagem

Filename: controllers/Noticias.php

Line Number: 101

 

onde a linha 101 = a esta: $noticia->__set('imagem', $imagem['urlArquivo']);

Share this post


Link to post
Share on other sites
2 horas atrás, marcelobbt disse:

Sim o form_validation está carregado.

 

Quanto ao erro o único erro que ele dá é esse:

 

 

onde a linha 101 = a esta: $noticia->__set('imagem', $imagem['urlArquivo']);

 

Essa variável $imagem não deveria ter sido iniciada como caracter logo no início do código? Essa variável $imagem tem que ser do tipo caracter para poder armazenar uma informação de link de URL.

 

Share this post


Link to post
Share on other sites

Se eu colocar um valor inicial na variável simplesmente não aparecerá este erro mas continuará não funcionando o upload.

Share this post


Link to post
Share on other sites

Eu fiz um teste e no servidor está funcionando.

 

Ele só não está gravando no meu PC. Creio que é problema de permissão de gravação na pasta, mas como ajusto isso no PC?

Share this post


Link to post
Share on other sites

Clique com o botão direito na pasta, escolha "propriedades".

 

Vá na aba "segurança", botão "Editar..." e nessa tela você escolhe um usuário para ter permissão de escrita, se você não se importa com sua pasta, somente adicione o usuário "Todos", mas você deveria somente dar permissões aos usuários que interessa, de um ponto de vista de administrador de sistemas.

Share this post


Link to post
Share on other sites

Esse $this no seu código está sendo usado de forma correta? nos exemplos que vi do $this na internet, ele direciona o conteúdo de &this para dentro de outra variável como por exemplo {$var}  em:

 

 https://stackoverflow.com/questions/16408037/php-this-var-what-does-that-mean 

 

http://respostas.guj.com.br/51499-this-em-php-como-funciona

 

http://excript.com/php/pseudo-variavel-this-php.html

 

(eu estou estudando PHP, mas ainda sei muito pouco de PHP).

Share this post


Link to post
Share on other sites

Tenho um livro de Javascript, nele diz que o this quando é adicionado em um local onde especificamos uma propriedade, informamos ao JavaScript que queremos obter a propriedade deste objeto.  Pode ser que no PHP ele funcione similar.

 

Share this post


Link to post
Share on other sites

Basicamente o $this está fazendo referência a um Controller do CodeIgniter, um Framework de PHP. É bem comum ser utilizado e não acho que haja problemas nisso.

 

Tente mudar isto:

$config['upload_path'] = './galeria/imagensdestaque';

"." é o diretório atual, mas talvez isto seja melhor como:

$config['upload_path'] = BASEPATH . '/galeria/imagensdestaque';

Tente ver aonde essa variável está apontando, ele provavelmente vai dar o caminho completo desde o "C:\".

Share this post


Link to post
Share on other sites

Já tentei mudar diversas vezes o caminho da pasta. Já tentei colocar o caminho completo, colocar apenas uma pasta na raiz, dentro da aplicação, enfim, de várias formas mas não ia.

 

Algum mistério tem que não consigo salvar o arquivo. Estou pesquisando uma outra forma de fazer isso.

Share this post


Link to post
Share on other sites

Talvez ao invés de form_open() no html, você deva usar form_open_multipart().

 

"This function is absolutely identical to form_open() above, except that it adds a multipart attribute, which is necessary if you would like to use the form to upload files with."

https://www.codeigniter.com/userguide3/helpers/form_helper.html

 

No file uploading class do CodeIgniter também é feito com multipart:

https://www.codeigniter.com/userguide3/libraries/file_uploading.html

  • +1 1

Share this post


Link to post
Share on other sites

@marcelobbt

 

Achei hoje este site, ele tem um código de upload de arquivos em PHP = http://blog.ultimatephp.com.br/upload-multiplo-php/

 

  • -1 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By tatysouzac
      Minha view:
      <div>                            
                                          <form method="post" action="http://localhost/integradorcode/index.php/welcome/validar">
                                          EMAIL: <input type="text" name="email"  /> <br><br>
                                          SENHA:  <input type="password" name="senha"/> <br><br><br><br>
                                          <input class="myButton" type="submit" value="Entrar"/> <br><br>
                                          </form>
                                          <a href="Cadastro.php" class="myButton">Cadastrar</a><br><br>
                                          <a href="#" class="myButton">Esqueceu sua senha?</a>
               </div>
       
       
       
      Controller:
       
          public function validar(){
              //var_dump($_POST);
              $this->load->model("Cadastro_model");
              $result = $this->Cadastro_model->validar($_POST["email"],md5($_POST["senha"]));
              var_dump($result);
          }
       
       
      Model:
       
          function validar($email, $senha){
              return $this->db->query("SELECT * FROM `cadastro_clientes` WHERE email_cliente = '{$email}'  AND senha_cliente = '{$senha}' AND status = 1 LIMIT 1")->result_array();
          }
       
       
      Não da nenhuma mensagem de erro mas coloco senha e login certos do meu bd e o return não retorna nada array 0 
    • By FabianoSouza
      Pessoal, estou garimpando alguns códigos para fazer upload sem necessidade de componente.
      Notei que em todos esses códigos ocorre um problema: truncamento de caracteres acentuados.
       
      Já pesquisei muito em busca da solução.
      Geralmente sugerem para colocar esse código no topo da página
      Response.AddHeader "Content-Type", "text/html;charset=UTF-8" 'caractéres em PT-BR Response.ContentType = "text/html" Response.CharSet = "UTF-8" Já fiz isso...mas não resolveu.
       
      Alguém pode ajudar?
       
      Grato.
    • By StenioDaty
      Estou criando um sistema com adição de um tópico categoria que assim que é adicionado é chamado na tabela para aparecer na tabela ao lado.
      Estou recebendo o erro abaixo, mas a categoria é cadastrada:
       
      A PHP Error was encountered
      Severity: Warning
      Message: Cannot modify header information - headers already sent by (output started at /storage/ssd5/194/9530194/public_html/application/helpers/funcoes_helper.php:1)
      Filename: helpers/url_helper.php
      Line Number: 564
      Backtrace:
      File: /storage/ssd5/194/9530194/public_html/application/controllers/admin/Categoria.php
      Line: 35
      Function: redirect
      File: /storage/ssd5/194/9530194/public_html/index.php
      Line: 315
      Function: require_once
       
       
       
       
      Segue foto:
       
       
      View Código:
       
      <div id="page-wrapper">
                  <div class="row">
                      <div class="col-lg-12">
                          <h1 class="page-header"><?php echo 'Administrar '.$subtitulo; ?></h1>
                      </div>
                                  </div>
                              <div class="row">                
                      <div class="col-lg-6">
                          <div class="panel panel-default">
                              <div class="panel-heading">
                                 <?php echo 'Adicionar nova '.$subtitulo; ?>
                              </div>
                              <div class="panel-body">
                                  <div class="row">
                                      <div class="col-lg-12">
                                          <?php 
                                          echo validation_errors('<div class="alert  alert-danger">','</div>');
                                          echo form_open('admin/categoria/inserir');
                                          ?>
                                          <div class="form-group">
                                                  <label id="txt-categoria">Nome da Categoria</label>
                                                  <input type="text" id="txt-categoria" name="txt-categoria" class="form-control" placeholder="Entre com o texto">
                                          </div>
                                          <button type="submit" class="btn btn-default">Cadastrar</button>
                                          
                                          <?php
                                          echo form_close();
                                          ?>
                                      </div>
                                      
                                  </div>
                                  <!-- /.row (nested) -->
                              </div>
                              <!-- /.panel-body -->
                          </div>
                          <!-- /.panel -->
                      </div>
                      <!-- /.col-lg-6 -->
                      
                      
                      <div class="col-lg-6">
                          <div class="panel panel-default">
                              <div class="panel-heading">
                                  <?php echo 'Alterar '.$subtitulo. ' existente'; ?>
                              </div>    
                               <?php
                                          $this->table->set_heading("Nome da Categoria","Alterar","Excluir");
                                          foreach($categorias as $categoria){
                                              $nomecat = $categoria->titulo;
                                              $alterar= anchor(base_url('Admin/categoria'),'<i class="fa fa-refresh fa-fw"></i> Alterar');
                                              $excluir=anchor(base_url('Admin/categoria/excluir/'.md5($categoria->id)),' <i class="fa fa-remove fa-fw"></i> Excluir');
                                              
                                              $this->table->add_row($nomecat,$alterar,$excluir);
                                          }
                                          
                                          $this->table->set_template(array(
                                              'table_open' => '<table class="table table-striped">'
                                              ));
                                              
                                              echo $this->table->generate();
                                      ?>           
                                            
                              </div>
                              <div class="panel-body">
                                  <div class="row">
                                      <div class="col-lg-12">
                                          
                                      </div>
                                      
                                  </div>
                                  <!-- /.row (nested) -->
                              </div>
                              <!-- /.panel-body -->
                          </div>
                          <!-- /.panel -->
                      </div>
                      
                      
                  </div>
                  <!-- /.row -->
              </div>
              <!-- /#page-wrapper -->
          </div>
       
       
      MODEL CODE:
       
      <?php
      defined('BASEPATH') OR exit('No direct script access allowed');
      class Categorias_model extends CI_Model {
          
          public $id;
          public $titulo;
          
          public function __construct(){
              parent::__construct();
          }
          
          public function listar_categorias(){
              $this->db->order_by('titulo','ASC');
              return $this->db->get('categoria')->result();
          }
          
          public function publicacao(){
              $this->db->select('usuario.id as idautor, usuario.nome, postagens.id, postagens.titulo, postagens.subtitulo, postagens.user, postagens.data, postagens.img, postagens.categoria, postagens.conteudo');
              $this->db->from('postagens');
              $this->db->join('usuario', 'usuario.id = postagens.user');
              $this->db->where('postagens.id ='.$id);
              return $this->db->get()->result();
          }
          
          public function listar_titulo($id){
              $this->db->from('categoria');
              $this->db->whre('id ='.$id);
              return $this->db->get()->result();
          }
          
          public function adicionar($titulo){
              $dados['titulo'] = $titulo;
              return $this->db->insert('categoria',$dados);
          }
          
          public function excluir($id){
              $this->db->where('md5(id)',$id);
              return $this->db->delete('categoria');
          }
          
      }
       
      CONTROLLER:
       
       
      <?php
      defined('BASEPATH') OR exit('No direct script access allowed');
      class Categoria extends CI_Controller {
          public function __construct(){
              parent::__construct();
              $this->load->model('categorias_model','modelcategorias');
              $this->categorias = $this->modelcategorias->listar_categorias();
          }
          
          public function index()
          {
              
              $dados['categorias'] = $this->categorias;
              $this->load->library('table');
              //Dados a serem enviados para o cabeçalho
              $dados['titulo'] = 'Painel de Controle';
              $dados['subtitulo'] = 'Categoria';
              
              $this->load->view('backend/template/html-header', $dados);
              $this->load->view('backend/template/template');
              $this->load->view('backend/template/categoria');
              $this->load->view('backend/template/html-footer');
          }
          
          public function inserir(){
              $this->load->library('form_validation');
              $this->form_validation->set_rules('txt-categoria','Nome da Categoria', 'required|min_length[3]|is_unique[categoria.titulo]');
              if($this->form_validation->run() == FALSE){
                  $this->index();
              }else{
                  $titulo = $this->input->post('txt-categoria');
                  if($this->modelcategorias->adicionar($titulo)){
                      redirect(base_url('admin/categoria'));
                  }else{
                      echo "Houve um erro no sistema!";
                  }
              }
              
          }
          
          public function excluir($id){
              
              if($this->modelcategorias->excluir($id)){
                      redirect(base_url('admin/categoria'));
                  }else{
                      echo "Houve um erro no sistema!";
                  }
              
          }
          
      }
       
      Gostaria de ajuda para corrigir o erro:
      Desde já agradeço!
       
    • By RodrigoWD3
      Boa tarde pessoal nao sei se estou no tópico correto , gostaria de tira uma duvida quero fazer um sistema de noticias com url amigavel  em codeigniter ja fiz a parte de noticias para exibir e a view porem estou usando a id para exibir as noticias e o que eu gostaria de fazer era usar a url do titulo da noticia ficando uma url amigavel alguém teria algum tutorial para eu poder estudar obrigado
    • By GiovannaRamos
      Olá pessoal,  gostaria de adicionar outra função ao meu botão 'Finalizar10()' ,  por enquanto ele faz a exportação dos dados da minha 'tabela' para um Excel e salva na pasta downloads do meu computador,  alguém sabe se teria alguma forma fazer esse arquivo gerado (Excel) ao invés de  fazer download, fazer o upload no caminho do meu servidor?
      function Finalizar10() { $(document).ready(function Finalizar() { $("#btnExport").click(function exportar (e) { e.preventDefault(); var blobData = new Blob(['\ufeff'+tabela], { type: 'application/vnd.ms-excel' }); var url = window.URL.createObjectURL(blobData); var a = document.createElement('a'); a.href = url; a.download = codigo; a.click(); }); }); }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.