Zack Notes

CodeIgniter Form Helper

Written by Zack Saturday, 12 June 2010 00:54

CI ရဲ႕ form helper အေၾကာင္းကို ဆက္ေရးပါမယ္။ ျပီးခဲ့တဲ့ post မွာ CI database library အေၾကာင္းကို ေရးခဲ့ပါတယ္။ ဒီ form helper

ျပီးရင္ေတာ့ simple data entry, browse data စတာေတြကို ေရးၾကည့္လို႕ ရပါျပီး။  ဒီ form helper ကေတာ့ view ထဲမွာ ေရးရမယ့္ user interface

နဲ႔ ဆိုင္တဲ့ coding ေတြပဲ ျဖစ္ပါတယ္။ ကြၽန္ေတာ္တို႔ ေရးေနၾက html code ေတြကို CI form helper ကဘယ္လို control လုပ္သြားတယ္ ဆိုတာ

ၾကည့္လိုက္ရေအာင္

form_open()

echo form_open('welcome/search');

ကေတာ့ html မွာ <form method="post" action="http:/example.com/index.php/welcome/search" />

နဲ႔ အတူတူပဲ ျဖစ္ပါတယ္။ From မွာ attribute ေတြျဖစ္တဲ့ CSS class name ေတြ form id ေတြကို ထည့္ခ်င္ရင္ေတာ့

$attributes = array('class' => 'welcome', 'id' => 'myform');

echo form_open('welcome/search', $attributes);

html မွာ ဆိုရင္

<form method="post" action="http:/example.com/index.php/welcome/search"  class="welcome"  id="myform" />

form_hidden()

Form  မွာ hidden value ေတြထည့္ ခ်င္ရင္ေတာ့ form_hidden ကိုသုံးႏိုင္ပါတယ္။

form_hidden('username', 'zack');

html output ကေတာ့ <input type="hidden" name="username" value="zack" />

form_input()

html မွာ သုံးတဲ့ input ေတြအားလုံးကိုသုံးဖို႔ form_input ကကူညီပါလိမ့္မယ္။

$data = array(
'name' =>'searchterm',
'id' = > 'search',
'maxlength' = > '100',
'size' = > '50',
'style' = > 'background-color:#f1f1f1'
)
echo form_input($data);


html code ကေတာ့
<input type="text" name="searchterm" id="search" maxlength="100" size="50" style="background-color:#f1f1f1" />

form_password() ကေတာ့ password အတြက္ ျဖစ္ျပီး form_textarea() ကေတာ့ textarea အတြက္ သုံးႏိုင္ပါတယ္။ ဒါအျပင္

form_upload() ကလည္း file upload အတြက္ ျဖစ္ပါတယ္။

form_dropdown() ကေတာ့ combo box (or) dropdown list အတြက္ပါ။

$options = array(
                  'small'  => 'Small Shirt',
                  'med'    => 'Medium Shirt',
                  'large'   => 'Large Shirt',
                  'xlarge' => 'Extra Large Shirt',
                );

echo form_dropdown('shirts', $options, 'large');


html code:
<select name="shirts">
<option value="small">Small Shirt</option>
<option value="med">Medium Shirt</option>
<option value="large" selected="selected">Large Shirt</option>
<option value="xlarge">Extra Large Shirt</option>
</select>

form_checkbox() ကေတာ့ checkbox အတြက္ပါ။

$data = array(
    'name'        => 'newsletter',
    'id'          => 'newsletter',
    'value'       => 'accept',
    'checked'     => TRUE,
    'style'       => 'margin:10px',
    );

echo form_checkbox($data);


html code:
<input type="checkbox" name="newsletter" id="newsletter" value="accept" checked="checked" style="margin:10px" />


form_radio() ကလည္း form_checkbox() usage အတိုင္းပဲ ျဖစ္ပါတယ္။

form_submit() ဆိုတာကေတာ့ submit button အတြက္ပါ။

echo form_submit('mysubmit', 'Submit Post!');


html code:
<input type="submit" name="mysubmit" value="Submit Post!" />

submit မဟုတ္ေသာ တျခား button မ်ားအတြက္ form_button() ရွိပါတယ္။ form_reset() ကေတာ့ reset button အတြက္ ျဖစ္ပါတယ္။

form_close() ကေတာ့ form tab ကိုျပန္ပိတ္ဖို႔ပါ။ ကဲဒီေလာက္ဆိုရင္ form helper က function ေတြစုံသေလာက္ ျဖစ္သြားျပီဗ်ာ။

က်န္လည္း နည္းနည္းေပါ့။ program ေရးရင္း ေတြ႔ရင္ ျပန္ထည့္သြားပါမယ္။ ေနာက္ post မွာ database entry page ကိုေရးၾကည့္မယ္။

ခုေတာ့ နားလိုက္ပါအံုးမယ္။ ဆက္ဖတ္သင့္ေသာ Posts မ်ား



 

CodeIgniter Database Library

Written by Zack Sunday, 06 June 2010 22:45

CodeIgniter's database library ကိုေလ့လာၾကည့္ရေအာင္။ ဒါမွ database နဲ႔ ခ်ိတ္ျပီးေရးတဲ့ အခါ ဘယ္ေနရာမွာ ဘယ္ function

ကိုသုံးသင့္တယ္ဆိုတာကို သိသြားပါလိမ့္မယ္။ ေနာက္ post မွာ form helper ကိုေရးျပီး ရင္ေတာ့ database sample coding ေလး

ေတြကို စလို႕ရပါျပီ။ Okay, database library ထဲမွာ ဘယ္လိုမ်ိဳး အသုံးဝင္ function ေတြပါတယ္ ဆိုတာ ၾကည့္ၾကပါစို႔။

query တစ္ခုကို run ခ်င္ေသာအခါ ဒီ query() ဆိုတဲ့ function ကိုသုံးပါတယ္။
Usage:

$sql = "select a.name, a.id, b.groupname from persons a, groups b
where a.group_id = b.id group by b.groupname, a.name";
$Q = $this->db->query($sql);

Query တစ္ခုကို run လိုက္ျပီးတဲ့ အခါ ရလာတဲ့ result ကို ဘယ္လို႕ ပုံစံနဲ႔ လိုခ်င္လဲေပၚမူတည္ျပီး result() or result_array() methods

ေတြကို သင့္ေတာ္သလို သုံးႏိုင္ပါတယ္။
Usage:

$sql = "select a.name, a.id, b.groupname from persons a, groups b where a.group_id = b.id group by b.groupname, a.name";
$Q = $this->db->query($sql);
foreach ($Q->result() as $row){
echo $row->name;
echo $row->id;
echo $row->groupname;
}

//here’s the alternative approach, with result_array
foreach ($Q->result_array() as $row){
echo $row['name'];
echo $row['id'];
echo $row['groupname'];
}



ကိုယ္က View မွာ ဘယ္လို ပုံစံနဲ႔ ျပခ်င္တာလဲ ေပၚမူတည္ျပီး ဆုံးျဖတ္ ႏိုင္ပါတယ္။

ကိုယ္ run လိုက္တဲ့ query ရဲ႕ result set ထဲမွာ row count ကိုလိုခ်င္ရင္ေတာ့ num_rows() ကိုသုံးတယ္။

Usage:

$sql = "select a.name, a.id, b.groupname from persons a, groups b where a.group_id = b.id group by b.groupname, a.name";
$Q = $this->db-> query($sql);
if ($Q->num_rows()){
  foreach ($Q->result() as $row){
  echo $row->name;
  echo $row->id;
  echo $row->groupname;
  }
}



ဒီ sample မွာေတာ့ run လိုက္တဲ့ query အရ result set ထဲမွာ data ရွိမွ ႐ိုက္ျပမွာ ျဖစ္ပါတယ္။ အဲလိုေရးတာ ပိုျပီး safe ျဖစ္ပါတယ္။

တစ္ခါတစ္ရံ query မွာ limit ထည့္ျပီး run ဖို႔လိုတာေတြ ရွိပါတယ္။ အဲဒီ အခါမ်ိဳးေတြမွာ row() or row_array() ကိုသုံးႏိုင္ပါတယ္။
Usage:

$sql = "select a.name, a.id, b.groupname from persons a, groups b where a.group_id = b.id limit 1";
$Q = $this->db->query($sql);
$row = $Q->row();
echo $row->id;
//alternative syntax
$row = $Q->row_array();
echo $row['id'];



ကြၽန္ေတာ္တို႔ database application မွာ မပါမျဖစ္ query ေတြျဖစ္တဲ့ insert, update and delete စတာေတြ အားလုံးကို run ဖို႔

query() function ကိုပဲ သုံးပါတယ္။ insert query ေလးကို ၾကည့္ရေအာင္။

$sql = "insert into persons (name, gender, age) values ('Zack, 'male',28)";
$this->db->query($sql);


တကယ္လို႕ query binding ပုံစံနဲ႔ စဆိုရင္ေတာ့

$sql = "insert into persons (name, gender, age) values(?,?,?)";
$this->db->query($sql, array("Zack","male",35));

Update & Delete query ေတြလည္း ထိုနည္း၎ပါပဲ။ query function ထဲကိုပဲ ေရးထားတဲ့ sql ထည့္ run ရုံပါပဲ။

Query မေရးပဲ အလြယ္သုံးနည္းေလးေတြကို ဆက္ၾကည့္ရေအာင္။  get() ဆိုတဲ့ function ရဲ႕ usage ကိုၾကည့္မယ္ဆိုရင္

$Q = $this->db->get('persons');


ရွင္းပါတယ္ person ဆိုတဲ့ table တစ္ခုလုံးကို လိုခ်င္ရင္ သုံးပါတယ္။

Limit နဲ႔ လိုခ်င္ရင္ေတာ့

$Q = $this->db->get('persons',5,20);


sql ေရးမယ္ဆိုရင္ေတာ့ ဒီလိုပါ select * from persons limit 20, 5


ကိုယ္က table ထဲက fields တစ္ခ်ိဳ႕ကိုပဲ ေရြးျပီး လိုခ်င္တဲ့ အခါ select() and from() စတဲ့ function ေတြကို သုံးႏိုင္တယ္။
Usage:

$this->db->select(‘id, name, gender’);
$this->db->from(‘persons’);
$Q = $this->db->get();


where() clause ကိုသုံးခ်င္တဲ့ အခါ ဒီလိုပါ။
Usage:

$this->db->select('id, name, gender');
$this->db->from('persons');
$this->db->where('id', 14);
$this->db->where('status', 'live');
$Q = $this->db->get();

//query becomes:
//select id, name, gender from persons where id=14 and status='live'



where clause မွာ operator ေတြျဖစ္တဲ့ equal ( != ) or less than ( < ) တာေတြကိုလည္း သုံးႏိုင္ပါတယ္။
usage:

$this->db->select('id, name');
$this->db->from('persons');
$this->db->where('id > =', 3);
$Q = $this->db->get();
//query becomes:
//select id, name from persons where id > = 3



custom where string ကိုသုံးခ်င္တယ္ ဆိုရင္လည္း ရတယ္ဗ်ာ။


$this->db->select('id, name');
$this->db->from('persons');
$this->db->where("name='Tom' and id > 3");
$Q = $this->db->get();
//query becomes:
//select id,name from persons where name='Tom' and id > 3




LIKE clauses အတြက္လည္း like function ရွိတယ္။
Usage:

$this->db->select('id, name');
$this->db->from('persons');
$this->db->like('name', 'Tom');
$Q = $this->db->get();

//query becomes:
//select id,name from persons where name like '%Tom%'



Okay ဒါကေတာ့ ေနာက္ဆုံး function ေလးပါ insert ခ်ဖို႔ ပိုလြယ္ေအာင္ လုပ္ေပးထားတဲ့ insert() function ေလးပါ။ table name ေပးျပီး

သုံးရုံပါပဲ။
Usage:

$data = array(
'name' => $_POST['name'] ,
'gender' => $_POST['gender'],
'age' => $_POST['age']
);
$this->db->insert('persons', $data);



ဒါေလာက္ဆိုရင္ project ေကာင္းေကာင္းေရးလို႕ရျပီ။ ဒီထက္ပိုျပီး သုံးစရာ မရွိသေလာက္ပဲဗ်။ ေနာက္ post မွာေတာ့ form helper ကိုဆက္ပါအံုးမယ္။

ဆက္ဖတ္သင့္ေသာ

 

Structure and Configuration of CodeIgniter

Thursday, 03 June 2010 22:14

ဒီ post ကေတာ့ CI မွာရွိေနတဲ့ folder ေတြကို ဘယ္ folder ကဘာ အတြက္ အသုံးျပဳတယ္ ဆိုတာကို သိရုံ ရွင္းျပမွာ ျဖစ္ပါတယ္။

တကယ္တန္းေျပာရင္ေတာ့ အလြတ္က်က္မွတ္ စရာမလိုပဲ လုပ္ရင္းကိုင္ရင္း အလိုလိုသိသြားမွာ ျဖစ္ပါတယ္။ ဒါေတြေၾကာင့္လည္း

ကြၽန္ေတာ္ Programming ဆိုတဲ့ အရာကို ႏွစ္သက္ေနမိတာပါ။ Okay CI နဲ႔ folder တည္ေဆာက္ပုံ၊ အလုပ္လုပ္  ပုံေလးေတြကို

တစ္ခ်က္ၾကည့္ လိုက္ရေအာင္။ ဒါမွ ေနာက္ coding အမ်ားၾကီး ေရးတဲ့အခါ ပုိျပီးအဆင္ေျပမွာ ျဖစ္ပါတယ္။ ဒါမွ ေနာက္ coding 

အမ်ားၾကီးေရးတဲ့အခါ ပုိျပီးအဆင္ေျပမွာ ျဖစ္ပါတယ္။

System Folder

System Folder ေအာက္တြင္ ေအာက္က Folder မ်ားဆက္ရွိနိုင္သည္။


application -> ကိုယ့္ application တည္ေဆာက္ရာတြင္အဓိကသံုးရမည့္ Folder ျဖစ္သည္။ models, views, controllers libraries

ကဲ့သို႔ေသာ Sub Folders မ်ားလည္းရွိသည္။

cache -> application အတြက္သံုးေသာ cache pages မ်ားကို store လုပ္သည္။ codeigniter->core classes မ်ားကိုသိမ္းဆည္းထား

ေသာ Folder ျဖစ္သည္။

database -> ဤ Folder သည္ core database drivers and other database activities မ်ားကိုေတြ႕ရနိုင္သည္။

fonts -> ကိုယ့္္ application တြင္သံုးေသာ Font မ်ားကို သိမ္းဆည္းထားေသာ Folder ျဖစ္သည္။

helpers -> CodeIgniter ၏ helpers မ်ားျဖစ္ေသာ date, cookie and URL မ်ားအတြက္ ျဖစ္သည္။

language -> ကိုယ့္  application သည္ multilanguage အမ်ဳိးအစားျဖစ္ပါကထို folder ေအာက္တြင္သိမ္းဆည္းနိုင္သည္။

libraries -> Standard CI Libraries မ်ားျဖစ္ေသာ e-mail, calendars, file upload စေသာ Libraries မ်ားရွိသည္။ မိမိဘာသာထည့္

လိုက္ေသာ Library files မ်ားကိုလည္း ဒီ Folder ေအာက္တြင္ထားနိုင္ပါသည္။

logs -> error logs နဲ႔ တျခား Logs မ်ားကိုရိုက္ျပီးသိမ္းေသာ Folder ျဖစ္သည္။

plugins -> ဒီ folder ကေတာ့ ကိုယ့္ application ထဲမွာ အသုံးျပဳမယ့္ တျခား third party plguins ေတြကို သိမ္းဆည္းဖို႔ပဲ ျဖစ္ပါတယ္။

 

system/application folder

99% ေလာက္က ဒီ folder ထဲမွာ အလုပ္လုပ္ရမွာ ျဖစ္လို႕ အေရးၾကီးဆုံး folder ပဲျဖစ္ပါတယ္။ application folder ေအာက္ရွိ sub folders

မ်ားကို ၾကည့္မယ္ဆိုရင္...

config -> ကိုယ့္ project ရဲ႔ configuration ေတြအားလုံးကို ဒီ folder ေအာက္မွာ ရွိေနတဲ့ files ေတြက control လုပ္ပါတယ္။

ဥပမာ project config,database, libraries and helpers စေသာ configuration မ်ားရွိပါသည္။

controllers -> ဒီ folder ကေတာ့ controllers files ေတြကို သိမ္းဖို႔ပါ။

errors -> ဒီ folder ကေတာ့ php error logs, 404 page error, တျခား ကိုယ့္ဟာကို ႐ိုက္ထားတဲ့ logs ေတြကို သိမ္းဖို႔ ျဖစ္ပါတယ္။

hooks -> CodeIgniter core ေတြကို safely extend လုပ္ခ်င္တဲ့ အခါ ဒီ folder ထဲမွာ သိမ္းပါတယ္။

libraries -> ကိုယ္ပိုင္ ဖန္တီးထားတဲ့ libraries ကိုထားႏိုင္ပါတယ္။ system/libraries ကေတာ့ core CodeIgniter libraries ေတြပဲ

ျဖစ္ပါတယ္။ ေရာသြားမွာ စိုးလို႕ပါ။

models - model files ေတြကို သိမ္းဖို႔ပါ။

views -> view files ေတြကို သိမ္းဖို႔ပါ။

Initial Configuration

ကြၽန္ေတာ္တို႔ CI ကို configuration ကိုလုပ္ေပးဖို႔ system/application/config/ ကိုသြားလိုက္ပါ။ အဓိက လုပ္ေပးရမယ့္ file ေတြက

config.php, database.php, autoload.php, routes.php

config.php

ဒီ file ထဲမွာ ၾကည့္မယ္ဆိုရင္ $config ဆိုတဲ့ array တစ္ခုကိုေတြ႔ႏိုင္ပါတယ္။ မျဖစ္မေန ျပင္ရမွာကေတာ့

$config['base_url'] ပဲျဖစ္ပါတယ္။ URL ေပးတဲ့ အခါ http:// ပါရပါမယ္။ ဒီလိုမ်ိဳးေပါ့

$config[‘base_url’] = “http://www.example.com/test/”;



က်န္တာေတြက default အတိုင္းထားလည္း ရပါတယ္။ ေလာေလာဆယ္မွာ အေရးၾကီးတာက $config['base_url'] ပါ။

database.php

ဒီ file မွာကေတာ့ database နဲ႔ဆိုင္တဲ့ configuration ေတြအားလုံးကို သိမ္းပါတယ္။ CI database libraries ေတြက mysql, mysqli,

postgres, odbc, and mssql စတဲ့ database ေတြကို support လုပ္ပါတယ္။ hostname, username, password, database name,

and database driver စတဲ့ information ေတြကို မွန္ေအာင္ထည့္ေပးဖို႔ လိုပါတယ္။

autoload.php

Projects ထဲမွာ ရွိေနတဲ့ libraries,helper,plugin,model စတာေတြကို automatically load လုပ္ခ်င္တဲ့ အခါ ဒီ file မွာ ထည့္ေပးရပါတယ္။

ဥပမာ အားျဖင့္

$autoload[‘libraries’] = array('database','session','email','validation');
$autoload[‘helper’] = array('url','form','text','date','security');
$autoload[‘plugin’] = array('captcha');
$autoload[‘model’] = array();
$autoload[‘config’] = array();



routes.php

URI requests နဲ႔ controller functions ေတြကို remap လုပ္ဖို႔ သုံးပါတယ္။ ဥပမာ site ဆိုတဲ့ controller ထဲမွာ index ဆိုတဲ့ function

ရွိတယ္ဆိုရင္

http://www.example.com/site/index


site ဆိုတဲ့ controller ထဲမွာ page ဆိုတဲ့ function ရွိျပီး page id 4 ကိုျပခ်င္ရင္ေတာ့

http://www.example.com/site/pages/4


site/pages/4 က about-us ဆိုတဲ့ page ျဖစ္တယ္ ဆိုပါစို႔။ ဒီလိုမ်ိဳးေပါ့ http://www.example.com/about_us/ အဲဒါဆိုရင္ ဒီလိုမ်ိဳး

remap လုပ္ႏိုင္ပါတယ္။

$route[‘about_us’] = "site/pages/4";


ဒါကေတာ့ CI ကို coding မေရးခင္ သိထားသင့္ေသာ အခ်က္ေလးေတြပဲ ျဖစ္ပါတယ္။ တကယ္ေတာ့ မသိလည္းရပါတယ္။ကိုယ္စီးတဲ့ျမင္း

အထီးလား အမလား သိထားရင္ေတာ့ ပိုေကာင္းတာေပါ့ဗ်ာ။

နားပါဦးမည္။

ဆက္ဖတ္သင့္ေသာ Articles:



 

CodeIgniter and MVC for Beginners

Written by Zack Tuesday, 01 June 2010 11:51

ကြၽန္ေတာ္ အားတဲ့ အခ်ိန္ေလးေတြမွာ CodeIgniter(CI) သုံးျပီး ကိုယ္ပိုင္ application ေလးတစ္ခု ေရးေနတာ ရွိပါတယ္။ ဒါေၾကာင့္ လုပ္ရင္း

ကိုင္ရင္း ရလာတဲ့ experience ေလးေတြကို share လုပ္သြားခ်င္ပါတယ္။ ကြၽန္ေတာ္ကို CI နဲ႔ပတ္သက္ျပီး chat ထဲမွာ လာလာေမးသူေတြကို

လည္းေျဖျပီးသား ျဖစ္သြားပါမယ္။ ကြၽန္ေတာ္ကိုယ္တိုင္လည္း CI note တစ္ခု ေကာင္းေကာင္းရသြားတာေပါ့။ ဘာမွ မစခင္ အရင္ဆုံး ဝန္ခံထား

ခ်င္တာက ကြၽန္ေတာ္ CI ကို မကြ်မ္းက်င္ပါ။ အေပၚယံေလာက္ သိေနတာကို မေၾကနပ္လို႕ အခု ကိုယ္ပိုင္ project ေလးတစ္ခု လုပ္ျပီး ပိုေလ့လာ

ခ်င္လို႕ပါ။  အရင္ဆုံး CI ကိုမသြားခင္မွာ (Model View Controller,MVC) ရဲ႕ အလုပ္လုပ္ပုံကို ၾကည့္ရေအာင္။ ကြၽန္ေတာ္တို႔ MVC မသုံးပဲ code

ေရးတဲ့ အခါ php, html, js ေတြအျပင္ css ေတြပါေရာညွပ္ေနတာကို ေတြ႔ရပါတယ္။ application တစ္ခုဆိုတာ develop လုပ္ျပီး ျပစ္ထားလို႕

ရတာမ်ိဳး မလုပ္ေလေတာ့ customer requirement ေတြအရ ျပဴျပင္ေျပာင္းလဲမႈေတြကို လုပ္ေဆာင္ေပးရပါတယ္။ အဲဒီလို လုပ္ေပးရတဲ့ အခါ UI

ပဲေျပာင္းတာ ျဖစ္ခ်င္ ျဖစ္မယ္၊ business logic ကိုေျပာင္းေပးရတာမ်ိဳး ျဖစ္ခ်င္ျဖစ္မယ္၊ ဒါကေတာ့ requirement အတိုင္းေပါ့။ မေကာင္းတာက

UI ေျပာင္းရင္ code ကိုထိ၊ code ကိုေျပာင္းရင္ UI ကိုျပန္ထိနဲ႔ ေျပာမယ္ဆိုရင္ ဂ်ာေအး သူအေမ႐ိုက္ ျဖစ္ေနတယ္။ ဒီေတာ့ MVC ကိုစဥ္းစားလာ

ၾကတယ္။ MVC ကိုသုံးခ်င္အားျဖင့္ development time မွာလည္း ပိုျမန္လာျပီး ေနာက္ပိုင္း maintenance လုပ္ရတာလည္း လြယ္လာပါတယ္။

ကြၽန္ေတာ္တို႔ အခု အေရးတယူလုပ္ေျပာေနတဲ့ MVC က late 1970s and early 1980s ကြၽန္ေတာ္ မေမြးခင္ထဲက ကေပၚေနတယ္ဆိုပဲ။

http://en.wikipedia.org/wiki/Model–view–controller

ဒီေတာ့ ကြၽန္ေတာ္က PHP သမားဆိုေတာ့ MVC framework တစ္ခုခုကိုေရြးရပါေတာ့မယ္။ ေျပာမယ္ဆိုရင္ အားလုံးကို ၾကိဳက္တယ္။ CI

ကိုလြယ္လို႕ အရင္စမ္းတဲ့ သေဘာပါပဲ။ အခ်ိန္ရရင္ နာမည္ၾကီး framework ေတြကို အကုန္စမ္းမယ္။  ဒီမွာ PHP based framework ေတြကို

ၾကည့္ႏိုင္ပါတယ္။

Okay What ’ s Model - View - Controller? ဆိုတာၾကည့္ လိုက္ရေအာင္



Models - Models maintain data.( database နဲ႔ access လုပ္ရတဲ့ အပိုင္းေတြကို ေရးေလ့ရွိတယ္။ ကိုယ္ project ရဲ႕ business logic

ေတြအားလုံးက model ထဲမွာပဲ ရွိတယ္။ )

Views - Views display data and user interface elements. ( user အျမင္ user interface အားလုံးက views ထဲမွာ ရွိတယ္။ )

Controllers - Controllers handle user events that affect models and views. ( user ရဲ႕ event ေတြကို ၾကည့္ျပီး model ေတြ၊

view ေတြကိုေခၚေပးတာ controller ျဖစ္တယ္။ )

အ႐ိုးရွင္း ဆုံးျမင္ေအာင္ၾကည့္မယ္ ဆိုရင္

User Input and Traffic Control = Controller
Processing = Model
Output = View



MVC အေျခခံ သေဘာေလးျပီးတဲ့ေနာက္ CI ကိုဆက္လိုက္ၾကရေအာင္။

How to set up CI at local?
အရင္ဆုံး ဒီမွာ download လုပ္လိုက္ပါ။ ျပီးရင္ unzip လုပ္ျပီး ကိုယ့္ရဲ႔ web server ေအာက္က www folder ေအာက္ကို ထည့္လိုက္ပါ။

folder name ကိုေတာ့ blog လို႕ပဲေပး လိုက္ၾကရေအာင္

ဒီဟာကေတာ့ folder structure ပုံပါ။ တကယ္ အလုပ္လုပ္ရမွာ က အနီဝိုင္းထားတဲ့ application folder ေအာက္က controllers, models,

views ေတြပဲ ျဖစ္ပါတယ္။  အရင္ဆုံး system\application\config ေအာက္က config.php မွာ ကိုယ္ application ကို run ဖို႔ set up လုပ္

ေပးရမယ္။ 

$config['base_url']    = "http://localhost/blog/";


ေလာေလာဆယ္ config.php တခုကိုပဲ ျပင္ပါမယ္။ database နဲ႔ ခ်ိတ္ေတာ့မွ database.php ကို configuration ဆက္ျပင္ပါမယ္။

Okay ဒီ set up ျပီးရင္ http://localhost/blog/ ကို run လိုက္လို႔ ဒီလို welcome message ျမင္ရရင္ CI အလုပ္လုပ္ပါျပီ။ 



ကိုယ္ဟာကို simple code ေလးေရးၾကည့္ရေအာင္လားဗ်ာ။  ဒီ code ေလးကို copy လုပ္ျပီး system/application/controllers/

ေအာက္မွာ myblog.php ဆိုျပီး သိမ္းလိုက္ပါ။

<?php
class myblog extends Controller {
function index()
{
$tutorial['my_tutorial'] = array('Download CodeIgniter', 'Install in Local Machine', 'Understand MVC', 'Create your First Application');
$tutorial['title'] = "CodeIgniter Tutorial";
$tutorial['heading'] = "You Will Know";
$this->load->view('myblogpage', $tutorial);
}
}
?>



ဒါေလးကို system\application\views ေအာက္မွာ myblogpage.php ဆိုျပီး သိမ္းပါ။


<html><head>
<title><?php echo $title;?></title>
</head>
<body>
<h2><?php echo $heading;?></h2>
<p><strong>My Todo List</strong></p>
<ul>
<?php foreach($my_tutorial as $item):?>
<li><?php echo $item;?></li>
<?php endforeach;?>
</ul>
</body>
</html>



ျပီးရင္ေတာ့ http://localhost/blog/index.php/myblog ဆိုျပီး run လိုက္ရင္ ဒါမ်ိဳးေပၚလာျပီ ဆိုရင္ေတာ့ ဒီ example အလုပ္လုပ္ပါျပီ။


နားပါဦးမည္။

ဆက္ဖတ္သင့္ေသာ Articles

 

Joomla 1.5! Security News

Saturday, 29 May 2010 23:10

Joomla နဲ႔ site ေထာင္ထားသူတို႔ေရ 1.5.18 ကို မျဖစ္မေန upgrade လုပ္ဖို႔လိုေနပါတယ္။ ဘာလို႕လဲဆိုေတာ့ 1.5.18 ေအာက္ version ေတြ

အားလုံးရဲ႕ admin မွာ XSS နဲ႔ hack လို႕ရေနလို႕ ပဲျဖစ္ပါတယ္။ ကြၽန္ေတာ္လည္း Joomla Security mail ရလို႕ Upgrade လုပ္လိုက္ပါျပီ။ 

Joomla upgrade လုပ္တာကေတာ့ upgrade patch ကို ဒီမွာ download လုပ္ျပီး server ေပၚမွာ override လုပ္ေပးလိုက္ရင္ရပါျပီ။ ဒီ XSS က

Admin panel/Back End ကို အေတာ္ ဒုကၡေပးပုံရတယ္ဗ်။ Patch ထဲမွာ admin အျခမ္းက default core components ေတြအားလုံး patch

ထဲမွာပါေနတယ္။ Joomla! Security News ကိုေအာက္မွာ ဖတ္ႏိုင္ပါတယ္။

Posted: 27 May 2010 05:00 PM PDT

    * Project: Joomla!
    * SubProject: All
    * Severity: High
    * Versions: 1.5.17 and all previous 1.5 releases
    * Exploit type: XSS Injection
    * Reported Date: 2010-May-13
    * Fixed Date: 2010-May-28

Description
Back-end user can inject javascript in various administrator screens.

Affected Installs
All 1.5.x installs prior to and including 1.5.17 are affected.

Solution
Upgrade to the latest Joomla! version (1.5.18 or later)
Reported by Riyaz Ahemed

Contact
The JSST at the Joomla! Security Center.

 

SQL Injection Attack

Friday, 28 May 2010 18:46

  SQL Injection ဆိုတာ ဘာလဲ မေျပာခင္ ဒီ youtube movie ေလးကို အရင္ၾကည့္လိုက္ၾကရေအာင္။ ကြၽန္ေတာ္

  တစ္ခုၾကိဳေျပာခ်င္တာက သူခိုးလမ္းျပလုပ္တာ မဟုတ္ပါဘူး။ ကြၽန္ေတာ္တို႔ ဒီလိုမ်ိဳး attack ကို awareness ရွိျပီး 

  ၾကိဳတင္ကာကြယ္ႏိုင္ေစဖို႔ ရည္ရြယ္ျပီး ေရးလိုက္ ပါတယ္။ 

 

ကြၽန္ေတာ္တို႔ database application ေရးတဲ့ အခါ မပါမျဖစ္ ေရးရတဲ့ SQL Query ေတြကို အနည္းငယ္ ေျပာင္းလဲလိုက္ျပီး attack လုပ္တာ

ျဖစ္ပါတယ္။ SQL injection attack လုပ္ဖို႔ အတြက္ DBA တစ္ေယာက္လိုမ်ိဳး database သေဘာ တရားေတြ နားလည္ေနစရာ မလိုပဲ query

မွာ ရွိေနတဲ့ condition ေတြကို ေျပာင္းသြားဖို႔ ေလာက္ကို ေရးႏိုင္ရင္ အလုပ္ျဖစ္ပါတယ္။ အထက္မွာ ျပခဲ့တဲ့ movie ေလးအတိုင္းေပါ့။

ဥပမာ ေလးနဲ႔ ၾကည့္ရေအာင္

SELECT fieldlist
FROM table
WHERE field = 'zack@gmail.com';

ဒါက ကြၽန္ေတာ္တို႔ စစ္ေနၾက where clause ပုံစံပါ zack@gmail.com နဲ႔ တူမွ အလုပ္လုပ္မွာပါ။ အဲဒါကို ဒါမ်ိဳးေလး ေျပာင္းၾကည့္လိုက္ ၾကရေအာင္

SELECT fieldlist
FROM table
WHERE field = 'anything' OR 'x'='x';



သေဘာက ေနာက္ကေန OR ကိုထည့္ လိုက္ျပီး အျမဲမွန္ ေနတဲ့ condition တခုကို ထည့္ေပးလိုက္တာ ျဖစ္ပါတယ္။ အဲဒီလိုလုပ္လိုက္ေတာ့

ေရွ႕က condition က ျဖစ္ခ်င္တာ ျဖစ္ေပမယ့္ ေနာက္က OR ေၾကာင့္ အလုပ္လုပ္ပါမယ္။

SELECT * FROM user WHERE user_name = 'zack'
SELECT * FROM user WHERE user_name = 'anything' OR '1'='1';


ဒုတိယ query မွာ OR ေၾကာင့္ result ေတြထြက္ လာပါလိမ့္မယ္။

ဒီထက္ပိုျပီး ရက္စက္ခ်င္ တယ္ဆိုရင္ ေနာက္ကေန delete, drop စတဲ့ query ေတြကို ထည့္ေပးလိုက္လို႕ ရပါတယ္။ ဒီ example ကို

ၾကည့္လိုက္ရေအာင္။

SELECT email, passwd, login_id, full_name FROM members
WHERE email = 'x';
DELETE from members;


အဲလို႕ေရးလိုက္ရင္ ေရွ႕က query ကျဖစ္ခ်င္တာ ျဖစ္ေနလဲ ေနာက္က delete query run သြားပါမယ္။ အဲဒါဆိုရင္ေတာ့ data ေတြ ကုန္ျပီသာ

မွတ္ေပေတာ့။ကြၽန္ေတာ္ ကိုယ္တိုင္ အဲလိုမ်ိဳး SQL Injection Attack လုပ္တာကို ခံခဲ့ရဘူးပါတယ္။ ရုံးက application အေဟာင္းေတြက

SQL Injection ေတြကို ေပါက္ေနပါတယ္။ လုပ္တဲ့ ေကာင္ကလဲ delete ကိုခ်သြားတာ ကုန္ေရာပဲဗ်ာ။ကဲ ဒီေတာ့ အနာသိရင္ ေဆးရွိပါတယ္။


How to prevent SQL Injection?

PHP မွာ SQL Injection ကိုကာဖို႔ mysql_real_escape_string ဆိုတဲ့ function ေလးရွိတယ္။ အဲဒီ function ကေန \ ေလးေတြ auto ေပါင္းထည့္ ေပးသြားပါမယ္။ ဒီလိုေလးေတြ ေျပာင္းသြားပါမယ္။

SELECT * FROM customers WHERE username = '\' OR 1\''
SELECT * FROM customers WHERE username = '\'; DELETE FROM customers WHERE 1 or username = \''

mysql_real_escape_string ကိုသုံးျပီး SQL Injection Attack ကိုကာကြယ္ႏိုင္ဖို႔ ဒီ Post ေလးကို ေရးလိုက္ပါတယ္။ အသုံးမ်ားေသာ SQL Injection character မ်ား

 

Input character Meaning in Transact-SQL
SQL Injection Input character
;   Query delimiter.
'
  Character data string delimiter.
--   Comment delimiter.
/* ... */   Comment delimiters. Text between /* and */ is not evaluated by the server.
 

Page 6 of 30

«StartPrev12345678910NextEnd»

Login Form

Categories Table View

RSS Feed

JoomlaWatch Stats 1.2.9 by Matej Koval

Facebook Share

Share on facebook

mod_joomtouch

Version Iphone

Version Iphone by JoomTouch