0

こんにちは、最近、プロフィール ページに画像をアップロードすることができましたが、ページを更新すると画像が消えてしまいます。これは、画像がデータベースにどのように配置されているかが原因だと思います。

モデルは次のとおりです。

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>
4

2 に答える 2

1

charフィールドのように、画像名だけをデータベースに保存するだけです。関数の直後にdo_upload、で画像名を取得できます$this->upload->file_name

そうすれば、ファイル全体ではなく、これをデータベースに簡単に保存できます。

ビューページで、htmlを介して画像パスを設定し、dbクエリから取得したファイル名だけを追加できます。

于 2012-11-24T08:38:39.657 に答える
0

簡単なメモ - codeigniter 2 を使用していますか? コンストラクターを次のように設定する必要があります。

 class HomeProfile extends CI_Controller 
 {

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

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

 } // end construct

モデルも同じです!年モデルでわかりました、多分私はこれを得ていませんが、あなたは持っています

 if ($this->exists($username))

しかし、あなたの方法は言う

 function putProfileImage($username, $img)

ユーザー名が空白の可能性がある場合は、次のようにデフォルトを設定する必要があります

function putProfileImage($username = 0, $img)

それなら多分あなたはできる

 if ($username === 0)

しかし、個人的には、挿入と更新を同じメソッドに入れず、それらを分割すると、デバッグがはるかに簡単になります。また -- autoload でセッション ライブラリをロードしましたか???

于 2012-11-25T01:40:52.297 に答える