こんにちは、最近、プロフィール ページに画像をアップロードすることができましたが、ページを更新すると画像が消えてしまいます。これは、画像がデータベースにどのように配置されているかが原因だと思います。
モデルは次のとおりです。
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 Null;
}
}
これが私のコントローラーです:
class HomeProfile extends CI_Controller
{
function HomeProfile()
{
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');
$this->profileimages->putProfileImage($username, $this->input->post("profileimage"));
//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();
$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->username = $this->session->userdata('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['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');
}
}
モデルの putprofileimages 関数を見ると、appends コマンドをここのどこかに入れると思います。画像のファイル名がデータベースの profileimage フィールドに表示されるようにします。また、リフレッシュしてもプロフィール画像が画面に残ることを願っています
<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>
<div id="secondary">
<p>
<?=$profileText;?>
</p>
<p>
<?=form_open('homeprofile/changetext'); ?>
<?php $msgbox = array(
'name' => 'profiletext',
'rows' => '8',
'cols' => '30',
);?>
<?=form_textarea($msgbox);?>
</p>
<p>
<?=form_submit('submit', 'Change'); ?>
<?=form_close(); ?>
</p>
</div>