Welcome

Welcome, thanks to look my blog

Wednesday 8 October 2014

Menyimpan Gambar ke database pada YII

 Menyimpan Gambar ke database pada YII

Langkah pertama siapkan terlebih dahulu database tes dengan tabel siswa seperti berikut:
FieldJenisUkuran/Panjang/Nilai
nisint4
namaVarchar30
jenkelEnum‘Laki-laki’ , ‘Perempuan’
kelasVarchar10
file_nameChar30
file_typeChar15
file_contentMediumblob 
file_sizeInt11


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 caracari script berikut:
 
public function rules()
{
                    // NOTE: you should only define rules for those attributes that
                    // will receive user inputs.
                    return array(
                    array('nisnamajenkelkelas, 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('nisnamajenkelkelas, 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,functioninidigunakan untuk melakukan konversi dari variabel foto ke dalam variabel  file_name, file_type, file_size, file_contentScriptnya 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 Siswaselanjutnya kita perlumelakukan editing pada file form.php pada folder view/siswaSilakan buka filetersebut selanjutnya kita perlu menambahkan text field untuk variabel fotoSilakan 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_encodesilakan 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 itumisal 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.

No comments:

Post a Comment