3

I need to upload a file in a mysql database using codeigniter. My view is:

<?php echo form_open_multipart('home/addpagina2'); ?>
<label for="titolo">Titolo:</label>
<input type="text" size="20" id="titolo" name="titolo"/>
<br/>
<label for="testo">Testo</label><br/>
<textarea name="testo" cols="50" rows="10"></textarea>
<br/>
<label for="file">File:</label>
<input type="file" name="file" />
<br />
<input type="submit" value="Aggiungi"/>
</form>

and controller is:

function addpagina2(){
    $this->form_validation->set_rules('titolo', 'Titolo', 'trim');
    $this->form_validation->set_rules('testo', 'Testo', 'trim');

    if($_FILES["file"]["size"] > 0){
        $tmpName = $_FILES["file"]['tmp_name'];         
        $fp = fopen($tmpName, 'r');
        $file = fread($fp, filesize($tmpName));
        $file = addslashes($file);
        fclose($fp);
    }

    $pagina = array();
    $pagina['titolo'] = $this->input->post('titolo');
    $pagina['testo'] = $this->input->post('testo');
    $pagina['file'] = $file;

    $this->db->insert('pagine', $pagina);
    redirect('home/pagine');
}

When I want to display the file I call this view:

<?php
header("Content-type: ".$file['type']);
echo $file;
?>

that is called by this controller:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class File extends CI_Controller {

function __construct(){
    parent::__construct();
}

public function index(){

}

function id($id){
    $immagine = $this->db->get_where('pagine', array('id' => $id));
    $data['file'] = $immagine->row()->file;
    $this->load->view('file', $data);
}

}

the problem is that I have an error while i call the view in the browser, as you can see here: http://mattialori.net/amv/index.php/file/id/2 If I upload a file on the database using phpmyadmin it works.

How can I do?

1 Answer 1

6

Why don't you just save the file name into the db? Then you can upload the img in a specific folder and in your view yuo can set the full path from your folder and append the file name at the end.

EDIT: you can use the File Upload class in this way:

//Check if the file exists in the form
if($_FILES['file']['name']!=""){

//load library
$this->load->library('upload');

//Set the config
$config['upload_path'] = './uploads/'; //Use relative or absolute path
$config['allowed_types'] = 'gif|jpg|png'; 
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';
$config['overwrite'] = FALSE; //If the file exists it will be saved with a progressive number appended

//Initialize
$this->upload->initialize($config);

//Upload file
if( ! $this->upload->do_upload("file")){

    //echo the errors
    echo $this->upload->display_errors();
}


//If the upload success
$file_name = $this->upload->file_name;

//Save the file name into the db
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.