2015-01-05 4 views
0

Я использую рамки CodeIgniter и я пытаюсь загрузить блоб содержание (изображение в данном случае) в таблицу базы данныхВставка файла в таблицу базы данных в формате двоичных объектов

следующей мой код контроллера

public function usersubmit() 
{ 
    $this->form_validation->set_rules('name','Name','trim|required|min_length[5]|max_length[255]|xss_clean'); 
    $this->form_validation->set_rules('email','Email','trim|required|valid_email|is_unique[user.email]'); 
    $this->form_validation->set_rules('password','Password','required|min_length[8]|max_length[255]|trim|matches[passconf]|md5'); 
    $this->form_validation->set_rules('passconf','Password','required|trim'); 
    $this->form_validation->set_rules('phone','Mobile No.','trim|less_than[10000000000]'); 
    $this->form_validation->set_rules('city','City','trim'); 
    $this->form_validation->set_rules('pincode','Pincode','trim|numeric'); 
    /*$config['upload_path']='./files/images/profilepic/'; 
    $config['allowed_types']='gif|jpg|png|jpeg'; 
    $config['max_size']='16000'; 
    //$config['file_name']='' 
    //$this->load->library('upload',$config); 
    $this->upload->initialize($config);*/ 

    if(!$this->form_validation->run()) 
    { 
      $data['title']="Users"; 
      $data['page']="createuser"; 
      $this->load->view('main',data); 
      return; 
    } 
    $content; 

    $tmpname = $_FILES['propic']['tmp_name']; //The temporary filename of the file in which the uploaded file was stored on the server. 
    $filesize = $_FILES['propic']['size']; 
    $filetype = $_FILES['propic']['type']; 
    $allowedtypes=array("image/jpeg","image/jpg","image/png","image/gif"); 
    if($filesize>=0){ 
     if(in_array($filetype, $allowedtypes)) 
     { 
      $fp  = fopen($tmpname, 'r'); 
      $content = fread($fp, filesize($tmpname)); 
      $data['photo'] = addslashes($content); //it adds blackslashes after each quote(double or single) 
      fclose($fp); 
     } 
    } 

    //$fieldname='propic'; 

     $data['name']= $this->input->post('name'); 
     $data['email']= $this->input->post('email'); 
     $data['password']=$this->input->post('password'); 
     $data['phone']=$this->input->post('phone'); 
     $data['city']=$this->input->post('city'); 
     $data['pincode']= $this->input->post('pincode'); 
     $data['dob']=$this->input->post('dob'); 
     $data['id']=NULL; 
     $data['accesslevel']='2'; 
     $data['status']='1'; 
     $data['timestamp']=NULL; 

    if($this->user_model->createuser($data)) 
    { 
     $this->viewusers(); 
    } 
    else 
    { 
     $this->createuser(); 
    } 

    //$data 
} 

следующая функция используется модель

public function createuser($user) 
{ 
    $query= $this->db->insert('user',$user); 
    if($query) 
     return TRUE; 
    return false; 
} 

и форма входного сигнала в представлении

<form role="form" method="post" enctype="multipart/form-data" action="<?php echo site_url('start/usersubmit') ;?>"> 
<input type="file" class="form-control" name="propic" id="propic" /> 
<input type="submit" value="submit" name="submit"/> 
</form> 

Все здесь работает правильно, за исключением загруженного файла. Этот файл загружается в базу данных, но размер немного выше фактического (примерно на 5% больше), а также файл поврежден. То есть, когда я загружаю его из базы данных, файл не читается. Мне нужно знать, какая ошибка с моим кодом.

+0

Ваша проблема: '$ данных [ 'фото '] = addslashes ($ content); 'Зачем вам это нужно, когда метод CI' insert() 'уже ускоряет ваши данные для вас? – sjagr

+0

Также: http://stackoverflow.com/questions/7845233/how-to-convert-jpg-image-to-proper-blob-data-type-using-php рекомендуется использовать 'rb' как режим' fopen' , –

+0

@sjagr, без этого нет абсолютно загруженного файла, значение NULL отображается в базе данных. См. Это http://www.php-mysql-tutorial.com/wikis/mysql-tutorials/uploading-files-to-mysql-database.aspx –

ответ

0

После обсуждения в чате, это было решение:

Замените следующий код:

$content = fread($fp, filesize($tmpname)); 
$data['photo'] = addslashes($content); //it adds blackslashes after each quote(double or single) 

С:

 $content = fread($fp, filesize($tmpname)); 
     $data['photo'] = $content; 
Смежные вопросы