Long Live The King
ข้าพเจ้าไม่ได้มีพรสวรรค์พิเศษอะไร ข้าพเจ้าเพียงแต่มีความกระหายใคร่รู้อยู่เสมอ ทุ่มเทให้กับสิ่งที่อยากรู้ พากเพียรอย่างทรหด และสำรวจวิจารณ์ความรู้ของตัวเองเป็นประจำ ปัจจัยเหล่านี้คือที่มาของแนวคิดต่างๆ ของข้าพเจ้า .... อัลเบิร์ต ไอน์สไตน์

วันอังคารที่ 17 กันยายน พ.ศ. 2556

วิธีดึงข้อมูลจาก Database มาแสดงแบบ OOP PHP



บทความนี้เกี่ยวข้องกับการสร้างฟังชั่น เพื่อเชื่อมต่อฐานข้อมูล และดึงข้อมูลขึ้นมาแสดง ยังไม่เต็มรูปแบบของ OOP เนื่องจากยังไม่มีการสร้าง Object ภายนอก เพียงแต่มีรูปแบบการเชื่อมต่อฐานข้อมูลแบบ OOP และสามารถนำไปใช้ได้จริง เรียกว่า สร้างจินตนาการ อุ่นเครื่องกันก่อน.....

เริ่ม
ผมจะสร้างไฟล์ขึ้นมา 2 ไฟล์ คือ index.php กับ MySqlConnect.php
ที่ไฟล์ MySqlConnect.php ผมจะสร้าง function เพื่อเชื่อมต่อฐานข้อมูลก่อน ดังนี้

ไฟล์ MySqlConnect.php
function connect()
 {
    $conn = new mysqli('host', 'username', 'password', 'database')
                         or die('not connect to sql');
    return $conn;
 }
โค้ดที่ท่านเห็นด้านบน นี้คือการเชื่อมต่อฐานข้อมูลแบบ OOP ในฟังก์ชั่นนี้มีการสร้างอ็อบเจ็กต์ คือ
$conn = new mysqli(); เป็นรูปแบบการเชื่อมต่อกับฐานข้อมูล MySQL แบบใหม่ซึ่ง สามารถใช้งานได้ ใน MySQL 4.1 ขึ้นไป
ส่วนที่ไฟล์ index.php ผมก็จะนำเข้าไฟล์ MySqlConnect.php และสร้างตัวแปรขึ้นมาเพื่อเรียกใช้ function connect();

ไฟล์ index.php
<!DOCTYPE html">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        require_once('MySqlConnect.php');
        $conn = connect();        
        ?>
    </body>
</html>
มาถึงตอนนี้เราก็ทำการเชื่อมต่อฐานข้อมูลเรียบร้อยแล้ว เหลือแต่ select ตารางฐานข้อมูลและ query ออกมา
เท่านั้นเอง ไปต่อกันเลยครับ...
ที่ไฟล์ MySqlConnect.php ผมจะสร้างฟังก์ชั่นอีกคือ getSql();
function getSql($conn='', $sql='')
{
    $query = $conn->query($sql);
    $rows = array();

    while ($row = $query->fetch_array()) {        
        $rows[] = $row;
    }
    return $rows;
}
ฟังก์ชั่นนี้รับค่า parameter มาสองค่า คือ $conn, $sql ก็คือตัวแปรที่เราได้สร้างเอาไว้ที่ไฟล์ index.php
แล้วผมก็ query ออกมา เก็บข้อมูลในรูปแบบ Array แล้วก็ return ค่าออกไป

จากนั้นที่ไฟล์ index.php ก็ไปสร้างตัวแปรเพื่อส่งค่า parameter ไปให้กับ function getSql()
พร้อมทั้งวนลูป ค่าที่ได้รับการคืนค่ากลับออกมา

ไฟล์ index.php
$sql = 'select * from article';
$results = getSql($conn, $sql);
        foreach($results as $row){
        echo "<div style='width:400px;margin-left:200px;'>";    
        echo "<h3>".$row['title']."</h3>";
        echo $row['article'];
        echo "</div>";
เพียงเท่านี้เราก็จะได้ฟังก์ชั่นการเชื่อมต่อฐานข้อมูล พร้อมทั้ง query ข้อมูลออกมาแสดง แบบง่ายๆ

บทความนี้ก็ขอจบเพียงเท่านี้ครับ ผิดพลาดยังไงก็ขออภัยด้วยครับ.....

ไฟล์ index.php
<!DOCTYPE html>
<html lang="th">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        require_once('MySqlConnect.php');
        $conn = connect();
        $sql = 'select * from article';

        $results = getSql($conn, $sql);
        foreach($results as $row){
        echo "<div style='width:500px;margin-left:100px;'>";    
        echo "<h3>".$row['title']."</h3>";
        echo $row['article'];
        echo "</div>";
        }
        ?>
    </body>
</html>

ไฟล์ MySqlConnect.php
<?php
function connect()
{
    $conn = new mysqli('localhost', 'root', '', 'bookneo')
                       or die('not connect to sql');
    return $conn;
}

 
function getSql($conn, $sql)
{
    $query = $conn->query("SET NAMES UTF8");
    $query = $conn->query($sql);
 
    $rows = array();
 
    while ($row = $query->fetch_array()){        
        $rows[] = $row;
    }
    return $rows;
}
?>


Read More

วันพุธที่ 4 กันยายน พ.ศ. 2556

Inheritance การสืบทอดคุณสมบัติ ของClass OOP PHP



ได้ยินกันบ่อยๆ inheritance เป็นถ่ายทอดคุณสมบัติของแม่แบบ หรือ Class หลักที่กำหนดให้มีคุณสมบัติต่างๆ ที่จำเป็นต้องมี ด้วยการสืบทอดของ Class ลูก(Sub-Class)จึงทำให้ Classลูก สามารถมีคุณสมบัติเฉพาะที่เหมือนกับ Classหลัก และสามารถเพิ่มคุณสมบัติอื่นเข้าไปได้อีกในคลาสนี้....

สมมุติว่า มีพ่อแม่คู่หนึ่ง ชื่อ a กับ b และสมมุติให้ a,b เป็น Class ParentClass
- a กับ b มีลูกด้วยกัน 3คน ชื่อ c, d, f และสมมุติให้ c,d,f เป็น Class ChildClass
- a กับ b มีคุณสมบัติเฉพาะดังนี้  ชื่อ ความสูง น้ำหนัก เพศ มีพฤติกรรมดังนี้ วิ่งสองขา นอนหลับ การกิน
คุณสมบัติและพฤติกรรมเหล่านี้จะถูกถ่ายทอดไปสู่ลูกๆ ทั้ง 3 ด้วย

แล้วทำอย่างไรให้ ParentClass รู้ว่า ChildClass เป็น Class ลูก(Sub-Class) ของตัวเอง
ก็ต้องประกาศให้เป็นที่รู้กันด้วย keyword ที่ชื่อ extends
รูปแบบ
class ChildClass extends ParentClass
{
//doSometing....
}
เพียงแค่นี้ ClidClass ก็สามารถเรียกใช้คุณสมบัติจาก ParentClass ได้แล้วครับ

ok. เดี๋ยวมาทำให้มันเห็นภาพแบบ ง่ายๆ สั้นๆกันครับ
ผมจะเริ่มด้วยการสร้างไฟล์ขึ้นมา 3 ไฟล์ คือ index.php, Parentclass.php, Childclass.php
ผมจะเริ่มที่ไฟล์ Parentclass.php ก่อน

ไฟล์ Parentclass.php
class ParentClass
{
    public function __construct()
    {
        echo 'ฉันสามารถวิ่ง 2 ขาได้';
    }
}
ท่านคงจะจำ method __construct() ได้ ถ้าไม่ได้ก็ให้ไปอ่านบทความก่อนหน้านี้ครับ
จากนั้นผมก็จะเรียก method __construct() ด้วยการสร้างอ็อบเจ็ค ที่ไฟล์ index.php ดังนี้

ไฟล์ index.php
ไฟล์ index.php
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type"
        content="text/html; charset=UTF-8">
        <title></title>
    </head>
  <body>
<?php
require_once('Parentclass.php');
$ab = new ParentClass();
?>
  </body>
</html>

OUTPUT: ฉันสามารถวิ่ง 2 ขาได้



จากนั้นผมก็สร้าง classลูกขึ้นมา ชื่อว่า ChildClass
แล้วผมก็นำเข้าไฟล์ Parentclass.php ด้วยการ require_once()
require_once('Parentclass.php');

ไฟล์ Childclass.php
class ChildClass extends ParentClass
{
   
}
ไฟล์ Childclass.php มีแค่นี้ไม่มีอะไรเลย แต่สามารถ output ได้เหมือนกับ PrentClass ได้ทุกประการ

การนำเข้าไฟล์ Parentclass.php ท่านจะนำเข้าตรงไฟล์ Childclass.php ก็ได้ หรือที่ไฟล์ index.php
ก็ได้ แต่ถ้าท่านนำเข้าที่ไฟล์ Childclass.php ก็ไม่ต้องไปนำเข้าที่ไฟล์ index.php อีก เดี๋ยวผมขอเอาไปนำ
เข้าที่ไฟล์ index.php ก็แล้วกัน จากนั้นผมก็ output ที่ไฟล์ index.php
ไฟล์ index.php
require_once('Parentclass.php');
require_once('Childclass.php');

$cdf = new ChildClass();

OUTPUT: ฉันสามารถวิ่ง 2 ขาได้



ที่นี้เดี๋ยวผมจะเปลี่ยนวิธีเรียก function __contruct ของ ParentClass ใหม่ด้วยการใช้ คำว่า parent แล้วตามด้วยเครื่องหมาย ::
รูปแบบ
ไฟล์ Childclass.php
class ChildClass extends ParentClass
{
   function __construct()
    {
        parent::__construct();
    }
}

OUTPUT: ฉันสามารถวิ่ง 2 ขาได้


ทุกอย่างยังสืบทอดได้เหมือนเดิม

แล้วถ้าผมมี mathod เพิ่มขึ้นมา 2 mathod  ที่ไฟล์ Parentclass.php ดังนี้
class ParentClass
{
    public function __construct()
    {
        echo 'ฉันสามารถวิ่ง 2 ขาได้';
    }

    public function doSometing()
    {
        return 'call me doSometing';
    }
}
จากนั้นผมก็ เรียก method doSometing() ที่ไฟล์ Childclass.php ดังนี้
ไฟล์ Childclass.php
class ChildClass extends ParentClass
{
    public function __construct() 
    {
        parent::__construct();
        echo $this->doSometing();
    }
}

OUTPUT: ฉันสามารถวิ่ง 2 ขาได้ call me doSometing



ในบทความนี้ท่านก็ได้เห็น วิธีการสืบทอดคุณสมบัติ จาก Class(แม่แบบ) ของ Classลูก(Sub-Class)
พร้อมทั้งวิธีการเรียกใช้งาน ผิดพลาดยังไงก็ขออภัยด้วยครับ สำหรับบทความนี้ผมก็ขอจบเพียงเท่านี้.....

Read More

Encapsulation การปกป้องข้อมูลของอ็อบเจกต์ OOP PHP



Encapsulation ก็คือการปกป้องข้อมูลของอ็อบเจกต์ ด้วยการใช้คีย์เวิร์ด อย่าง public, private, protected การใช้งาน public โดยปกติค่าพื้นฐานของ property กับ method จะเป็น public อยู่แล้วโดยไม่ต้องใส่ public จะใส่หรือไม่ใส่ก็ได้ ท่านจะเขียนแแบบนี้ var $name; หรือแบบนี้ public $name; ก็ได้....

Encapsulation ก็คือการปกป้องข้อมูลของอ็อบเจกต์ ด้วยการใช้คีย์เวิร์ด อย่าง public, private, protected
วิธีการก็คือ ใช้คีย์เวิร์ดเหล่านี้วางไว้ขางหน้า property และ method
property = variable(ตัวแปร)
method = function(ฟังก์ชั่น)

Public = สามารถใช้งานได้ทั่วไป
Private = สามารถเข้าใช้ได้เฉพาะภายในคลาส
Protected = สามารถเข้าใช้ได้ภายในคลาส และคลาสที่สืบทอด(extends)จากคลาสแม่

การใช้งาน public โดยปกติค่าพื้นฐานของ property กับ method จะเป็น public อยู่แล้วโดยไม่ต้องใส่
public จะใส่หรือไม่ใส่ก็ได้
ท่านจะเขียนแแบบนี้ var $name; หรือแบบนี้ public $name; ก็ได้

property หรือ method ที่ถูกกำหนดให้เป็น public สามารถเรียกใช้จากภายนอก Class
ได้ทันทีที่กำหนดอ็อบเจกต์ เช่น
class Human{
var $name = 'Bookneo';
}
หรือ
class Human{
public $name = 'Bookneo';
}
ผมสามารถเรียกใช้ ด้วยการสร้างอ็อบแบบนี้
$Myname = new Human();
echo $Myname->name;
ส่วน private ไม่สามารถเรียกใช้จากภายนอกได้ แต่สามารถเรียกใช้ภายใน Class ได้ เช่น
class Human{
private $name = 'Bookneo';

function getName(){
return $this->name;
}
}
return คือการคืนค่ากลับออกไปผ่าน method
$this คือการเชื่อมโยงระหว่าง property กับ method โดยการใช้เครื่องหมาย -> ชี้ตำแหน่ง

เรียกใช้
$Myname = new Human();
echo $Myname->getName();
ทีนี้ผมจะสร้างไฟล์ขึ้นมา 2 ไฟล์ คือ index.php กับ Myclass.php
ไฟล์ Myclass.php ผมจะสร้าง method ขึ้นมา 2 method คือ setName กับ getName
method setName จะรับค่ามา 1 ค่า เริ่มต้นด้วยการเซ็ตค่าว่างให้เป็นค่าพื้นฐาน
method getName จะคืนค่ากลับออกไป
รูปแบบ
class Human
{    
function setName($name = ''){
    $this->name = $name;
}

function getName(){
    return $this->name;
}    
}
ไฟล์ index.php  ผมจะส่งค่าไปให้กับ method setName แบบนี้
$Myname->setName('Bookneo');

ไฟล์ index.php 
<!DOCTYPE html>
<html>
<head>
<mata>charset=utf-8</mata>
<title></title>
</head>
<body>

<?php
require_once('Myclass.php');
$Myname = new Human();
$Myname->setName('Bookneo');
echo $Myname->getName();
?>

</body>
</html>

สำหรับบทความนี้ก็ขอจบเพียงเท่านี้.....

Read More

วันศุกร์ที่ 19 กรกฎาคม พ.ศ. 2556

Construct ฟังก์ชั่นพิเศษ OOP PHP



ใน PHP5 Construct เป็นฟังก์ชั่นพิเศษ ที่จะถูกเรียกใช้งานทันทีเมื่อเราสร้างอ๊อบเจ็คจากคลาส

รูปแบบการเขียน
class Human
{
    function __construct()
    {
        echo "My name is Bookneo";
    }
}
เรียกใช้งาน
$name = new Human();
อีกวิธีหนึ่งก็คือ การสร้าง function ที่มีชื่อเดียวกันกับ class ตัวอย่าง
class Human
{
    function human()
    {
        echo "My name is Bookneo";
    }
}
เรียกใช้งาน
$name = new Human();
ทีนี้ผมจะสร้าง file ขึ้นมา 2 ไฟล์ คือ
Myclass.php เพื่อเก็บ function ต่างๆ
myview.php สำหรับเรียกใช้งาน function หรือเป็น html page สำหรับแสดงข้อมูลออกทางจอภาพ

ไฟล์ Myclass.php ผมจะเขียนโค้ดแบบนี้
<?php
class Human
{
    function __construct()
    {
        echo "<font color='blue'><h2>My name is Bookneo</h2></font>";
    }
}

?>

ไฟล์ myview.php 
<html>
    <head>
        <title></title>
    </head>
    
    <body>
        <?php
        
        require_once('Myclass.php');//นำเข้าไฟล์ Myclass.php
        
        $name = new Human();
        
        ?>
    </body>
    
</html>




Read More

วันอังคารที่ 7 พฤษภาคม พ.ศ. 2556

"สวัสดีชาวโลก" กับ OOP PHP



หลังจากที่หายไปนาน ในที่สุดผมก็ปรับปรุงเว็บใหม่เสร็จ แต่อาจจะยังไม่เรียบร้อยเท่าไหร่ ไม่เป็นไรปรับปรุงกันไป เรื่อยๆก็แล้วกัน ขอออกตัวก่อนว่าผมไม่ได้เก่ง ผมยังเรียนอยู่เลย ผมเพียงแต่บันทึก ร่องรอยการเรียนรู้ของผม ที่อาจเป็นประโยชน์สำหรับท่าน ผู้เดินทางด้วยกันเท่านั้น บทความที่ผมเขียนจะไม่มีหลักในทางวิชาการใดๆทั้งสิ้น ผมเน้นในเรื่องของการปฏิบัติ อย่างเดียว เขียนแบบนี้แล้ว จะเกิดผลอย่างนี้ จากนั้นก็นำไปใช้งานจริง เอ้า! มาว่าเรื่อง OOP PHP กันต่อ...

คำหลักๆ ที่เราจะได้รู้จักก็มี  class, function, this และ parent

 เราจะเริ่มด้วยการสร้าง  class ขึ้นมาก่อน
 จากนั้นก็สร้าง function เรียกแบบ oop ว่า Method แต่ผมขอเรียกว่าฟังก์ชั่นก็แล้วกัน
 ผมจะตั้งชื่อ class นี้ว่า Human รูปแบบของ class Human จะเป็นแบบนี้
<?php
 class Human {
     
 }
 ?>
จากนั้น ผมก็จะสร้าง function talk() ไว้ภายใน class แบบนี้
<?php
 class Human {
     function talk(){
         echo "Hello World";
     }
 }
?>
ตอนนี้เราไม่สามารถจะเรียกใช้งาน function talk() ได้ จนกว่าเราจะประกาศเสียก่อนว่า ใครคือ Human
ผมขออธิบายแบบง่ายๆ ไม่ว่า ใครหรือสิ่งใดก็ตามเมื่อถูกประกาศว่าเป็น Human
ก็สามาถใช้งาน function talk() ได้ทั้งนั้น
วิธีการประกาศ ผมจะประกาศว่า นาย $bookneo เป็น Human รูปแบบ
$bookneo = new Human();

นาย $bookneo ก็สามารถเรียกใช้งาน function talk() ได้ดังนี้
$bookneo->talk();

รูปแบบเต็ม
<?php
 class Human {
     function talk(){
         echo "Hello World";
     }
 }

$bookneo = new Human();
$bookneo->talk();

?>


ใน class Human เราจะเพิ่ม function กี่ฟังก์ชั่น ก็ได้ เวลาเรียกใช้ เราก็ประกาศ Human แค่ครั้งเดียว
ตัวอย่าง
<?php

class Human {

    function talk() {
        echo "Hello World";
    }

    function name() {
        echo " <font color='blue'>My name is bookneo</font>";
    }

}

$bookneo = new Human();
$bookneo->talk();
$bookneo->name();

?>



สำหรับบทความนี้ก็ขอจบเพียงเท่านี้ก่อน ไว้เจอกันในบทความต่อไปครับ....



Read More

วันอังคารที่ 30 เมษายน พ.ศ. 2556

OOP การเขียนโปรแกรมเชิงวัตถุ PHP (เกริ่นนำ)



การเขียนโปรแกรมเชิงวัตถุ (อังกฤษ: Object-oriented programming, OOP) คือหนึ่งในรูปแบบการเขียนโปรแกรมคอมพิวเตอร์ ที่ให้ความสำคัญกับ วัตถุ ซึ่งสามารถนำมาประกอบกันและนำมาทำงานรวมกันได้ โดยการแลกเปลี่ยนข่าวสารเพื่อนำมาประมวลผลและส่งข่าวสารที่ได้ไปให้ วัตถุ อื่นๆที่เกี่ยวข้องเพื่อให้ทำงานต่อไป....

Object Oriented Programming หรือ OOP หรือ การเขียนโปรแกรมเชิงวัตถุ หมายถึง การเขียนโปรแกรมโดยการมองว่าโปรแกรมใดๆเป็นวัตถุชนิดหนึ่ง ที่ประกอบไปด้วย คุณสมบัติ(property) และ วิธีการ(method)

เช่น คลาสรถ ประกอบด้วย คุณสมบัติ สี จำนวนล้อ และ วิธีการ เช่น วิธีขับ วิธีจอด เป็นต้น นอกจากนี้ OOP ที่ดี ยังต้องมีคุณสมบัติการสืบทอด(inherited) เช่น คลาสรถยนต์ สืบทอดมาจากคลาสรถ และ คลาสรถมอเตอร์ไซต์ ก็สืบทอดมาจากคลาสรถเช่นเดียวกัน แต่ทั้ง 2 คลาส(ซึ่งเรียกว่าคลาสลูก หรือ sub class) ก็อาจมีคุณสมบัติบางอย่างที่แตกต่างจาก คลาสรถ(คลาสแม่ หรือ base class) เช่น คลาสรถยนต์ มี 4 ล้อ และ คลาสรถมอเตอร์ไซต์ มี 2 ล้อ เป็นต้นโปรแกรมเชิงวัตถุOOP ช่วยให้เขียนโปรแกรมได้อย่างสง่างาม ตรวจสอบได้ง่าย สามารถนำโค้ดที่เขียนไว้ กลับมาใช้ใหม่ได้

http://iamjomjung.blogspot.com




โดยทั่วไปแล้วสำหรับโปรแกรมเมอร์ทั่วไปที่รู้จักภาษา PHP มักจะไม่เขียนโปรแกรมของตน เป็นรูปแบบ OOP แต่หากรู้ว่าการเขียนโปรแกรมแบบ OOP สามารถช่วยทำให้สามารถ เพิ่มประสิทธิภาพของโปรแกรมของตนอย่างไรล่ะก็ เราทุกคนคงคิดที่จะเปลี่ยนมาเขียนเป็น OOP แน่นอน

ในพื้นฐานของการเขียนและออกแบบโปรแกรม โปรแกรมเมอร์ทุกคนรู้ดีว่า วิธีการที่จะเขียนโปรแกรม ให้สามารถแก้ไข และ ทำงานอย่างเป็นระบบ และรวดเร็ว คือการเขียนโปรแกรมแบบ Object-Oriented Programing (OOP) หรือ การเขียนโปรแกรมเชิงวัตถุ ซึ่งมีประโยชน์ต่างๆ เช่น การเขียนโปรแกรมครั้งเดียวแต่ใช้ซ้ำหลาย ๆ รอบ, การทดสอบระบบ, การแก้ไขโค้ดโปรแกรมที่ตรงจุด ซึ่งหากว่าเรา เคยเขียนโปรแกรมที่เป็นภาษา OOP อื่นๆ เช่น C++, Object Pascal (Borland Delphi), Visual Basic .Net ก็สามารถนำมาใช้กับการเขียนโปรแกรม OOP ใน PHP ได้เหมือนๆ กัน

หากลองคิดดูว่า เราเป็นโปรแกรมเมอร์ ที่ต้องนั่งเขียนโปรแกรมกว่าสิบๆ โปรแกรม โดยมีพื้นฐานคล้ายๆ เช่น การติดต่อฐานข้อมูล, การจัดเก็บระบบสมาชิค, การติดต่อปฏิสัมพันธ์ระหว่างผู้ใช้ (Webboard, Forum) แบบเดียวกัน แต่มีระบบย่อยๆ ต่างกัน นั่นอาจทำให้เราเขียนโค้ดแล้วเกิดอาการสับสนขึ้นได้ เช่น หน้าแรกเรียกฐานข้อมูลดึงหาข้อมูลสมาชิค เขียนโค้ด 10 บรรทัด, หน้าสมาชิค เขียนโค้ดดึงข้อมูลสมาชิคอีก 10 บรรทัด และเป็นอยากนี้อีกหลายๆ หน้า นั้นคือ "การเขียนโค้ดซ้ำโดยไม่จำเป็น" หากเรานำ OOP มาประยุกต์ใช้ จะทำให้เราสามารถลดการเขียนโปรแกรม จาก 10 บรรทักในแต่ล่ะหน้า เหลือเพียงบรรทัดเดียว และเก็บโค้ดที่เหมือนๆ กันในไฟล์ๆ หนึ่ง ที่จะนำมาเรียกใช้ภายหลัง และเมื่อเก็บความผิดพลาด เราก็แก้แค่เพียงจุดเดียว แล้วทุกๆ หน้าก็จะแก้ไปเหมือนๆ กัน

มาจนถึงจุดนี้เราคงรู้แล้วว่า การเขียน OOP จะช่วยเรา ในการเขียนโปรแกรมได้อย่างไรแล้วนะครับ


phpsec แห่ง http://phpsec.exteen.com




- การเขียนโปรแกรมเชิงวัตถุ นั้นมีความปลอดภัยสูง ปลอดภัยจากอะไร ก็ปลอดภัยจากผลกระทบของการแก้ไข เพิ่มเติม เปลี่ยนแปลงโค้ด โปรแกรมของเราในภายหลังได้
- ช่วยให้เราสามารถทำงานเป็นทีมได้ง่ายขึ้น
- ช่วยให้เราไปเรียนรู้ต่อยอด เกี่ยวกับ php framework เช่น Zend, Cakephp, Codeigniter อื่นๆ ได้ง่ายขึ้น
- ช่วยให้เราไม่ต้องเขียนโค้ดซ้ำๆ เดิมๆ ทุกครั้ง ให้เพื่อนเอาไปใช้ก็ได้ หรือเอาของเพื่อนมาใช้ก็ได้ อันนี้ดีมาก อิอิ..

แค่นี้ก่อน ไว้บทความหน้า ไปภาคปฏิบัติกันครับ...




Read More

วันพุธที่ 3 เมษายน พ.ศ. 2556

Update chat แบบ simple ๆ ภาค2 + emoticon PHP, jQuery



ที่จริงวิธีสร้าง chat มีสองวิธี คือเก็บเป็นไฟล์ text กับเก็บลงฐานข้อมูล วิธีที่ผมเขียนบทความนี้เป็นวิธี เก็บลงฐานข้อมูล ส่วนวิธีเก็บเป็นไฟล์ text เอาไว้คราวหน้าครับ (ไม่แน่นอน^^)....

เริ่มเลยดีกว่าครับ
สิ่งที่ต้องมี

ผมจะเริ่มทำงานกับไฟล์ mychat.php ก่อนด้วยการใส่ตัว emoticon ลงไปพร้อมกับคลิกเพิ่มตัว
emoticon ลงในช่อง message ของเราดังนี้
ไฟล์ mychat.php
จากไฟล์เดิม

<div id="formsend">
<input type="text" id="msg" name="msg"/>
<button id="send" onclick="Send();">Send</button>
</div>

ท่านสังเกตุดูนะครับจากที่ผมเรียนมาเราจะใส่ input ใน form ใช่มั๊ยครับ แต่ไฟล์นี้ผมไม่ใส่
เพราะว่าพอผมใส่แล้ว chat มันจะกระพริบ แต่พอผมตัด form ออกมันไม่กระพริบ งงมั๊ยครับ
ถ้าท่านไม่ งง เอาเป็นว่าผม งง เองก็แล้วกัน อิอิ.. แสดงว่าเราไม่ควรยึดติดกับเรื่องนี้แแบบตายตัวมากนัก
เพราะมันเป็นเรื่องที่ยืดหยุ่นกันได้ ชักจะยาวแล้ว อิอิ.. ต่อเลยครับ
หลังจากนั้นผมเพิ่มตัว emoticon เข้าไปแบบนี้

<div id="emoticon">
<?php
$emoticon = 19 ;
for ($i = 0; $i <= $emoticon; $i++) {
?>
<img id="emotion" src="smiley/<?php echo $i ?>.gif" 
onclick ="msg.value+='[:<?php echo $i ?>:]';msg.focus();"/>

<?php
}
?>
</div>

ชื่อตัว emoticon ของท่านจะต้องเป็นตัวเลขนะครับเพราะว่า เราจะวนลูปด้วย for เพื่อเอาตัวเลข
มาเป็นชื่อครับ ก็จะใด้แบบนี้ [:0:],[:1:] เรียงกันไปเรื่อยๆ แล้วแต่ว่าเราจะมีตัว emoticon กี่ตัวครับ

แล้วเพิ่ม CSS ให้กับไอดี emotion เวลาที่เราเอาเมาส์ไปชี้ให้เป็นรูปมือแบบนี้

<style type="text/css">
    #emotion{
        cursor:pointer;
}
</style>
update เสร็จแล้วสำหรับไฟล์ mychat.php

หลังจากนั้นผมก็ไปอัพเดทเพิ่มเติมที่ไฟล์ chat_out.php
เพราะว่าเราจะต้องไป replace ตัว emoticon ให้ เครื่องหมาย [::] นี้กลายเป็นแท็ก img ครับ
แล้วก็เพิ่มเติมฟังก์ชั่น autolink() หมายถึงว่าเวลามีคนโพสลิงค์เข้ามาก็ให้สามารถใช้เมาส์กดเป็นลิงค์ส่ง
ไปเปิดอีกหน้าต่างหนึ่งครับ

ไฟล์ chat_out.php
ผมจะสร้างฟังก์ชั่น autolind ก่อนดังนี้

<?php
function autolink($msg) {
$msg = preg_replace
("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i",
"\\1<a href=\"mailto:\\2@\\3\"><font color=blue>\\2@\\3</font></a>"
, $msg);
$msg = preg_replace
("#(^|[\n ])([\w]+?://[^ \"\n\r\t<]*)#is",
"\\1<a href=\"\\2\" target=\"_blank\"><font color=blue>\\2</font></a>"
, $msg);
$msg = preg_replace
("#(^|[\n ])((www|ftp)\.[^ \"\t\n\r<]*)#is",
"\\1<a href=\"http://\\2\" target=\"_blank\"><font color=blue>\\2</font></a>"
, $msg);
return ( $msg );
}
?>

จากนั้นก็ตามด้วยการ replace ตัว emoticon แบบ Array ดังนี้
<?php
$pic = array("[:0:]", "[:1:]", "[:2:]", "[:3:]", "[:4:]", "[:5:]",
    "[:6:]", "[:7:]", "[:8:]", "[:9:]", "[:10:]","[:11:]", "[:12:]",
    "[:13:]", "[:14:]", "[:15:]", "[:16:]", "[:17:]", "[:18:]", "[:19:]"
);
$replace = array("<IMG SRC='smiley/0.gif'>", "<IMG SRC='smiley/1.gif'>"
, "<IMG SRC='smiley/2.gif'>", "<IMG SRC='smiley/3.gif'>"
, "<IMG SRC='smiley/4.gif'>", "<IMG SRC='smiley/5.gif'>"
, "<IMG SRC='smiley/6.gif'>", "<IMG SRC='smiley/7.gif'>"
, "<IMG SRC='smiley/8.gif'>", "<IMG SRC='smiley/9.gif'>"
, "<IMG SRC='smiley/10.gif'>", "<IMG SRC='smiley/11.gif'>"
, "<IMG SRC='smiley/12.gif'>", "<IMG SRC='smiley/13.gif'>"
, "<IMG SRC='smiley/14.gif'>", "<IMG SRC='smiley/15.gif'>"
, "<IMG SRC='smiley/16.gif'>", "<IMG SRC='smiley/17.gif'>"
, "<IMG SRC='smiley/18.gif'>", "<IMG SRC='smiley/19.gif'>"
);
?>


ถ้าท่านมีตัว emoticon มากกว่านี้ก็ใส่เพิ่มเข้าไปเลยครับ

แล้วผมก็กำหนดตัวแปร $msg เสียใหม่ดังนี้

<?php
$msg = $row[msg];
$msg = strip_tags($row[msg],"<img>,<a>,<b>");//กำหนดให้ตัดแท็ก html ทั้งหมดยกเว้น
//<img>,<a>,<b> เพื่อตัดปัญหาจากการโพสแท็ก html
$msglink = autolink($msg);
$msgout[] = str_replace($pic, $replace, $msglink);
?>

จากนั้นก็เปลี่ยนการวนลูปเพื่อการแสดงข้อมูลใหม่ดังนี้
<?php
for ($i = count($msgout) - 1; $i >= 0; $i--) {
echo "<div style='padding:5px;overflow:hidden;word-wrap:break-word;'>";
echo "<font style='color:#999999;font-size:9px;'>".$datechat[$i]."</font>";
echo "&nbsp;";
echo "<font color='#0000ff'>:: </font>";
echo "<font color='#29498B' size='2'><b>".$user[$i]."</b></font>";
echo "&nbsp;";
echo "<font color='#ff0000'>>></font>";
echo "&nbsp;";
echo $msgout[$i];
echo "</div>";
}
?>

ข้อสังเกตุ
จากฟังก์ชั่นการอนุญาติแท็ก html นี้ $msg = strip_tags($row[msg],"<img>,<a>,<b>");
ท่านอาจเปลี่ยนไปใช้ BBCODE ก็ได้ครับซึ่งส่วนใหญ่เป็นอย่างนั้น แต่บทความนี้ ผมเน้นแบบง่ายๆ
ที่เหลือท่านก็ไปพัฒนาต่อเติมเสริมแต่งกันไปครับ

ไฟล์ที่ให้ download มีแต่ตัว emoticon ส่วนที่เหลือท่านก็นำไฟล์จากบทความก่อนมาปรับปรุงเอานะครับ
ในที่สุดการอัพเดท Chat ของเราก็จบลงเท่านี้เชิญทดไปทดสอบครับ...



Read More

© Bookneo, AllRightsReserved.

ขับเคลื่อนโดย Blogger Designed by Nikhorn Thongchuay