我能够将我的图像的文件名保存在数据库中但是当我刷新屏幕时它会消失 - 为什么?

时间:2012-11-27 22:28:04

标签: php image codeigniter

我需要将图像保存到会话中:

到目前为止,这是我的代码:

型号:

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


    }

  function exists($username)
    {
     $this->db->select('*')->from("profileimages")->where('user', $username);
     $query = $this->db->get();

     if ($query->num_rows() > 0)
     {

        return true;
        /*
         echo "user $user exists!";
        $row = $query->row();
        echo " and his profileimage is $row->profileimage";
        */
       }

    else

        {

        return false;
        //echo "no such user as $user!";
         }

    }


function putProfileImage($username, $img)
{


    $record = array('user' => $username, 'profileimage' => $img);
    if ($this->exists($username))
    {
        $this->db->where('user', $username)->update('profileimages', $record);


    }
    else
    {
        $this->db->where('user', $username)->insert('profileimages', $record);

    }

}

function getProfileImage($username)
{

    $this->db->select('*')->from('profileimages')->where('user', $username);

    $query = $this->db->get();
      if ($query->num_rows() > 0){
    $row = $query->row();
    return $row->profileimage;
     }

     return "";
    }
}

控制器:

function __construct()
{
// Call the parent construct
   parent::__construct();

   $this->load->model("profiles");
   $this->load->model("profileimages");
   $this->load->helper(array('form', 'url'));      

} 


function upload()
{
    $config = array(

        'allowed_types' =>'gif|jpg|jpeg|png',
        'upload_path' =>'./web-project-jb/assets/puploads/',
         'max_size' => 10000,
         'max_width' => 1024,
        'max_height' => 768);


    $this->load->library('upload', $config);
    $img = $this->session->userdata('img');
    $username = $this->session->userdata('username');
//fail show upload form
if (! $this->upload->do_upload())
{

    $error = array('error'=>$this->upload->display_errors());

    $username = $this->session->userdata('username');


    $viewData['username'] = $username;
    $viewData['profileText'] = $this->profiles->getProfileText($username);

    $this->load->view('shared/header');
    $this->load->view('homeprofile/homeprofiletitle', $viewData);
    $this->load->view('shared/nav');
    $this->load->view('homeprofile/homeprofileview', $error, $viewData, array('error' => ' ' ));
    $this->load->view('shared/footer');

    //redirect('homeprofile/index');

   }

  else
   {
    //successful upload so save to database


    $file_data = $this->upload->data();

    $img = $file_data['file_name'];

    $data['img'] = '/web-project-jb/assets/puploads/'.$file_data['file_name'];
    // you may want to delete the image from the server after saving it to db
    // check to make sure $data['full_path'] is a valid path
    // get upload_sucess.php from link above
    //$image = chunk_split( base64_encode( file_get_contents( $data['file_name'] ) ) );

    $this->img = $this->session->userdata('img');


    $this->username = $this->session->userdata('username');

    $this->profileimages->putProfileImage($username, $img);

    $data['username'] = $username;
    $data['profileimages'] = $this->profileimages->getProfileImage($username);


    $viewData['username'] = $username;
    $viewData['profileText'] = $this->profiles->getProfileText($username);

    $username = $this->session->userdata('username');

    $this->load->view('shared/header');
    $this->load->view('homeprofile/homeprofiletitle', $viewData);
    $this->load->view('shared/nav');
    $this->load->view('homeprofile/homeprofileview', $data, $viewData);
    $this->load->view('shared/footer');


    //redirect('homeprofile/index');
    }

 }



   function index()
  {

    $username = $this->session->userdata('username');

    $data['username'] = $username;
    $data['profileimages'] = $this->profileimages->getProfileImage($username);

    $viewData['username'] = $username;
    $viewData['profileText'] = $this->profiles->getProfileText($username);

    $this->load->view('shared/header');
    $this->load->view('homeprofile/homeprofiletitle', $viewData);
    $this->load->view('shared/nav');
    //$this->load->view('homeprofile/upload_form', $data);
    $this->load->view('homeprofile/homeprofileview', $data, $viewData, array('error' => ' ' ) );
    $this->load->view('shared/footer');
  }

 }

查看:

<h3><?="Profile Image"?></h3>
 <img src="<?php if (isset($img)) echo base_url($img); ?>" 
 width='300' height='300'/>
  <?=form_open_multipart('homeprofile/upload');?>
    <input type="file" name="userfile" value=""/>
    <?=form_submit('submit', 'upload')?>
    <?=form_close();?> 
    <?php if (isset($error)) echo $error;?>
  </div> 
</div> 

我想我是否真的需要将图像保存为数据库而不是文件名? get profileimage函数用于将图像返回到屏幕,以便它保持在那里。再次感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

这一行是问题所在:

$this->profileimages->putProfileImage($username, $img);

您正在保存image,但不保存路径。所以你说你需要保存实际路径:

$img = '/web-project-jb/assets/puploads/'.$file_data['file_name'];
...etc
$this->profileimages->putProfileImage($username, $img);

希望这可以帮助您解决问题。

修改

关于session尝试执行以下操作:

$this->session->set_userdata($img); //note I've changed the name above as well.

检查codeigniter会话类guide以获取更多参考。