PDF Print E-mail
Written by Administrator   
Monday, 05 November 2012 17:18

 Menyimpan Gambar ke database pada YII

 

Langkah pertama siapkan terlebih dahulu database tes dengan tabel siswa seperti berikut:

Field Jenis Ukuran/Panjang/Nilai
nis int 4
nama Varchar 30
jenkel Enum ‘Laki-laki’ , ‘Perempuan’
kelas Varchar 10
file_name Char 30
file_type Char 15
file_content Mediumblob  
file_size Int 11

 


Kemudian silakan buat model dan crud dari tabel siswa menggunakan GII.

Langkah selanjutnya buka file siswa.php yang ada pada folder model:
tambahkan variabel foto dengan cara ketikan script berikut:


<?php

 

/**

 * This is the model class for table "siswa".

 *

 * The followings are the available columns in table 'siswa':

 * @property integer $nis

 * @property string $nama

 * @property string $jenkel

 * @property string $kelas

 * @property string $file_name

 * @property string $file_type

 * @property string $file_content

 * @property integer $file_size

 */

class Siswa extends CActiveRecord

{

Public $foto;

...

Setelah menambahkan variabel foto kita perlu mendeklarasikan rules dari variabel foto tersebut dengan cara, cari script berikut:
 

public function rules()

{

                    // NOTE: you should only define rules for those attributes that

                    // will receive user inputs.

                    return array(

                    array('nis, nama, jenkel, kelas, file_name, file_type, file_content, file_size', 'required'),

                    array('nis, file_size', 'numerical', 'integerOnly'=>true),

                    array('nama, file_name', 'length', 'max'=>30),

                    array('jenkel', 'length', 'max'=>9),

                    array('kelas', 'length', 'max'=>10),

                    array('file_type', 'length', 'max'=>15),

 

                   // The following rule is used by search().

                    // Please remove those attributes that should not be searched.

                    array('nis, nama, jenkel, kelas, file_name, file_type, file_content, file_size', 'safe', 'on'=>'search'),

                    );

}

Setelah ditemukan silakan tambahkan script berikut dibawah script array('file_type', 'length', 'max'=>15),:

array('foto', 'file', 'types'=>'jpg, gif, png, jpeg','allowEmpty' => true),

Selain itu hapus, file_name, file_type, file_content, file_sizepada rules requiredkarena variabel tersebut nanti bisa dikosongkan tidak harus diisi.

Sekarang tiba pada intinya untuk melakukan penyimpanan gambar ke database kita perlu menambahkan function before save pada model Siswa,function inidigunakan untuk melakukan konversi dari variabel foto ke dalam variabel  file_name, file_type, file_size, file_content. Scriptnya adalah sebagai berikut:

                public function beforeSave()

                {

                if(isset($this->foto))

                {

                if($file=CUploadedFile::getInstance($this,'foto'))

                {

                $this->file_name=$file->name;

                $this->file_type=$file->type;

                $this->file_size=$file->size;

                $this->file_content=file_get_contents($file->tempName);

                }

                }

                return parent::beforeSave();

                }

Kita telah selesai melakukan editing pada model Siswa, selanjutnya kita perlumelakukan editing pada file form.php pada folder view/siswa. Silakan buka file tersebut selanjutnya kita perlu menambahkan text field untuk variabel foto. Silakan cari script ini:

<div class="row">

                <?php echo $form->labelEx($model,'file_name'); ?>

                <?php echo $form->textField($model,'file_name',array('size'=>30,'maxlength'=>30)); ?>

                <?php echo $form->error($model,'file_name'); ?>

</div>

<div class="row">

                <?php echo $form->labelEx($model,'file_type'); ?>

                <?php echo $form->textField($model,'file_type',array('size'=>15,'maxlength'=>15)); ?>

                <?php echo $form->error($model,'file_type'); ?>

</div>

<div class="row">

                <?php echo $form->labelEx($model,'file_content'); ?>

                <?php echo $form->textField($model,'file_content'); ?>

                <?php echo $form->error($model,'file_content'); ?>

</div>

<div class="row">

                <?php echo $form->labelEx($model,'file_size'); ?>

                <?php echo $form->textField($model,'file_size'); ?>

                <?php echo $form->error($model,'file_size'); ?>

</div>

hapus script tersebut dan ganti dengan script berikut:

<div class="row">

                <?php  echo $form->labelEx($model,'foto'); ?>

                <?php  echo $form->fileField($model,'foto'); ?>

                <?php  echo $form->error($model,'foto'); ?>

</div>

Selanjutnya kita perlu mengedit script berikut:

<?php $form=$this->beginWidget('CActiveForm', array(

                'id'=>'siswa-form',

                'enableAjaxValidation'=>false,
            ));

 ?>

Menjadi:

<?php $form=$this->beginWidget('CActiveForm', array(

                'id'=>'siswa-form',

                'enableAjaxValidation'=>false,

                'htmlOptions' => array('enctype' => 'multipart/form-data'),       

             ));
?>

Kita telah berhasil melakukan penyimpanan file gambar kedalam database.


 

Sekarang pertanyaannya bagaimana cara menampilkannya???

 

Untuk menampilkan gambar tersebut kita memanfaatkan fungsi base64_encode, silakan buka file siswa.php pada folder model.
Kemudian tambahkan fungsi berikut kedalam class model:

public function data_uri($file, $mime, $contents) {

    $base64 = base64_encode($contents);

    return "data:$mime;base64,$base64";

}

Setelah itu, misal kita ingin menampilkan foto tersebut pada file view pada folder  view/siswa tinggal kita panggil dengan script berikut berikut:

<?php if($model->file_name){ ?>

<img src="<?php echo $model->data_uri("$model->file_name", "$model->file_type","$model->file_content");

?>" alt="fotonya" height=120 width=100>

<?php } ?>

Maka kita berhasil menampilkan foto tersebut.
 

 

Add comment