Pemecahan masalah penyusunan struktur tree dg contoh kasus operasi matematika(C#)

Pada operasi matematika, kita kerap kali menghadapi masalah siapa operasi yang harus didahulukan atau yg terakhir kita eksekusi, misal:  5+4^2*7

Pada operasi diatas, kita tidak bisa langsung melakukan perhitungan dari depan, misal 5+4=9, 9^2=81, dan 81*7=567. Tidak seperti itu bukan.. Untuk menghitung operasi di atas, kita harus mulai dari 4^2=16, lalu 16*7=112, dan 112+5=117….

567 dan 117, berbeda jauh bukan? dan sialnya, akan ada banyak operasi matematika yang jauh lebih kompleks dari kasus di atas. Mungkin ini bukanlah hal yang sulit bila kita hitung secara manual, tapi ini tidaklah mudah untuk kita terjemahkan ke dalam program. Maka dari itu, kita perlu menerapkan suatu teknik yang bisa mengatur pengurutan dari eksekusi suatu operasi. Teknik yang akan saya bahas disini adalah dengan menggunakan strutur pohon http://en.wikipedia.org/wiki/Tree_data_structure. Untuk memahami lebih jauh tentang tree silahkan anda pelajari sendiri, karena untuk postingan ini, saya akan berfokus pada teknik pemrogramannya, bukan konsep dari tree itu sendiri..

Baiklah, saya akan membuat sebuah contoh kasus dimana kita akan membuat program kalkulator yang dapat mengeksekusi lebih dari satu operasi dimana di dalamnya terdapat struktur tree untuk menentukan jalanny suatu operasi..
Misal kita memiliki kasus seperti beriktu:

Jelas anda tahu bukan hasilnya berapa? Yak silahkan anda hitung sendiri ^_^..

Mari kita jalannya perhitungan tersebut:

  1. 1^9…..(1), pangkat adalah operasi yang pertama kita jalankan.
  2. 5*3…..(2)
  3. 8/2…..(3)
  4. 3-2…..(4)
  5. (3)*(4)….(5)
  6. (1 )+(2)….(6)
  7. (6)+(5)… finish..

Dari kasus tersebut, hal pertama yang harus kita lakukan adalah memberi level pada masing2 operasi. Level sendiri kita gunakan untuk mengetahui siapa yang harus dikerjakan lebih dulu dan belakangan:

private int duluan(string n)

{

int antri;

if (n == “^”) antri = 3;

else if (n == “!” || n == “C” || n == “P”) antri = 4;

else if (n == “*” || n == “/”) antri = 2;

else if (n == “+” || n == “-“) antri = 1;

else antri = 0;

return antri;

}

Code diatas digunakan untuk mengenali level-level operasi yang dmasukkan. Semakin besar level yang dimilik oleh suatu operasi, maka operasi tersebut akan diutamakan dari operasi lain yang level nya lebih rendah..

Setelah itu, dalam satu kasus, tentunya kita harus mengenali mana saja yang termasuk operasi atau mana yang bukan. Misal: 7+5, dari operasi di atas, tentunya program harus tahu apakah “7” merupakan sebuah angka? atau “+” tersbut mrpkn sebuah angka atau operasi? Nah, maka dari itu kita harus kenali satu persatu, berikut pemecahan yang saya buat dari masalah tersebut:

private int operato(string i)

{

if (i == “^” || i == “*” || i == “/” || i == “+” || i == “-” || i == “!” || i == “C” || i == “P”)

return 1;

else

return 0;

}

Dari code di atas, akan dikenali apakah suatu inputan bernilai sebagai operator atau angka..

Di dalam tree, kita mengenal istilah pop dan push(silahkan pelajari lagi mengenai konsep ini). Saya akan jelaskan secara singkat, untuk melakukan pengurutan operasi, kita akan melibatkan suatu tempat penyimpanan sementara yang berbentuk array yang berguna untuk membantu kita menerapkan pengurutan operasi. Nah, “push” sendiri adalah suatu perintah dimana kita ingin menginput suatu nilai ke dalam suatu tempat penyimpanan tadi, sedangkan “pop” adalah kondisi kita ingin mengambil nilai terakhir dari suatu array dan mengeluarkannya dari tempat penyimpanan sementara tersebut. Karena ada ny nilai tempat penyimpanan tersebut, maka kita harus mendeklarasikannya ke dalam sebuah variabel array(anda bisa menggunakan tipe list<> atau yg lainnya, tapi saya contohkan dengan array):

private double[] nilai = new double[100];//variabel penyimpanan sementara

private int b;//indeks variabel nilai[]

Setelah itu, kita buat perintah push dan pop nya:

private void pushHitung(double isi)

{

b += 1;

nilai[b] = isi;

}

private double popHitung()

{

double bentar;

bentar = nilai[b];

b–;

return bentar;

}
Code di atas telah memperlihatkan bagaimana suatu nilai akan disimpan ke dalam array.

Untuk menyempurnakan aplikasi perhitungan kita, mari kita tambahkan agar tidak hanya operasi-operasi biasa yang bisa kita eksekusi, tetapi kita buat perhitungan2 seperti “sin”,”cos”,”tan”, “permutasi”, “combinasi”, dll dapat kita eksekusi juga. Untuk melakukan hal itu, pertama-tama, kita harus definisikan apa2 saja yang bisa kita eksekusi:

string[] strFunctionsdepan ={“sqrt”,”abs”, “sin”, “cos”, “tan”, “asin”,”acos”,”atan”,

“sinh”,”cosh”,”tanh”,”exp”,”ln”,”log”};

string[] strFunctionBelakang = { “!” };

string[] strFunctionDeBel = { “P”, “C” };


Operasi2 tersebut saya bagi menjadi tiga jenis, “strFunctiondepan” dimana operasi tersebut akan diletakkan di depan angka, misal cos(90), lalu ada “strFunctionBelakang” dimana operasi tersebut akan diletakkan di belakang suatu angka, misal faktorial: 5!, dan satu lagi operasi “strFunctionDeBel” dimana operasi tersebut diletakkan di antara angka yang akan akan di eksekusi, misal permutasi: 5P2.

Nah, karena kita sudah mendefinisikan beberapa penghitugan sendiri, berarti program kita juga harus bisa melakukan pengenalan terhadap operasi-operasi tersebut, mari kita buat agar program dapat mengenali penghitungan yang sudah kita definisikan tersebut:

private bool cekFungsiDepan(string isi)

{

for (int i = 0; i < strFunctionsdepan.Length; i++)

if (string.Compare(isi, strFunctionsdepan[i], true) == 0)

return true;

return false;

}

private bool cekFungsiBelakang(string isi)

{

for (int i = 0; i < strFunctionBelakang.Length; i++)

if (string.Compare(isi, strFunctionBelakang[i], true) == 0)

return true;

return false;

}

private bool cekFungsiDeBel(string isi)

{

for (int i = 0; i < strFunctionDeBel.Length; i++)

if (string.Compare(isi, strFunctionDeBel[i], true) == 0)

return true;

return false;

}

Code di atas berguna untuk mengenali fungsi yang telah kita definisikan sendiri.

Setelah kita berhasil mengenali operasi2 tersebut, mari kita buat suatu perintah yang akan mendefinisikan apa perintah yang akan dilakukan jika kita mengeksekusi program tersebut:

private double operation(string fungsi, double nilai)

{

double hasil;

switch (fungsi)

{

case “sin”:

hasil = Math.Sin(nilai);

break;

case “cos”:

hasil = Math.Cos(nilai);

break;

case “tan”:

hasil = Math.Tan(nilai);

break;

case “abs”:

hasil = Math.Abs(nilai);

break;

case “asin”:

hasil = Math.Asin(nilai);

break;

case “acos”:

hasil = Math.Acos(nilai);

break;

case “atan”:

hasil = Math.Atan(nilai);

break;

case “sinh”:

hasil = Math.Sinh(nilai);

break;

case “cosh”:

hasil = Math.Cosh(nilai);

break;

case “tanh”:

hasil = Math.Tanh(nilai);

break;

case “exp”:

hasil = Math.Exp(nilai);

break;

case “ln”:

hasil = Math.Log(nilai);

break;

case “log”:

hasil = Math.Log10(nilai);

break;

case “sqrt”:

hasil = Math.Sqrt(nilai);

break;

default:

hasil = 0;

break;

}

return hasil;

}

Setelah itu, mari kita maju ke tahap dimana input yang kita masukkan akan di urutkan terlebih dahulu berdasarkan levelnya:

private int x, y;//indeks array

private string[] stack = new string[100];//tempat menyimpan sementara

private string[] itu = new string[100];//variabel penyimpanan akhir

private string sementara = “”;//penyimpanan string berbentuk digit sementara

public ubahOrder(string isi)

{

string awal;

x = 0; y = 0;

//Membaca tiap karakter sesuai panjangnya

for (int i = 0; i < isi.Length; i++)

{

awal = isi.Substring(i, 1);

if (awal == “(“)

{

if (sementara != “”)

simpan();

push(awal);

}

else if (awal == “)”)

{

//Memasukkan angka ke dalam nilai

if (sementara != “”)

simpan();

while (stack[x] != “(“)

{

itu[y] = pop();

y += 1;

}

pop();

}

else

{

if (operato(awal) == 1)

{

while (duluan(awal) <= duluan(stack[x]) && x != 0)

{

if (sementara != “”)

simpan();

itu[y] = pop();

y += 1;

}

push(awal);

//Memasukkan angka ke dalam nilai

if (sementara != “”)

simpan();

}

else

{

sementara += awal;

}

}

}

//Memasukkan angka ke dalam nilai

if (sementara != “”)

simpan();

//Mengeluarkan nilai yang masih ada di dalam stack

if (x != 0)

{

while (x > 0 && stack[x] != “(“)

{

itu[y] = pop();

y += 1;

}

}

}

Anda melihat di dalam code di atas memanggil sebuah fungsi simpan, yang digunakan untuk menyimpan tumpukan yang baru untuk pengurutannya, mari kita buat fungsi simpan tersebut seperti beriktu:

private void simpan()

{

itu[y] = sementara;

y += 1;

sementara = “”;

}

Setelah itu selesai, mari kita buat sebuah perintah yang digunakan untuk melakukan perhitungan dari operasi yang kita masukkan:

private double hasil;//penyimpanan hasil akhir

public hitung(string[] nilai, int batas)

{

hasil = 0;

int s;

string kar;

double kiri, kanan;

b = 0;

for (s = 0; s < batas; s++)

{

kar = nilai[s];

if (kar == “^”)

{

kanan = popHitung();

kiri = popHitung();

hasil = (Math.Pow(kiri, kanan));

pushHitung(hasil);

}

else if (kar == “*”)

{

kanan = popHitung();

kiri = popHitung();

hasil = (kiri * kanan);

pushHitung(hasil);

}

else if (kar == “/”)

{

kanan = popHitung();

kiri = popHitung();

hasil = (kiri / kanan);

pushHitung(hasil);

}

else if (kar == “+”)

{

kanan = popHitung();

kiri = popHitung();

hasil = (kiri + kanan);

pushHitung(hasil);

}

else if (kar == “-“)

{

kanan = popHitung();

kiri = popHitung();

hasil = (kiri – kanan);

pushHitung(hasil);

}

else if (cekFungsiDepan(kar))

{

s += 1;

pushHitung(operation(kar, double.Parse(nilai[s])));

hasil = operation(kar, double.Parse(nilai[s]));

}

else if (cekFungsiBelakang(kar))

{

double ini = popHitung();

hasil = faktorial(ini);

pushHitung(hasil);

}

else if (cekFungsiDeBel(kar))

{

double ini = popHitung();

double itu = popHitung();

if (kar == “P”)

hasil = permutasi(itu, ini);

else if (kar == “C”)

hasil = kombinasi(itu, ini);

pushHitung(hasil);

}

else

{

pushHitung(double.Parse(kar));

hasil = double.Parse(kar);

}

}

}

Selesai, anda tinggal memasukkan text yang di input user ke kalkulator dan mengeksekusinya setelah melakukan pengurutan:

ubahOrder baru = new ubahOrder(“input dari user”);

hitung ini = new hitung(baru.getItu(), baru.getY());

textBox2.Text = ini.getHasil().ToString();

Selesai…

Hasil dari code di atas akan menjadi seperti berikut:

Bila ada yang belum jelas, anda dapat mengunduh source dari link berikut: http://sabitblog.blogspot.com/2010/08/smart-statmat.html. Disana akan ada link sebuah aplikasi open source yang dapat anda download juga source code ny…

Selamat mencoba…


Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

Advertisements

Menghubungkan dropdownlist dg Databse pada yii framework

Pada kasus yang sama dengan kasus sebelumnya pada ASP.NET MVC yg bisa anda lihat di https://sabitlabscode.wordpress.com/2011/05/20/menghubungkan-dropdownlist-dg-databse-pada-asp-net-mvc-c/

Kita akan coba pecahkan kasus tersebut pada yii framework..

Baiklah, untuk menghubungkan dropdownlist ke database, maka kita perlu memanggil “model” dari tabel yang kita tuju. Sehingga pada form ny harus sedikit anda modifikasi menjadi seperti berikut:

<div class=”row”>

<?php echo $form->labelEx($model,’SeksiId’); ?>

<?php

echo $form->dropDownList($model,’SeksiId’,CHtml::listData(K5Seksi::model()->findAll(), ‘SeksiId’, seksi’),array(’empty’=>’–please select–‘));

?>

<?php echo $form->error($model,’SeksiId’); ?>

</div>


Dari contoh code di atas, bisa dilihat bahwa dropdownlist mengambil nilai dari tabel “K5Seksi” melalui model “K5Seksi”. Lalu dropdownlist akan memasukkan semua nilai “SeksiId” dari model “K5Seksi” ke dalam nilainya. Sedangkan untuk text yang akan ditampilkannya, dropdownlist tersebut mengambil nilai dari “seksi” yang ada di dalam tabel “K5Seksi”

Selesai, selamat mencoba…

Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

Menghubungkan dropdownlist dg Databse pada ASP.NET MVC (C#)

Misal kita memiliki tabel seperti berikut di database:

Okeh, misal kita ingin membuat aksi untuk melakukan insert data pada tabel “K5Subseksi”. Tabel “K5Subseksi” disini memiliki sebuah nilai yang mengacu pada “SeksiId” yang jelas harus konsisten dengan “SeksiId” pada tabel “K5Seksi”.  Untuk menghindari terjadinya kesalahan input oleh user, maka ada baiknya kita buat “SeksiId” pada action insert nanti dengan menampilkan dropdownlist yang isinya adalah semua “Seksi” yang ada pada tabel “K5Seksi” tapi nilai yang masuk ke database ny adalah “SeksiId”. Okeh, mari kita mulai:

Pertama-tama pada controller anda, anda haris mendefinisikan sebuah variabel SelectList yang menampung semua nilai dari tabel “K5Seksi”, misal:

public ActionResult SubseksiCreate()

{

ViewData[“seksi”] = new SelectList(db.K5Seksis, “SeksiId”, “Seksi”);

return View();

}

lalu pada view ny, panggi variabel yang telah kita definisikan tadi ke dalam dropdownlist, seperti berikut:

<%: Html.DropDownListFor(model=> model.SeksiId, (SelectList)ViewData[“seksi”])%>

Setelah selesai silahkan anda testing dengan cara menjalankan action create terebut di program anda….

Selesai, selamat mencoba…

Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

Membuat User Level Access pada ASP.NET MVC

Di asp.net mvc, anda dapat membuat user level access dengan sangat mudah… Malah bisa dibilang kita sangat dimanjakan dengan fasilitas yang sudah disediakan dari framework ini… Tapi, dengan syarat anda menggunakan ASP.NET membership yang sudah disediakan oleh framework ini..  Berikut contoh memberikan access rule pada ASP.NET MVC:

Misal kita ingin memberikan rule access pada action berikut:

public ActionResult Index()
{
}

Jika anda ingin memberikan izin kepada semua orang agar dapat mengakses action tersebut maka anda tinggal membiarkan code action di atas tetap seperti itu. Jika anda hanya ingin mengizinkan action tersebut hanya bisa di akses oleh orang yang telah login ke dalam sistem anda, buat action di atas menjadi seperti ini:

[Authorize]
public ActionResult Index()
{
}

Jika anda hanya ingin memberikan akses tersebut kepada role “admin”, maka buat seperti berikut:

[Authorize(Roles = “admin”)]
public ActionResult Index()
{
}

Dan jika anda ingin memberikan akses tersebut kepada role “admin” dan “bedahara”, maka buat seperti berikut:

[Authorize(Roles = “admin,bendahara”)]
public ActionResult Index()
{
}

Mudah sekali bukan…

Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

Membuat User Level Access pada yii

Pada satu kasus saat anda membangun sebuah aplikasi web, kadang ada kondisi dimana anda harus memberikan akses suatu operasi hanya kepada beberapa user tertentu(misal  hanya bisa di akses oleh admin). Biasanya sih, ada beberapa programmer yang membedakan aplikasi admin dan user untuk mengatasi hal ini. Tapi gimana kalo ceritanya ada bnyak jenis user? Di yii framework sendiri kita bisa pake SRBAC extension yg udah ada disini. Tapi yg akan saya jelaskan di sini adalah gmana cara membuat ny secara manual.. Okeh, berikut caranya:

pada models user nya, tambahkan class seperti berikut:

class LevelLookUp{
const MEMBER = 3;
const ADMIN = 2;
const SUPERADMIN = 1;
// For CGridView, CListView Purposes
public static function getLabel( $level ){
if($level == self::MEMBER)
return ‘Member’;
if($level == self::ADMIN)
return ‘Administrator’;
if($level == self::SUPERADMIN)
return ‘SuperAdmin’;
return false;
}
// for dropdown lists purposes
public static function getLevelList(){
return array(
self::MEMBER=>’Member’,
self::ADMIN=>’Administrator’,
self::SUPERADMIN=>”SuperAdmin”);
}
}

tentu anda bisa custom sendiri kalo mau nambahin level yg lainnya..
lalu pada protected/components, tambahkan sebuah class yg mengextend CWebUser, masukkan kode berikut:

loadUser();
if ($user)
return $user->id_level==LevelLookUp::SUPERADMIN;
return false;
}

function isAdmin(){
$user = $this->loadUser();
if ($user)
return $user->id_level==LevelLookUp::ADMIN;
return false;
}
// saving logged users into a state
protected function afterLogin()
{
$this->setState(‘___uid’, $this->id);
return true;
}
// Load user model.
protected function loadUser()
{
if ( $this->_model === null ) {
$this->_model = UserAdmin::model()->findByPk( $this->getState(‘___uid’));
}
return $this->_model;
}
}

rubah kode pada protected/config/main.php menjadi seperti berikut:

‘components’=>array(
‘user’=>array(
// enable cookie-based authentication
‘class’=>’application.components.EWebUser’,
‘allowAutoLogin’=>true,
),

Selesai… Untuk memberi batasan hak akses pada beberapa operasi, lakukan setting seperti berikut pada controller anda:

array(‘allow’, // allow admin user to perform ‘admin’ and ‘delete’ actions
‘actions’=>array(‘index’,’admin’,’delete’),
‘expression’=>’$user->isSuperAdmin()’,
),

Selamat mencoba…

sumber: http://www.yiiframework.com/wiki/191/implementing-a-user-level-access-system/

Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

Membuat operasi login, logout dan register pada yii

Operasi yang akan kita kerjakan adalah yang berkaitan dengan database. Silahkan lihat tutor sebelumnya jika anda belum memahami teknik menghubungkan database pada yii disini. Okeh, pertama-tama mari kita buat buat dua buah table di database, yaitu table “user” dan table “level” yang isinya sebagai berikut:

CREATE TABLE IF NOT EXISTS `tbl_level_admin` (
`id_level` int(11) NOT NULL AUTO_INCREMENT,
`level` varchar(20) NOT NULL,
PRIMARY KEY (`id_level`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

INSERT INTO `tbl_level_admin` (`id_level`, `level`) VALUES
(1, ‘Super Admin’),
(2, ‘Admin’),
(3, ‘Customer’);

CREATE TABLE IF NOT EXISTS `tbl_user_admin` (
`id_user` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(30) NOT NULL,
`password` varchar(50) NOT NULL,
`enkrip` varchar(50) NOT NULL,
`email` varchar(30) NOT NULL,
`inisial` varchar(10) DEFAULT NULL,
`deskripsi` text,
`id_level` int(11) NOT NULL,
PRIMARY KEY (`id_user`),
KEY `id_level` (`id_level`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;

ALTER TABLE `tbl_user_admin`
ADD CONSTRAINT `tbl_user_admin_ibfk_1` FOREIGN KEY (`id_level`) REFERENCES `tbl_level_admin` (`id_level`);

Setelah itu buatlah operasi CRUD untuk tabel “tbl_user_admin” dengan menggunakan gii seperti pada tutor sebelumnya. Setelah selesai, mari kita hubungkan form login yang sudah ada pada aplikasi web bawaan yii dengan database kita. Berikut caranya:

Pertamax, buka file pada folder: protected/components/UserIdentity.php.

Ganti code pada function authenticate menjadi code dibawah ini:

public function authenticate()
{
$user=UserAdmin::model()->find(‘LOWER(username)=?’,array(strtolower($this->username)));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if(!$user->validatePassword($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else
{
$this->_id=$user->id_user;
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode==self::ERROR_NONE;
}

Selesai, sekarang form login anda sudah terhubung dengan database “tbl_user_admin” kita tadi…

Kalo ada login tentu ada juga form register. Nah, sekarang mari kita buat form register kita. Sebelumnya kita tentukan dulu bahwa di form register nanti akan ada validasi sbb:

-ada captcha dan isian pada captcha harus sesuai dengan yang ada di gambar

-validasi pada inputan email

-ada validasi password1 dan password2 untuk memastikan bahwa user tidak salah mengetik password

-username, password, email, captcha tidak boleh kosong

-memberi panjang minimal dan maksimal pada beberapa inputan

Okeh, stelah selesai menentukan batasannya, mari kita mulai…. Berikut caranya:

Buka file pada protected/controllers/UserAdminControllers.php.

Karena kita mau menambahkan captcha pada controllers, mari kita tambahkan captcha seperti pada penjelasan yang ada disini, yaitu dengan menambahkan code berikut pada “UserAdminControllers”:

public function actions()
{
return array(
// captcha action renders the CAPTCHA image displayed on the contact page
‘captcha’=>array(
‘class’=>’CCaptchaAction’,
‘backColor’=>0xFFFFFF,
),
// page action renders “static” pages stored under ‘protected/views/site/pages’
// They can be accessed via: index.php?r=site/page&view=FileName
‘page’=>array(
‘class’=>’CViewAction’,
),
);
}

Agar captcha diizinkan untuk diakses user yang akan register(belum login) maka kita berikan akses dengan merubah method accessRules() menjadi seperti berikut:

return array(
array(‘allow’, // allow all users to perform ‘index’ and ‘view’ actions
‘actions’=>array(‘create’,’captcha’),
‘users’=>array(‘*’),
),
array

Selesai sudah kita otak-atik controllers ny, sekarang saatnya kita otak-atik modelnya dengan cara:
Buka protected/models/UserAdmin.php

Ubah isinya sehingga menjadi seperti berikut:

class UserAdmin extends CActiveRecord
{
public $password2;
public $verifyCode;

public static function model($className=__CLASS__)
{
return parent::model($className);
}

public function tableName()
{
return ‘tbl_user_admin’;
}

public function rules()
{
return array(
array(‘username, password, email,verifyCode’, ‘required’),
array(‘verifyCode’, ‘captcha’, ‘allowEmpty’=>!extension_loaded(‘gd’)),
array(‘id_level’, ‘numerical’, ‘integerOnly’=>true),
array(‘username, email’, ‘length’, ‘max’=>30),
array(‘username’, ‘filter’, ‘filter’=>’strtolower’),
array(‘username’,’unique’),
array(‘password, enkrip’, ‘length’, ‘max’=>50,’min’=>5),
array(‘password2’, ‘length’, ‘max’=>50, ‘min’=>5),
array(‘password’, ‘compare’,’compareAttribute’=>’password2′),
array(‘inisial’, ‘length’, ‘max’=>10),
array(’email’,’email’,’checkMX’=>true),
array(‘deskripsi’, ‘safe’),
// The following rule is used by search().
// Please remove those attributes that should not be searched.
array(‘id_user, username, email, inisial, deskripsi, id_level’, ‘safe’, ‘on’=>’search’),
);
}

public function relations()
{
return array(
‘idLevel’ => array(self::BELONGS_TO, ‘LevelAdmin’, ‘id_level’),
);
}

public function attributeLabels()
{
return array(
‘id_user’ => ‘Id User’,
‘username’ => ‘Username’,
‘password’ => ‘Password’,
’email’ => ‘Email’,
‘inisial’ => ‘Inisial’,
‘deskripsi’ => ‘Deskripsi’,
);
}

public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.

$criteria=new CDbCriteria;

$criteria->compare(‘id_user’,$this->id_user);
$criteria->compare(‘username’,$this->username,true);
$criteria->compare(‘password’,$this->password,true);
$criteria->compare(‘enkrip’,$this->enkrip,true);
$criteria->compare(’email’,$this->email,true);
$criteria->compare(‘inisial’,$this->inisial,true);
$criteria->compare(‘deskripsi’,$this->deskripsi,true);
$criteria->compare(‘id_level’,$this->id_level);

return new CActiveDataProvider(get_class($this), array(
‘criteria’=>$criteria,
));
}

public function validatePassword($password)
{
return $this->hashPassword($password,$this->enkrip)===$this->password;
}

public function hashPassword($password,$salt)
{
return md5($salt.$password);
}

public function beforeSave()
{
$isinya=$this->generateSalt();
$dua=$this->password;
$this->enkrip=$isinya;
$this->password=$this->hashPassword($dua,$isinya);
$this->id_level=3;
return true;
}

protected function generateSalt()
{
return uniqid(”,true);
}
}

public $password2;
public $verifyCode;

dua baris di atas untuk menampung variabel password2(password konfirmasi) dan verifyCode(captcha).

public function rules() ===> mendefinisikan batasan/validasi dari variabel yang ada.
public function attributeLabels()===> mengeset label yang ada pada masing-masing variabel
public function validatePassword($password)===>mengecek apakah password sudah benar ato belum
public function hashPassword($password,$salt)===>mengenkripsi password sesuai dengan code yang diberikan
public function beforeSave()===>perintah ini dijalankan sebelum dilakukan penyimpanan
protected function generateSalt()===>menggenerate otomatis code enkripsi password.

Setelah kita otak-atik models ny, mari kita otak-atik views nya dengan cara:
Buka file pada protected/views/userAdmin/_form.php. Ubah code ny hingga menjadi seperti berikut:

Setelah mengubah code _form.php menjadi seperti gambar di atas, sekarang berikan link pada form login agar user dapat mengakses form register. Buka protected/views/site/login.php

Lalu tambahkan code berikut:

<p class=”hint”>

Belum punya akun, <?php echo CHtml::link(‘ silahkan register’,array(‘userAdmin/create’)); ?>

</p>

Setelah itu, buka aplikasi anda pada browser anda. Klik menu login, dan akan ada link yang akan mengarahkan anda pada menu register, klik menu register tersebut. Maka akan keluar tampilan seperti berikut:
Silahkan coba jalankan dan lihat hasilnya…

Selamat mencoba…

Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

Membuat operasi CRUD pada yii

CRUD adalah operasi Create, read, update, dan delete pada database. Jadi tentu kita butuh database untuk menerapkan CRUD. Pertama-tama buatlah sebuat database pada phpmyadmin yg ada di webserver anda. Kemudian tambahkan table seperti berikut:

CREATE TABLE IF NOT EXISTS `coba` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nama` varchar(30) NOT NULL,
`nama_pacar` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Setelah itu buka folder aplikasi anda, pilih protected–>config–>main.php

Berikan tag /* dan */ pada kode berikut:

‘db’=>array(
‘connectionString’ => ‘sqlite:’.dirname(__FILE__).’/../data/testdrive.db’,
),

Lalu hilangkan tag /* dan */ yang ada di antara code brikut:

‘db’=>array(
‘connectionString’ => ‘mysql:host=localhost;dbname=testdrive’,
’emulatePrepare’ => true,
‘username’ => ‘root’,
‘password’ => ”,
‘charset’ => ‘utf8’,
),

silahkan rubah beberapa code diatas:

  • dbname=’isi sesuai nama database yang akan digunakan’
  • username=’isi username pada database anda’
  • password=’jika database anda punya password, isi sesuai password anda’

Setelah itu buka menu gii(lihat tutor sebelumnya). Pilih menu “Model Generator”. Isi text “table name” sesuai dengan nama table yang ingin anda masukkan ke dalam operasi(pada contoh ini kita menggunakan table: “coba”). Klik “preview”, lalu klik “generate”. Setelah sukses membuat model, maka kita akan membuat operasi CRUD. Pilih menu “CRUD Generator” pada “model Class”, masukkan nama model yang sudah kita buat tadi(pada contoh ini namanya:”Coba”). Klik “preview”, lalu klik “generate”. Selesai..

Untuk mencoba apakah yg kita lakukan berhasil atau tidak, silahkan klik “webapp” yg ada di menu atas atau langsung ketik  url http://localhost/sabithuraira/index.php. Karena kita belum membuat form login, login dengan username:”admin” dan password:”admin”. Lalu masuk ke url : http://localhost/sabithuraira/index.php?r=coba. Dan silahkan lakukan operasi CRUD dengan memilih menu “Create coba”/”manage coba” yang ada di menu halaman tersebut….

Selamat mencoba…

Saya bukanlah seorang master, hanya seorang pelajar yg mencoba sharing isi kepalanya..

Jika ada kesalahan dari yg saya buat, mohon koreksi…

Semoga membantu…

%d bloggers like this: