ကဗ်ာ/ရသ/နည္းပညာ

Create C box

May 11, 2014

အရင္ဆံုးဒါေလးေတြမွတ္ထား
CREATE TABLE IF NOT EXISTS tableName(
id int(11) NOT NULL AUTO_INCREMENT,
title VARCHAR(150) NOT NULL,
bodytext TEXT NOT NULL,
created VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
)
ဒီကုတ္က PHP Code မဟုတ္ပါဘူး mysql database မွာသံုးတဲ့ Query Language ေတြပါ။
အေပၚကေျပာတာကtablename အမည္နဲ႕ ရွိၿပီးသား database ထဲမွာ table တစ္ခုေဆာက္မယ္လို႔ေျပာတာ
အဲဒီ table ထဲမွာ id က integer အမ်ိဳးအစားျဖစ္ရမယ္ Null ခြင့္မျပဳဘူး AutoIncrement အလိုအေလွ်ာက္
တစ္တိုးတိုးေပးသြားရမယ္လို႔ ေၾကျငာေပးတာပါ။ ေနာက္ထပ္ title ,bodytext စတာေတြကုိလည္း ေၾကျငာေပး
ထားပါတယ္။အလိုအေလွ်ာက္တစ္တိုးတာမလိုခ်င္၇င္AUTO_INCREMENT ဆိုတာေလးျဖဳတ္လိုက္ယံုပါ။
Nullable ျဖစ္ခ်င္ရင္လည္းNOT NULL ကုိခ်န္ထားခဲ့ယံုပါပဲ ။Relational database အမ်ိဳးအစားျဖစ္တာေၾကာင့္
PRIMARY KEY လိုပါတယ္ PRIMARY KEY id ကုိေပးလိုက္ပါတယ္ ။

INSERT INTO `tableName` (`tablecolumn1`,`tablecolumn2`) VALUES ('value1','value2')
ဒါက table ထဲကုိ data လွမ္းထည့္လိုက္တာပါ။

"SELECT * FROM `tablename` ဆိုတာက table ထဲက record အားလံုးယူမယ္လို႔ေျပာတာပါ

UPDATE tablename SET `title`='$title',`bodytext`='$bdtxt' WHERE `id`='$id
table ထဲကid=$id ျဖစ္တဲ့ row အတြက္ title ကုိ PHP ရဲ႕ $title variable ထဲကdata ,bodytext ထဲကုိေတာ
့ PHP ရဲ႕ $bdtxt variable ထဲကdata အစားထိုးထည့္သြင္းမယ္လို႔ေျပာတာပါ။
Quety ရဲ႕ name ေတြကုိ `` ႏွစ္ခုၾကားေရးတာက ပိုၿပီး Safe ျဖစ္ေစပါတယ္။မထည့္လည္းရပါတယ္။
Query language ဟာသပ္သပ္ထပ္ေလ့လာရမယ့္ နည္းပညာတစ္ခုျဖစ္ပါတယ္။
အခုေျပာသြားတာေတြကုိ သေဘာတရားေလာက္ေတာ့ေသခ်ာနားလည္ေအာင္လုပ္ပါ။
အရမ္းခက္တာကုိမလုပ္ေသးဘူး လြယ္တာေလးစလုပ္ၾကည့္မယ္ ။
WAMP server ကုိ run ၿပီး phpmyadmin ထဲကုိသြားလိုက္ပါ ။ database တစ္ခု create လုပ္ပါ ။
အခု WWW folder ထဲမွာ Cbox ဆိုတဲ့နာမည္နဲ႕ folder တစ္ခုထပ္ေဆာက္လိုက္ ။ အဲဒီထဲမွာ
index.php နာမည္နဲ႕ PHP ဖိုင္တစ္ဖိုင္ထပ္ဖန္တီး ။
ၿပီးရင္အဲဒီဖိုင္ကုိဖြင့္ HTML Code ေတြေရးမယ္ ။အခုစမ္းသပ္မွာက Website ေတြမွာေတြ႕ရတတ္တဲ့ Cbox
ေလးတစ္ခုလုပ္ၾကည့္မွာ name ရယ္ message ရယ္ပါမယ္ submit ခလုပ္ကုိႏွိပ္ရင္ အေပၚဘက္ျခမ္းမွာ
အဲဒီ Message ေလးကုိလာျပေပးရမယ္ ။ အိုေခ ... စေရးမယ္
<!DOCTYPE HTML>

<html lang="en-US">

<head>

<meta charset="UTF-8">

<title></title>
</head>

<body>
<div>
<p>NAME</p>
<article>MESSAGE</article>
<hr/>
</div>
<br/>
<div>
<form action="index.php" method="post">
Name:<input type="text" name="name"/>
Message:<textarea name="message"></textarea>
<input type="submit" value="submit" name="submit"/>
</form>
</div>

</body>

</html>

browser မွာ run ၾကည့္ ... အဆင္ေျပတယ္ထင္တယ္ ။ အခု အဲဒီ HTML ေတြအားလံုးရဲ႕ အေပၚမွာ PHP ကုိ
စေရးမယ္။ ပထမ database နဲ႕ခ်ိတ္မယ္ ။ လံုျခံဳမွဳအားနည္းတဲ့ mysql_ Code အစား mysqli_ ကုိေျပာင္းသံုးထားတယ္။
<?php
$dbHost='localhost';
$dbUser='root';
$dbPass='';
$dbName='cbox';
$conn=mysqli_connect($dbHost,$dbUser,$dbPass,$dbName);
?>
mysqli_connect() က database နဲ႕ခ်ိတ္ဖို႕ ေဆာင္ရြက္ေပးပါတယ္ ။အခုဆို database နဲ႕ခ်ိတ္မိေနပါၿပီ။
HTML မွာတုန္းက submit ကိုႏွိပ္ရင္ index.php ကုိသြားမယ္ Post method သံုးမယ္လို႕ေျပာထားၿပီးပါၿပီ
ဘယ္ data ေတြလည္းဆိုေတာ့ name နဲ႕ message ထဲက data ေတြ အဲဒါကုိျပန္ျပဖို႕
<p>NAME</p>
<article>MESSAGE</article> ကုိလည္းထည့္သြင္းထားၿပီးသား... PHP မွာ post နဲ႕ ေရာက္လာမယ့္ data
ကုိ $_POST[] ဆိုတဲ့ Global variable နဲ႕ဖမ္းယူရတယ္ ။ အခု name နဲ႕ message မွာ data ရွိမရွိၾကည့္မယ္
ရွိရင္ $_POST[]နဲ႕လက္ခံမယ္ ။ၿပီးရင္ database ထဲထည့္မယ္ ။
if(isset($_POST['submit'])){
$name=$_POST['name'];
$message=$_POST['message'];
if(empty($name) OR empty($message)){
echo "<p style='color:red'>Please write something.</p>";
}else{
$sql="INSERT INTO `testing` (`name`,`message`) VALUES ('$name','$message')";
$query=mysqli_query($conn,$sql);
}
}
isset() method က ရွိမရွိစစ္ေပးတယ္။function ေတြအေၾကာင္းေျပာတုနး္က ပါၿပီးသား ။
ဒါဆိုရင္ testing ဆိုတဲ့ table ထဲ name နဲ႕ message ဆိုတဲ့ column မွာ data ေတြသြားထည့္ေပးလုိက္ပါၿပီ။
ဒီလိုသြားထည့္ေပးႏိုင္ဖို႕ testing ဆိုတဲ့ table ေဆာက္ရမယ္ အဲ့ဒီထဲမွာ id, name,message ဆိုတဲ့ column
ႀကိဳဖန္တီးထားဖို႔လိုပါတယ္ ။ အဲဒါကုိကုိယ့္ဖာသာကုိယ္ေဆာက္ၾကည့္ပါ ။

အခု Cbox ေနာက္ဆံုးတစ္ဆင့္ table ထဲက data ေတြကုိ ျပန္ထုတ္ျပဖို႔ပါ ။
name,message တစ္တြဲ name,message တစ္တြဲထုတ္ျပရမွာပါ ။ဆယ္ခါေရးရင္ဆယ္တြဲထြက္ရပါမယ္။
ဒီေတာ့ပထမ array ထဲမွာ name နဲ႕ Message ကုိတြဲထား ေနာက္ ထပ္ array တစ္ခုကမွ ေရးသမွ် အႀကိမ္
အတိုင္း looping နဲ႕Output ထုတ္ျပ ။ ဒါဆိုအဆင္ေျပပါလိမ့္မယ္။ အဲဒီလိုျဖစ္ဖို႕ ေရးၾကည့္မယ္။
?> အတြင္းမွာပဲေရးရမယ္။
$sql="SELECT * FROM `testing` ";
$query=mysqli_query($conn,$sql);
$rows=array();
while($row=mysqli_fetch_assoc($query)){
$rows[]=array(
'name'=>$row['name'],
'message'=>$row['message']
);
}
mysqli_fetch_assoc() က data ေတြကို associate array အျဖစ္ထုတ္ထားေပးပါတယ္။
associate array ရဲ႕ေကာင္းတဲ့အခ်က္က index ဟာ no. မဟုတ္လည္းရပါတယ္။
array([0]=>'AungAung',[1]=>'PaiOo',[2]=>'Shanlay');ဆိုတဲ့ ပံုစံမ်ိဳးကုိ associate arrayမွာ
array(['Mandalay']=>'AungAung',['Monywa']=>PaiOo,['InHome']=>Shanlay);
ပံုစံမ်ိဳးဖန္တီးလို႕ရပါတယ္ ။
အခု Output ျပဖို႔ HTML ထဲမွာ PHP ေရာၿပီးေရးမယ္ ။
နမူနာထည့္ထားတဲ့
<p>NAME</p>
<article>MESSAGE</article>
ေနရာမွာ PHP နဲ႕အစားသြင္းအေျဖထုတ္မယ္ ။ looping နဲ႕ထုတ္မွာမို႕ Looping statement
ေလးေရာေရးရေအာင္ ။
<body>
<?php foreach($rows as $row) { ?>

<div>
<p><?php echo $row['name']?></p>
<article><?php echo $row['message']?></article>
<hr/>
</div>
<?php } ?>
<br/>

လံုေလာက္ၿပီ ။ Server မွာသြား run ၾကည့္ ။ Shout box လို႕ ေခၚေခၚ cbox ေခၚေခၚ ေခၚလို႔ရတဲ့
Basic Web app ေလးဖန္တီးၿပီးပါၿပီ ။ တစ္ခုသတိထားမိလိမ့္မယ္ ။အခုေရးျပသြားတာက OOP Style
မဟုတ္ေသးဘူးဆိုတာ ။ လြယ္တာေလးအရင္လုပ္ျပမယ္လို႔ ေျပာထားတယ္ေလ ။
OOP Style နဲ႕ ေနာက္က်ေတာ့စမ္းၾကည့္ရေအာင္ ။စိတ္ပါရင္အခုရွင္းျပတာေလးကုိပဲ OOP
အေနနဲ႕ေျပာင္းေရးၾကည့္ပါလား ??
Read more ...

Connect database using PDO

May 11, 2014

server ထဲဖိုဒါတစ္ခုအရင္ေဆာက္လိုက္ပါ ။ Database ကုိ PDO(PHP Data Object) နည္းနဲ႕ခ်ိတ္ဆက္တာကုိရွင္းျပမွာပါ။
PDO က PHP 5.2 ေနာက္ပိုင္းမွပါလာတာလို႔သိရပါတယ္။ PDO ကုိျမန္ဆန္လြယ္ကူမွဳရွိတာရယ္၊Security အားေကာင္းတာရယ္
ေၾကာင့္ ေနာက္ပိုင္းမွာသူ႔ကုိပဲသံုးဖို႔ တိုက္တြန္းလာၾကပါတယ္။PDOက Class တစ္ခုပါ ဒါေၾကာင့္သူ႕ကုိေခၚသံုးတဲ့အခါ 'new' keyword
နဲ႕ instantiate လုပ္ေပးရမွာပါ။ စမေလ့လာမီွ PHP myadmin ထဲမွာ အဆင္ေျပတဲ့နာမည္နဲ႕database တစ္ခုအရင္ဖန္တီးထားလိုက္ပါဦး။
ဖိုဒါထဲမွာ class.database.php နာမည္နဲ႕ ဖိုင္တစ္ဖိုင္ေဆာက္လုိက္ပါ။အဲ့ဒီဖိုင္ထဲမွာ class တစ္ခုေဆာက္မယ္
<?php
class dbConnection{
protected $db_conn;

public $db_name='shoutbox';//ဒီေနရာမွာသူငယ္ခ်င္းဖန္တီးထားတဲ့ database name ကုိေရးေပး
public $db_user='root'; // local server တိုင္းကuser root နဲ့ Pass က Null ပဲရွိတာမ်ားတယ္။
public $db_pass='';
public $db_host='localhost';
}
?>
public,protected တို႔က Access modifire ေတြ ။ဘယ္သူေတာ့ခြင့္ျပဳတယ္ ဘယ္သူေတာ့ခြင့္မျပဳဘူးလို႔သတ္မွတ္တာ။Public အစား
var လို႔ေရးလည္းရပါတယ္။ ဘယ္ class ကမဆိုယူသံုးလို႔ရတယ္လို႔ေျပာတာပါ။protected ကေတာ့လက္ရွိ class နဲ႕ child class မွာ
ရပါတယ္။က်န္တဲ့ class ေတြကေနလွမ္းေခၚလို႔မရပါဘူး ။ ဒါကုိရွင္းျပခဲ့ၿပီးၿပီလိုေတာ့ထင္ပါတယ္။
ဒါဆို Server data အတြက္ variable ေၾကျငာတာၿပီးၿပီ။ database ခ်ိတ္ေတာ့မယ္ ။OOP way ဆိုေတာ့ function တစ္ခုေခၚသံုးရေအာင္။
function connect(){
$this->db_conn=new PDO("mysql:host=$this->db_host;dbname=$this->db_name",$this->db_user,$this->db_pass);
return $this->db_conn;
}
လက္ရွိ active ျဖစ္ေနတဲ့ class ထဲက data ကုိေခၚသံုးခ်င္ရင္ $this->လို႔သံုးရတယ္ ။ PDO ေရးထံုးက database အမ်ိဳးအစားကုိကြင္း
ထဲမွာထည့္ေၾကျငာေပးရလို႕ PDO("mysql: လို႕စေရးရတယ္။တစ္ျခား database အမ်ိဳးအစားဆိုလည္း အဲဒီအမ်ိဳးအစားေပါ့။ဥပမာဆို
PDO("odbc: အဲဒီလို ။ ၿပီးသူ႔ မူလClass ထဲကvariable host နဲ႕ dbname ကုိလက္ရွိ Server က data
ေတြ နဲ႕ထည့္သြင္းသတ္မွတ္ေပးရတယ္ ။ ဒါေၾကာင့္("mysql:host=$this->db_host;dbname=$this->db_name" လို႕ျဖစ္လာတယ္။
ဒါနဲ႕မျပီးေသးဘူး။က်န္တဲ့ db user နဲ႕ pass ကုိ ေကာ္မာေလးနဲ့ဆက္ထည့္ေပးရေသးတယ္။ဒီေတာ့
PDO("mysql:host=$this->db_host;dbname=$this->db_name",$this->db_user,$this->db_pass) ရယ္လို႔ျဖစ္လာတယ္။
တစ္ေၾကာင္းတည္းနဲ႕ ခ်ိတ္ဆက္မွဳ အၿပီးအစီးရပါတယ္.. မခက္ပါဘူးေနာ္။return $this->db_conn က
function ဆိုေတာ့ return value ထည့္ေပးလိုက္တာ ။ ခ်ိတ္ဆက္မွဳကုိ function မသံုးဘဲလုပ္မယ္ဆိုရင္ return keyword မလိုဘူး။
ေသခ်ာေအာင္ try - catch နဲ႕ စစ္ၾကည့္ရေအာင္ ။db_conn ကုိရိုးရိုး if နဲ႔စစ္လိုက္မယ္ဆိုရင္လည္းရပါတယ္ ။ အခုေတာ့ try-catch ပဲသံုး
ၾကည့္မယ္ ။ ေစာေစာက Code မွာ ဒီလိုေလးျဖည့္ေရးလိုက္မယ္။
function connect(){
try{
// ေစာေစာက PDO နဲ႕ခ်ိတ္တဲ့ ကုတ္
} catch (PDOException $e){
return $e->getmessage();
}
}
catch ထဲမွာ error ထုတ္ျပဖို႕ သတ္မွတ္ထားၿပီးသား Exception ေတြရွိပါတယ္။ အဲ့ဒီ exception ေတြကုိ $e ထဲ Catch သတ္မွတ္ေပးရပါတယ္။
အခုက PDO ခ်ိတ္ဆက္မွဳျဖစ္လို႔ Exception က PDOException $e ရယ္လို႔ျဖစ္လာပါတယ္။တျခားဟာေတြအတြက္တျခား exception ေတြရွိပါတယ္။
ေစာေစာကေရးခဲ့တာေတြျပန္ၾကည့္ရေအာင္။ ကုတ္အျပည့္အစံုကဒီလိုျဖစ္သြားလိမ့္မယ္။
<?php
class dbConnection{
protected $db_conn;

public $db_name='shoutbox';
public $db_user='root';
public $db_pass='';
public $db_host='localhost';

function connect(){
try{
$this->db_conn=new PDO("mysql:host=$this->db_host;dbname=$this->db_name",$this->user,$this->db_pass);
return $this->db_conn;
} catch (PDOException $e){
return $e->getmessage();
}
}
}
?>
server မွာ run ၾကည့္ Error မရွိရင္ ခ်ိတ္ဆက္မွဳအိုေခေနၿပီ။ PDO နဲ႕ခ်ိတ္ဆက္မွဳကုိဒီေလာက္နဲ႕ပဲနားလိုက္ပါရေစ။
လက္ေတြ႕မွာေတာ့ ဒီ class ကုိတစ္ဖိုင္သပ္သပ္ထား ၿပီး data အသြင္းအထုတ္အတြက္ သပ္သပ္
function တစ္ခုေရး ၿပီး manage လုပ္ေပးရမွာပါ ။
Read more ...

Understanding JSON

May 11, 2014

JSON ဆိုတာ JavaScript Object Notation ကုိေခၚတာပါ ။
စာသားအခ်က္အလက္ေတြကုိ User ဆီမွာ ျမန္ျမန္ဆန္ဆန္Out put ေဖာ္ျပေပးႏိုင္ဖို႕အတြက္ အဓိကသံုးပါတယ္ ။
ဒီလိုေဖာ္ျပ တဲ့ေနရာမွာ JSON မသံုးပဲတစ္ျခား WebTechnology တစ္ခုခုသံုးမယ္ဆုိ လည္းရပါတယ္ ။
ဒါေပမယ့္လည္း ေရးဖို႕လြယ္ကူတာ၊ Light weight ျဖစ္တာ ၊ Lenguage Strong
ျဖစ္တာ စတဲ့အားသာခ်က္ေတြေၾကာင့္ JSON ဟာ Web နည္းပညာနယ္ပယ္မွာေရပန္းစားလာခဲ့ာျဖစ္ပါတယ္။
စတင္မယ့္ Beginner ေတြအတြက္ JSON တစ္ခုဘယ္လိုေရးလို႕ရႏိုင္မလဲ ။
var ဆိုတဲ့Keyword သံုးၿပီးvariable ေၾကျငာရပါတယ္။ သူက String အေနနဲ႕ပဲအလုပ္လုပ္တာျဖစ္လို႕ Data type
ထည့္ေပးဖို႕မလိုပါဘူး ။variable ကုိ ' abe' (or) "abc" ဆိုၿပီးဆင္ေျပသလိုေရးလို႕ရပါတယ္ ။ေၾကျငာၿပီးတာနဲ႕ အဲဒီ data ကုိ
Object အေနနဲ႕တန္းသံုးလို႕ရပါၿပီ ။JSON string ေတြမွာObject ေတြကို name : value ပါတဲ့စံုတြဲေလးေတြအျဖစ္ ေၾကျငာေပး
ရပါတယ္။ array ပံုစံမ်ိဳးသံုးမယ္ဆိုရင္ ေထာင့္ကြင္း [ ႏွင့္ ] ေဖာ္ျပရပါတယ္။ var အစုအေ၀းကုိ Scope { နဲ႕ } ပိတ္ေပးရပါတယ္။
Value တစ္ခုနဲ႕တစ္ခုၾကားမွာေတာ့ (,) ေလးနဲ႕ခြဲထားေပးရပါတယ္။
နားရွင္းသြားေအာင္ေအာက္ကေရးျပတာေလးကုိၾကည့္ၾကည့္ပါ။
var jobject= {
"name": "Jhon",
"age": "33",
"phone": "09-33046955",
"movies"'Spiderman','Batman','Superman']
};
name နဲ ့ value ေလးကိုေတာ့ (:) နဲ ့ခြဲထားပါတယ္..။
"movies"'Spiderman','Batman','Superman'] ဆိုတာက array ပါ ။
လက္ေတြ႕ Web form တစ္ခုအစမ္းေလးေရးၾကည့္ရေအာင္ ။ Simple Html form တစ္ခုေလာက္ဆြဲလိုက္ပါ ။
အဲဒီမွာ 'name','age','phone' ဆိုၿပီး label သံုးခုနဲ႕ go ဆိုတဲ့ button တစ္ခုထည့္ပါမယ္။
<html>
<head>
<script type ="text/javascript">
...............
</script>
</head>
<body>

Name : <div id="name"></div> <br/>
Age : <div id="age"></div> <br/>
Phone: <div id="phone"></div> <br/>
<input type="button" value="Go" onclick = "show()" />
</body>
</html>
ခုေန browser မွာ run ၾကည့္ရင္ဘာမွေဖာ္ျပဦးမွာမဟုတ္ပါဘူး။ အခု formမွာ
go button ကုိႏွိပ္ရင္ show() method ကုိသြားအလုပ္လုပ္ခိုင္းထားပါ တယ္။
အဲဒီေနရာမွာ name ,age ,phone အတြက္ JSON နဲ႕data ေလးေတြထည့္ေပးၾကည့္ရေအာင္။
ေအာက္မွာေရးျပထားတာေလးၾကည့္ၾကည့္ပါ။
<html>
<head>
<script type ="text/javascript">
function show(){
var jobject= {
"name": "Jhon",
"age": "33",
"phone": "09-33046955",
};
document.getElementById('name').innerHTML=jobject.name;
document.getElementById('age').innerHTML=jobject.age;
document.getElementById('phone').innerHTML=jobject.phone;
}
</script>
</head>
<body>

Name : <div id="name"></div> <br/>
Age : <div id="age"></div> <br/>
Phone: <div id="phone"></div> <br/>
<input type="button" value="Go" onclick = "show()" />
</body>
</html>

အရင္ဆံုး variables မွာ name ,age ,phone အတြက္ data ေတြေၾကျငာလိုက္မယ္။ၿပီးရင္
div tag ထဲက id ေပးထားတဲ့ name ,age ,phone နဲ႕ JSON var ထဲက name ,age ,phone ကုိ
ခ်ိတ္ဆက္ေပးရမယ္။ အဲလိုခ်ိတ္ေပးႏိုင္ဖို႕ document.getElementById( ) ကုိသံုးလို႕ရပါတယ္။
အေပၚက ဥပမာေလးကုိ json.html extension နဲ႕သိမ္းၿပီး Browser မွာ Run ၾကည့္ပါ ။
go button ေလးကုိႏွိပ္တဲ့အခါ သက္ဆိုင္ရာ data ကုိ ခ်က္ခ်င္း Output ျပေပးတာေတြ႕ရပါလိမ့္မယ္။

ေအာက္မွာေနာက္ထပ္ေဖာ္ျပထားေပးတာေလးကေတာ့ Online card ဥပမာေလးပါ..။
{
"orderID": 12345,
"shopperName": "John Smith",
"shopperEmail": "johnsmith@example.com",
"contents": [
{
"productID": 34,
"productName": "SuperWidget",
"quantity": 1
},
{
"productID": 56,
"productName": "WonderWidget",
"quantity": 3
}
],
"orderCompleted": true
}
အဲဒီမွာသတိထားၾကည့္ရမွာက
"contents": [
{
CODE:VALUE;
},
{
CODE:VALUE;
}
],
ဒါေလးကုိၾကည့္ျခင္းအားျဖင့္ object (name:value) ရဲ့ တန္ဖိုးေနရာမွာ array
တစ္ခုအျဖစ္ေရးလို႕ရသလို အဲဒီ array ထဲမွာလဲ object ေတြ ထည့္သြင္းေရးသားလို႕ရတယ္ဆိုတာ ကုိ
သိႏိုင္ပါတယ္။
အခု အထိ ေဖာ္ျပထားတာေတြက Clinent သပ္သပ္ ေရးထားတာပါ ။ ဒါကုိပဲ PHP ထဲမွာ ဆိုဘယ္လို ဖန္
တီးၿပီးဘယ္လို ဖတ္လို႕ရႏိုင္မလဲ ?တကယ္တမ္း PHP က Lauguage သပ္သပ္ Javascript က
Language သပ္သပ္ပါ ။ ဒါေၾကာင့္မို႕ Javascript ကုိ PHP ကတိုက္ရိုက္မသိသလို PHP ကုိလည္း
Javascript ကတိုက္ရိုက္မသိပါဘူး ။ အဲဒါကုိ သိဖို႕ ၾကားခံ method သံုးၿပီး encode လုပ္ရပါတယ္ ။
JSON အတြက္ ကေတာ့ PHP မွာ json_encode() ဆိုတဲ့ functionေလး ရွိပါတယ္ ။
ဒီ function ေလးထဲထည့္ေပးလိုက္တာနဲ႕ Json string အျဖစ္ return ျပန္ေပးပါတယ္ ။
အေပၚက ဥပမာကုိ ပဲ PHP နဲ႕ျပန္ေရးၾကည့္ၾကည့္ရေအာင္
<?php
$cart = array(
"orderID" => 12345,
"shopperName" => "John Smith",
"shopperEmail" => "johnsmith@example.com",
"contents" => array(
array(
"productID" => 34,
"productName" => "SuperWidget",
"quantity" => 1
),
array(
"productID" => 56,
"productName" => "WonderWidget",
"quantity" => 3
)
),
"orderCompleted" => true
);

echo json_encode( $cart );
?>
ဒါေလးကုိ php_json.php လို႕နာမည္ေပးၿပီး ။ wamp (or) xampp server တစ္ခုခုကေန Run
ၾကည့္ၾကည့္မယ္ဆိုရင္ -
{"orderID":12345,"shopperName":"John Smith","shopperEmail":"johnsmith@example.com",
"contents":[{"productID":34,"productName":"SuperWidget","quantity":1},{"productID":56,
"productName":"WonderWidget","quantity":3}],"orderCompleted":true}
ဆိုၿပီး တစ္တန္းတည္း Output ေဖာ္ျပေပးသြားမွာျဖစ္ပါတယ္ ။

ဒီေလာက္ဆိုရင္ JSON နဲ႕ပတ္သတ္လို႕ အေျခခံေလးကုိ တီးမိေခါက္မိရွိသြားၿပီလို႕ ေမွ်ာ္လင့္ပါတယ္
Read more ...

PHP Mailling

May 11, 2014

အြန္လိုင္းမွာ အခမဲ့ရတဲ့ Hosting ၀န္ေဆာင္မွဳေလးေတြရွိပါတယ္။အဲဒီ Hosting site ေလးေတြမွာ Register လုပ္ထားၿပီး Hosting
နဲ႕နဲနဲျဖစ္ျဖစ္ရင္းႏွီးေနေအာင္ ေလ့လာသင့္ပါတယ္။Wamp OR XAMPP စတဲ့Localhost မွာ Cpanel မရဘူးေလ။ေနာက္ထပ္PC မွာ
Windows အသံဳးမ်ားေပမယ့္ Real PHP servers ေတြကေတာ့ Linux ေတြျဖစ္တာေၾကာင့္ဒီလိုေလ့လာျခင္းဟာ Linux ကုိလည္း
တီးမိေခါက္မိရွိသြားေစပါတယ္။ေနာက္ၿပီး Localhost ေတြမွာမ်ားေသာအားျဖင့္ Mail function ကုိပိတ္ထားတတ္ပါတယ္။
ဒီေတာ့ အခုသင္ခန္းစာကုိ Hosting တစ္ခုခုကေနစမ္းမယ္ဆို အေကာင္းဆံုးျဖစ္ပါလိမ့္မယ္ဆိုတာ ၾကိဳေျပာျပထားခ်င္ပါတယ္။
PHP Mailling စမ္းၾကည့္ဖို႕အတြက္ Coding ေတြအမ်ားႀကီးမလိုပါဘူး။
PHP မွာ mail() ဆိုတဲ့ function ေလးတစ္ခုရွိပါတယ္ ။အဲဒီ function ေလးသံုးၿပီး Mailling ကုိအလြယ္တကူလုပ္လို႕ရပါတယ္။
အဲ့ဒီ function က Server ရဲ႕ SMTP service ကေန Mail ကုိလွမ္းပို႕ေပးမွာျဖစ္ပါတယ္။
သူ႔မွာ Parameter ၄ ခုထည့္ေပးရပါတယ္ ။mail($to,$subject,$message,$headers); တို႕ပါ။နားလည္လြယ္ေအာင္ေျပာရရင္
mail(ပုိ႕မယ့္သူ ,အေၾကာင္းအရာ ,စာကုိယ္ ,သတ္မွတ္ခ်က္မ်ား) လို႕ျဖစ္ပါတယ္။
အိုေခ.......အခု Website ေတြမွာ Connect အေနနဲ႕ပါေလ့ရွိတဲ့ Message Box ေလး တစ္ခုလက္ေတြ႕စမ္းၾကည့္ရေအာင္ ။
HTML နဲ႕ Page တစ္ခုအရင္ဆြဲမယ္ Page ထဲမွာ Mail Form တစ္ခု ပါရမယ္ ။

<form action="processForm.php" method="post">


<h2>Send me Your Suggestion...</h2>


<ul>


<li>

<label for="senderName">Your Name</label>

<input type="text" name="senderName" id="senderName" placeholder="Please type your name" required="required" maxlength="40" />

</li>


<li>
<label for="senderEmail">Your Email Address</label>
<input type="email" name="senderEmail" id="senderEmail" placeholder="Please type your email address" required="required" maxlength="50" />

</li>


<li>
<label for="message" style="padding-top: .5em;">Your Message</label>

<textarea name="message" id="message" placeholder="Please type your message" required="required" cols="80" rows="10" maxlength="10000"></textarea>

</li>


</ul>


<div>

<input type="submit" id="sendMessage" name="sendMessage" value="Send Email" />

</div>

</form>
ဒီဇိုင္းလုပ္ခ်င္ရင္ CSS နဲ႕ အလွဆင္လိုက္ေပါ့ ။မေျပာေတာ့ဘူးေနာ္ ။
submit ကုိႏွိပ္တာနဲ႕ processForm.php ကုိေရာက္သြားမွာပါ။ အဲ့ဒီမွာမွ PHP Code ကုိေရးမွာပါ။Post Method သံုးတာဆိုေတာ့
$_POST[] နဲ႕ျပန္ဖမ္းရပါမယ္။ ကဲ စလိုက္ရေအာင္.....
<?php
$sender_name = $_POST['senderName'];
$sender_email = $_POST['senderEmail'];
$sender_message=$_POST['message'];
if($sender_name && $sender_email && $sender_message){
$message = "Name: $sender_name \n";
$message .= "Email: $sender_email\n";
$message .= "Message: $sender_message\n";
//
// HTML Form ထဲက textbox ေတြအားလံုးမွာ Data ေတြရွိေနမယ္ဆိုရင္
//$message ထဲကုိ Name ထဲကစာရယ္ Email ထဲကလိပ္စာရယ္ နဂိုမူလ Message Box ထဲကစာရယ္ ထည့္ၿပီး
//Redirect ေရာက္သြားေစမယ့္ ေမးလ္လိပ္စာ ေခါင္းစဥ္ တို႔နဲ႕အတူ mail() function နဲ႕လွမ္းပို႕လိုက္တာပါ
$recipient = "QplusTraining@gmail.com";
$subject = "Friendship mail";
$headers = "From: Somebody@example.com";
$success = mail( $recipient, $subject, $message, $headers );
echo $success ? "success" : "error";
}
?>
QplusTraining@gmail.com ကုိဖြင့္ၾကည့္ရင္ ကုိယ့္ရလဒ္ကဒီလိုပံုစံမ်ိဳးေလးျဖစ္ပါလိမ့္မယ္

Name: AungAung
Email: amcupid2@gmail.com
Message: This is testing of PHP Mailling method.

ွSecurity အတြက္ဆိုရင္ေတာ့ Validation ေတြအျပင္ CHEPTCHA ေလးပါထည့္ထားေပးဖို႕လိုပါလိမ့္ဦးမယ္။
But ေလာေလာဆယ္ Simple Form နဲ႕ Mail Function ေလးကုိပဲလက္ေတြ႕စမ္းၾကည့္လိုက္ပါဦး။
Read more ...

Create Zip file using PHP

May 11, 2014

php သံုးၿပီး Zip ဖိုင္တစ္ခုဖန္တီးၾကည့္ရေအာင္ ။
အရမ္းမခက္ပါဘူး PHP မွာ Zip file ဖန္တီးႏိုင္ဖို႕အတြက္ ZipArchive ဆိုတဲ့ Class က Built in ရွိၿပီးသားပါ။
အဲ့ဒီ Class ကုိဘယ္လိုသံုးရမလဲဆိုတာေလးသိတာနဲ႕ server ေပၚက ဖိုဒါေတြကုိ Zip ခ်ံဳ႕ၿပီး download link
ဖန္တီးေပးႏိုင္ပါတယ္။နမူနာေလး စမ္းၾကည့္ရေအာင္။ျမန္ေအာင္တစ္ခုၿပီးတစ္ခါရွင္းျပသြားပါမယ္။
<?php
$zip=new ZipArchive();//ZipArchive ကုိ $zip အေနနဲ႕ Object ေဆာက္လုိက္ပါတယ္
$zip->open('example.zip',ZipArchive::CREATE);//Open method ေခၚသံုးပါတယ္။ZipArchive::CREATE ကဒုတိယ Parameter မွာေရးထံုးအရထည့္ကုိထည့္ေပးရမွာပါ။
//example.zip အျဖစ္ေျပာင္းၿပီးZip ပါမယ္ေျပာင္းမယ့္ဖိုဒါကေတာ့Server မွာရွိေနၿပီးသား image နာမည္နဲ႕ဖိုဒါျဖစ္ပါတယ္။
//အဲဒီဖိုဒါကုိ Scandir နဲ႕စစ္လိုက္ေတာ့ Array return ျပန္ရပါတယ္။အဲ့ဒီ array က အခန္း[1],[2]က directory ျဖစ္လို႕ျဖဳတ္ပစ္ဖို႕လိုပါတယ္။
//သိခ်င္ရင္ $files ကုိ print_r() ထုတ္ၾကည့္လုိက္ပါ။
$files=scandir('image');
unset($files[0],$files[1]);
//unset() နဲ႕ directory ကုိျဖဳတ္ေပးလိုက္ပါၿပီ။
//ဖိုဒါတစ္ခုမွာဖိုင္ေတြအမ်ားႀကီးရွိေနမွာမို႕လို႕ဖိုင္တစ္ခုစီကုိ Looping သံုးၿပီး zip လုပ္လိုက္ပါတယ္။

foreach($files as $file){
$zip->addFile("image/$file","files/$file");//addFile()မွာ socure နဲ႕ Desination ကုိထည့္ေပးရပါတယ္။
//echo $file;
}
//အားလံုးၿပီးရင္ျပန္ပိတ္ေပးရပါမယ္
$zip->close();
ၿပီးတာနဲ႕တန္းၿပီး Download ခ်ႏိုင္ဖို႕အတြက္ ဆိုရင္ေတာ့ အခုလိုHeader("location: ??")ေလးသံုးလုိက္လို႕ရပါတယ္
header("location:example.zip");
?>
ကဲ .... စမ္းၾကည့္လိုက္ပါဦး ။
Read more ...

Crate progress bar

May 11, 2014

progress bar ေလးတစ္ခုေလာက္ Javascript နဲ႕ ဖန္တီးၾကည့္ရေအာင္ ။
HTML နဲ႕ CSS ေလးေတြအရင္ဖန္တီးလိုက္မယ္။

<!DOCTYPE HTML>
<html lang="en-US">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
    <div id="wrap">
        <div id="progress_bar_wrap">
       
        </div>
        <div id="buttons">
            <input type="button" id="set_25" value="25%" />
            <input type="button" id="set_50" value="50%" />
            <input type="button" id="set_75" value="75%" />
            <input type="button" id="from_0_to_100" value="0% - 100%" />
        </div>
    </div>
</body>
</html>
progress_bar_wrap ကုိ CSS နဲ႕ က်မွ Width နဲ႕ Height ထည့္ေပးမယ္ ။ သပ္သပ္ရပ္ရပ္ျဖစ္ေအာင္
wrap ID ထပ္အုပ္ထားလိုက္တယ္ ။ အဲ့ဒါေတြက ကၽြမ္းၿပီးသားဆိုကုိယ့္ဖာသာကုိအဆင္ေျပသလိုလုပ္
လိုက္လို႕ရတယ္ ။ေသခ်ာမရွင္းျပေတာ့ဘူး။
ေလာေလာဆယ္ သံဳးထားတဲ့ CSS ကဒီမွာ ။
*{
padding:0;
margin:0;
}
body{
font-family:Tahoma;
}
#wrap{
margin:100px;
}
#buttons{
margin-top:10px;
}
#progress_bar_wrap{
width:300px;
height:30px;
border:1px solid #222;
}
CSS ကုိအဆင္ေျပသလိုသံုးလိုက္လို႕ရတယ္ အဓိကေျပာခ်င္တာက Progress bar ကုိအသက္သြင္းမယ့္ Javascript ...
ႏွစ္သက္ရာနာမည္နဲ႕ folder တစ္ခု ေဆာက္လိုက္။ အဲဒီထဲမွာ
main.js နဲ႕ progress_bar_lib.js ဆိုၿပီး js ႏွစ္ဖိုင္ေဆာက္လိုက္ပါ ။ တစ္ဖိုင္က function ကိုေရးထားၿပီးေနာက္တစ္ဖိုင္
ကေနလွမ္းေခၚသံုးမွာျဖစ္ပါတယ္ ။အဲဒီႏွစ္ဖိုင္ကုိ HTML ဖိုင္ထဲ add ေပးလိုက္ပါဦး
HTML CSS မွာ Progress bar ပံုကအဆင္သင့္ရၿပီ အဲဒီက Button ေတြကိုႏွိပ္ရင္ Progress က ရာခိုင္ႏွဳန္းနဲ႕အတူ တတ္လာ
ရမယ္။အဲဒီ Button ေတြမွာ onclick() function ထည့္ၿပီး Click လုပ္တိုင္းသက္ဆိုင္ရာ Javascript ကုိ လွမ္းခိုင္းမယ္။
အခု progress_bar_lib.js ကုိဖြင့္
function progress_bar(container){
} main.js  ကေနေခၚသံုးဖို႕ progress_bar ဖန္ရွင္ဖန္တီးမယ္ ။Parameter တစ္ခုထည့္ထားလိုက္။ဒီဥပမာအတြက္ေတာ့
container နာမည္နဲ႕ Parameter တစ္ခုထည့္ထားလိုက္တယ္
တစ္ခါတည္းရွင္းသြားမယ္ေနာ္။ အဲဒီဖန္ရွင္ထဲမွာေအာက္ကအတိုင္းေရး ..
var bar=document.createElement('div'); //div tag တစ္ခုကုိ js နဲဖန္တီးၿပီး variable တစ္ခုအေနနဲ႕ထားထားတယ္
var text=document.createElement('div');
bar.style.width='0px'; //ဒါကစ ေနာက္သံုးေၾကာင္းက Button ကုိႏွိပ္လိုက္ရင္ color bar တစ္ခုက % အေနနဲ႕ေဖာ္ျပဖို႕
bar.style.height='100%';
bar.style.background='#eef';

container.appendChild(bar);// color bar နဲ႕ အတူ text တစ္ေၾကာင္းထည့္မယ္ 50%ဆို 50% ျပမယ္။ေအာက္ကကုတ္ကေနရာခ်တာ။

text.style.marginTop='-26px';
text.style.textAlign='center';
text.style.color='#111';
text.style.size='15px';

text.appendChild(document.createTextNode('0%'));
container.appendChild(text);

ဒီအထိရရင္ Main.js ကုိသြား ။ Page load ျဖစ္ၿပီးရင္ အဆင္သင့္ျဖစ္ဖို႕ window.onload အေျခအေနမွာ ဖန္ရွင္တစ္ခုေရးမယ္။
window.onload=function(){
var bar=new progress_bar(document.getElementById('progress_bar_wrap'));// progress_bar_wrap ထဲမွာေဖာ္ျပခ်င္တာကုိထည့္မယ္ေလ။

    document.getElementById('set_25').onclick  =function(){
         bar.setpercentage(25); 
    }
    document.getElementById('set_50').onclick  =function(){
        bar.setpercentage(50);
    }
    document.getElementById('set_75').onclick  =function(){
        bar.setpercentage(75);
    }
    }
    ဒီမွာေခၚသံုးထားတဲ့ setpercentage က Js libiary ထဲကမဟုတ္ဘူးဒီထဲမွာလည္းမရွိဘူး ။
    ဒီေတာ့ ဒါေလးကုိ ဟိုဘက္progress_bar_lib.js မွာထပ္ ျဖည့္လိုက္ရေအာင္။
    function progress_bar(container)ရဲ႕ အပိတ္ } မေရာက္ခင္မွာ ဖန္ရွင္အသစ္ထပ္ေရးမယ္
   
    this.setpercentage=function(percentage){//this ကလက္ရွိactive ျဖစ္ေနတဲ့ action ကုိညြန္းပါတယ္။
    bar.style.width=percentage+'%'; //color အတြက္
    text.removeChild(text.firstChild); // text ေဖာ္ျပဖို႕အတြက္ မူလရွိၿပီးသားကုိဖ်က္လိုက္တာ
    text.appendChild(document.createTextNode(percentage+'%'));// ဖ်က္ၿပီးမွလက္ရွိ % စာသားကုိျပန္ျပတာ။
}
removeChild နဲ႕ appendChild ၿပီးေတာ့ createTextNode စတာေတြနဲ႕ရင္းႏွီးေအာင္ဒီပံုစံသံုးလိုက္တာပါ။ဒီထက္လြယ္
ေအာင္ေရးလည္းရပါတယ္။အခုဆို ရင္ 25%,50%, နဲ႕ 75% Buttonသံုးခုအလုပ္လုပ္ပါၿပီ။
from_0_to_100 button မွာေတာ့ ႏွိပ္လိုက္ရင္ 0 ကေန 100 ကုိ ေျပးတတ္လာေစခ်င္တာ ။ ဒီေတာ့အဲ့ဒီအတြက္ သပ္သပ္
ထပ္ျဖည့္ေရးရေအာင္ ။
main.js ဘက္က ေစာေစာက button သံုးခုအတြက္ေရးထားတဲ့ေအာက္မွာပဲထပ္ထည့္လိုက္မယ္ ဒီလိုေလးေရးလိုက္
    document.getElementById('from_0_to_100').onclick  =function(){
        var i=0;
        var interval=window.setInterval(function(){   
        if(i>=100 ){
            window.clearInterval(interval);
        }
            bar.setpercentage(i);
            i++;
        },50);   
    }
i>=100 ထည့္ေပးရတာက 100 ျပည့္တာနဲ႕ရပ္သြားရေအာင္ပါ ။   
setInterval(?? , 50) ရဲ႕ ဒုတိယ Parameter မွာ အခ်ိန္ကုိ မီလီစကၠန္႕နဲ႕ထည့္ေပးရပါတယ္။
50 မီလီစကၠန္႕တိုင္း တစ္တိုးသြားေအာင္လို႕ ပထမ Parameter မွာ nameless function
တစ္ခုျဖည့္ေပးလိုက္တာပါ။ function(){??} အေနနဲ႕ေရးတာေတြဟာ Nameless function ေတြပါ။
အိုေခ ... ဒါဆို id မွာ from_0_to_100 button ေပးထားတဲ့ Button အတြက္လည္းျပည့္စံုသြားပါၿပီ။
ႏွစ္ေခါက္ေလာက္ထပ္ဖတ္ၾကည့္ရင္ ရွင္းလင္းသြားမွာပါ ။စမ္းၾကည့္ပါဦး

Read more ...