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

วันศุกร์ที่ 25 ตุลาคม พ.ศ. 2556

สมัครสมาชิก และ Login แบบ OOP PHP



จากบทความก่อนผมก็จบทิ้งท้ายไว้ด้วยประโยคว่า "เอาไว้เจอกันในบทควาามหน้าครับ วิธีการ Login แบบ OOP PHP" ทีนี้ผมก็มาคิดว่าทำ Login อย่างเดียวมันน้อยไปหรือเปล่า ก็เลยขอเพิ่มวิธีลงทะเบียนสมัครสมาชิกด้วยก็แล้วกัน เพราะว่าผมคงจะขอจบบทความ ที่เกี่ยวกับ OOP PHP ไว้เพียงแค่บทนี้ คิดว่านะครับผม.. บทความนี้เป็นเพียงวิธีการอย่างง่ายเท่านั้นนะครับ เพราะผมก็ทำอย่างยากไม่เป็นเสียด้วยซิ อิอิ... LET'S GO->

SQL สำหรับทดสอบ
CREATE TABLE `members` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) NOT NULL DEFAULT '',
  `password` varchar(255) NOT NULL DEFAULT '',
  `emailaddress` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`user_id`)
);
ไฟล์ที่ต้องมี database.php, MySqlConn.php, ซึ่งเป็นไฟล์ที่ยกมาจากบทความก่อนหน้านี้ที่เกี่ยวกับ OOP
ก่อนที่จะเริ่มผมก็ต้องขอ อัพเดท function where(); ก่อนถามว่าทำไม ก็เพราะว่าฟังก์ชั่นเดิมไม่สามารถใช้
Logical Operators ได้คือ and กับ or  ดังนั้นผมก็จะอัพเดทเสียใหม่ดังนี้

ไฟล์ MySqlConn.php
public function where($data, $opera='')
    {
        if(!empty($data)){
            $keys = array_keys($data);
            $where = "WHERE ";
            for($i = 0; $i < count($data); $i++)  
           {  
                if(is_string($data[$keys[$i]])){  
                    $where .= $keys[$i]."='".$data[$keys[$i]]."'";  
                    if($i != count($data)-1){ $where .= " $opera ";}  
                }                
               
            }
            
            $this->_where = $where;
        }
    }
จากโค้ดด้านบน จะรับ parameter มาสองตัว ตัวแรกเป็นแบบ array ส่วนตัวที่สองเป็น Operators พอตอนใช้งานเราก็
เรียกแบบนี้
$data = array(
'username' => $_POST['username'],
'password' => $_POST['password'],
);

$Db->where($data, 'or');
ok ครับเรามาเริ่มวิธีสมัครสมาชิกแบบ OOP ได้แล้วซึ่งขอบอกว่าไม่ยากเลยครับ

เราจะสร้าง form กันก่อนแแบบนี้
<div id="signup">
<form name="form1" method="post" action="index.php">
    name: <input type="text" name="username"/><br/>
    pass: <input type="password" name="password"/><br/>
    pass confirm: <input type="password" name="conpassword"/><br/>
    email: <input type="text" name="email"/><br/>
    <input type="submit" name="signup" value="Submit"/>
</form>
</div>  
หลังจากนั้นเราก็จะรับค่า username กับ email ไปเช็คกับฐานข้อมูล ว่า email หรือ username นี้มีการใช้งานไปแล้วหรือยัง
แบบนี้
เริ่มด้วยการนำเข้าไฟล์ MySqlConn.php
include_once('MySqlConn.php');
ตามด้วยการสร้างอ็อบเจกต์
$Db = new MySqlConn;

if (isset($_POST['signup'])) {

$data = array(
    'username' => $_POST['username'],
    'emailaddress' => $_POST['email'],
);

$Db->where($data, 'or');
$num = $Db->num_rows('members');
if ($num > 0) {
   echo '<font color="red">Sorry Username หรือ Email นี้ได้ถูกใช้งานไปแล้ว</font>';
}
else{
   $data = array(
   'username' => $_POST['username'],
   'password' => $_POST['password'],
   'emailaddress' => $_POST['email'],
   );

   $Db->insert('members', $data);

}

}
จากโค้ดด้านบนเราส่ง username กับ email ไปเช็คว่ามีการใช้งานแล้วหรือยังด้วยฟังก์ชั่นสองฟังก์ชั่นคือ
$Db->where($data, 'or');
$num = $Db->num_rows('members');//นับแถว
ถ้า $num มากกว่า 0 ก็คือ 1 ขึ้นไปแสดงว่าถูกใช้งานแล้ว แต่ถ้าเป็น 0 ก็ให้ insert ข้อมูลที่ต้องการด้วยฟังก์ชั่น
$Db->insert('members', $data);
เพียงแค่นี้เราก็ได้ระบบการสมัครสมาชิกแล้ว ที่เหลือเราก็เพิ่มเติมการ validate ในรูปแบบต่างตามต้องการ ตัวอย่าง

ไฟ register.php
<h1>Signup Here</h1>
<?php
include_once('MySqlConn.php');
$Db = new MySqlConn;

if (isset($_POST['signup'])) {

$data = array(
    'username' => $_POST['username'],
    'emailaddress' => $_POST['email'],
);
$Db->where($data, 'or');
$num = $Db->num_rows('members');
if ($num > 0) {
    echo '<font color="red">Sorry Username หรือ Email นี้ได้ถูกใช้งานไปแล้ว</font>';
}
else {
    $data = array(
        'username' => $_POST['username'],
        'password' => $_POST['password'],
        'emailaddress' => $_POST['email'],
    );
    if(!empty($data['username']) && !empty($data['password'])
     && !empty($data['emailaddress'])  ){

    if($_POST['password'] == $_POST['conpassword']){    
    $Db->insert('members', $data);
    echo "<font color='blue'>Success ขอบคุณที่ท่านได้สมัครสมาชิกกับเรา</font>";
    }
    else{
        echo '<font color="red">การยืนยัน Password ไม่ตรงกัน</font>';
    }

    }
    else{
        echo '<font color="red">กรุณากรอกข้อมูลให้ครบ</font>';
    }
}
}
?>
เสร็จแล้วสำหรับการสมัครสมาชิก ต่อไปก็ Login ต่อเลยครับ อันนี้ง่ายมากๆเลยครับ เพราะเราก็อปเอาโค้ดวิธีสมัครสมาชิก
มาใช้นั่นเอง แต่คราวนี้เราใช้ operator เป็น and แบบนี้ $Db->where($data, 'and');
สร้าง form กันก่อน

ไฟ login.php
<h1>Login Here</h1>
<div id="login">
<form name="form1" method="post" action="index.php">
    name: <input type="text" name="username"/><br/>
    pass: <input type="password" name="password"/><br/>
    <input type="submit" name="login" value="Submit"/>
</form>
</div>  
จากนั้นสร้างอ็อบเจ็กต์
<?php
$DbLogin = new MySqlConn;
if (isset($_POST['login'])) {

$data = array(
    'username' => $_POST['username'],
    'password' => $_POST['password'],
);

$DbLogin->where($data, 'and');
$num = $DbLogin->num_rows('members');
if ($num > 0) {
    echo '<font color="blue">ไชโย Login สำเร็จแล้ว....</font>';
}
else {
    echo 'อ้าว!.. Username หรือ Password ไม่ถูกต้องนะ';
}

}
?>
เพียงเท่านี้เราก็ได้วิธีการ Signup และ Login แบบ OOP ไว้ใช้งานแล้ว ที่เหลือท่านก็ลองไปปรับปรุง พัฒนากัน
ต่อไปดูนะครับ แล้วอย่าลืมนำมา บอกเล่าเก้าสิบ เฮ้ย!... บอกเล่าสู่กันฟังบ้างนะครับ

สำหรับบทความที่เกี่ยวกับ OOP PHP Object-oriented programming ก็คงจะจบไว้ก่อนเพียงเท่านี้....
ผิดพลาดอย่างไรก็ต้องขอ อภัย ด้วยครับ......



Read More

วันอาทิตย์ที่ 13 ตุลาคม พ.ศ. 2556

วิธี Insert Update Delete (OOP PHP Part3)



บทความนี้เกี่ยวข้องกับการ insert, delete, update ข้อมูลแบบ OOP PHP เป็นความต่อเนื่องจากบทความก่อน ซึ่งเราต้องใช้งาน property, function บางตัวของบทความก่อนด้วย......

ไฟล์ที่ต้องมี index.php, database.php, MySqlConn.php ซึ่งเป็นไฟล์ที่ยกมาจากบทความก่อนหน้านี้
ฟังก์ชั่น insert()
เริ่ม
ผมจะสร้าง function เพิ่มที่ไฟล์ MySqlConn.php สำหรับ insert ข้อมูลลง database แแบบนี้
function insert($tableName, $data)
{
//บันทึกลงฐานข้อมูล....
}
function นี้รับ parameter มา 2 ค่าคือ ตารางฐานข้อมูล กับ ฟิลด์และข้อมูลที่ส่งมาแบบ Array
ดังนั้นเราก็ต้องมาแยก Array ออกเป็น 2ชุด ชุดแรกเป็น keys ชุดที่2เป็น value ด้วยฟังก์ชั่น  2ฟังก์ชั่นคือ
$keys = array_keys($data); //เก็บ keys ของ Array

$value = array_values($data); //เก็บ values ของ Array

แล้วเราก็นำมาวนลูปด้วย froeach() เพิ่มเครื่องหมาย ',' เข้าไปด้วย แบบนี้
foreach( $keys AS $key => $k ) {$sql .= $k;
if ( $key !== count($keys)-1 ) $sql.= ', ';}

foreach( $value AS $val => $v ) {$sql .= "'".$v."'";
if ( $val !== count($value)-1 ) $sql.= ', ';}
จากนั้นก็นำมาใส่ในฟังก์ชั่น insert() ก็จะออกมาในรูปแบบนี้
ไฟล์ MySqlConn.php
public function insert($tableName, $data)
    {
        if(!empty($data)){
            
        $keys = array_keys($data);   
        $value = array_values($data);       
        
        $sql = "INSERT INTO $tableName ";
        $sql .= "(";
        foreach( $keys AS $key => $k ) {$sql .= $k;
        if ( $key !== count($keys)-1 ) $sql.= ', ';}
        $sql .= ")";
        $sql .= "VALUES ";
        $sql .= "(";
        foreach( $value AS $val => $v ) {$sql .= "'".$v."'";
        if ( $val !== count($value)-1 ) $sql.= ', ';}
        $sql .= ")";
        if($sql){          
        $this->_mysql->query($sql);
        }
        }
    }
พอตอนเรียกใช้งานเราก็แค่ส่งชื่อ ตารางฐานข้อมูล พร้อมกับค่าแบบ Array แบบนี้
ไฟล์ index.php
$data = array(
'test' => 'test insert',
); 

$Db = new MySqlConn; 
$Db->insert('test', $data);
จากโค้ดด้านบน
มีความหมายว่า insert into test (title) values ('test insert')
เพียงแค่นี้ เราก็สามารถ insert ข้อมูลลงฐานข้อมูลได้แล้ว แล้วก็เป็นการ insert ข้อมูลแบบ Array ง่ายๆ
สบายๆ

ฟังก์ชั่น update()
เริ่ม
ผมก็จะเริ่มสร้างฟังก์ชั่น update() แบบนี้
function update($tableName, $data)
{
//อัพเดทลงฐานข้อมูล....
}
ดูเพียงแค่นี้ท่านก็คงร้อง อ๋อ! ครับผมเหมือนกันกับ function insert() เพียงแต่คราวนี้ผมใช้ for ในการวนลูป
พร้อมกับเพิ่ม $this->where เข้าไปด้วย ซึ่ง property ตัวนี้เราได้สร้างไว้แล้วในบทความก่อนเพียงแต่หยิบมันมาใช้ก็เท่านั้น
public function update($tableName, $data)
    {
        if(!empty($data)){
        $keys = array_keys($data);
        
       $sql = "UPDATE $tableName SET ";
            for($i = 0; $i < count($data); $i++)  
           {  
                if(is_string($data[$keys[$i]])){  
                    $sql .= $keys[$i]."='".$data[$keys[$i]]."'";  
                    if($i != count($data)-1){$sql .= ',';}     
                }   
            }
            
            $sql .= $this->_where;
            
        if($sql){ 
        $this->_mysql->query($sql);
        }
        }
    }
เพียงเท่านี้เราก็ได้ function update() ไว้ใช้งานแล้ว พอตอนเรียกใช้งาน เราก็ส่งชื่อ ตารางฐานข้อมูล พร้อมกับค่าแบบ Array แบบนี้
ไฟล์ index.php
$data = array(
'test' => 'test update',
); 

$Db = new MySqlConn; 
$Db->where('id_update', 'id');
$Db->update('test', $data);
จากโค้ดด้านบน
มีความหมายว่า update test  set 'test' = 'test update' where id_update = 'id'

ฟังก์ชั่น delete()
เริ่ม
สร้างฟังก์ชั่น delete() แบบนี้
public function delete($tableName)
{
    if(!empty($tableName)){
    $sql = "delete from $tableName $this->_where";
    $this->_mysql->query($sql);
    }
}
ฟังก์ชั่น delete() ของเราก็มีแค่นี้ รับ parameter มา 1ค่าคือตารางฐานข้อมูล พอตอน delete เราก็เรียกใช้
property $this->where แค่นี้ พอตอนเรียกใช้
$Db = new MySqlConn; 
$Db->where('id_test', 'id');
$Db->delete('test');
จากโค้ดด้านบน
มีความหมายว่า delete from test where id_test = 'id'
เพียงแค่นี้เราก็มีโค้ดสำหรับไว้ลบแถวในฐานข้อมูลได้แบบง่ายๆ สบายๆอีกแล้ว...

เดี๋ยวผมขอเพิ่มเติมฟังก์ชั่นอีกสัก 1ฟังก์ชั่น คือ num_rows() เอาไว้นับแถวในฐานข้อมูล
รูปแบบ
public function num_rows($tableName)
{
    $this->_tableName = $tableName;
    $sql = 'SELECT * FROM';
    $query = $this->_mysql->query("$sql $this->_tableName $this->_where");
    $results = mysqli_num_rows($query);

    return $results;
}
ฟังก์ชั่นนี้ไม่มีอะไรมากครับ แค่รับตารางฐานข้อมูลเข้ามาแล้วก็ นับแถวจากนั้นก็ return ค่าออกไป โดยที่เราสามารถที่จะใช้
where ได้ พอตอนใช้งาน
$Db = new MySqlConn; 
$Db->where('username', 'bookneo');
$Db->num_rows('test');
จากโค้ดด้านบน มีความหมายว่า
$sql = select * from test where username = 'bookneo'
mysql_num_rows($sql)

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

บทความนี้ก็จบลงเพียงเท่านี้ คงจะเหลืออีกสัก 1 บทความที่เกี่ยวกับ OOP คือตัวอย่างการนำไปใช้ เอาไว้เจอกันในบทควาามหน้าครับ วิธีการ Login แบบ OOP PHP .....




Read More

วันเสาร์ที่ 5 ตุลาคม พ.ศ. 2556

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



ตอนแรกคิดว่าอาจจะได้เขียนบทความนี้ก็ตอนปีใหม่นู้น...ละ แต่คิดไปคิดมา ฮึม..! มันน่าจะมีบทความส่งท้ายบีเก่าสัก 1 บทความนะ ก็เลยเลือกเอาวันนี้แหละ วันที่ 29 ธันวาคม 2554 จบบทความนี้ก็ไว้เจอกันอีกทีปีหน้าแล้วกันครับ... สำหรับบทความนี้ก็ยังคงเป็นเรื่องของการ ดึงข้อมูลจาก Database มาแสดงเหมือนเดิม เพียงแต่เป็นการเชื่อมต่อฐานข้อมูลแบบ OOP ชนิดเต็มรูปแบบ แล้วก็แบบง่ายๆเสียด้วย ผมรู้สึกรักการเขียน php แบบ Object-oriented programming ขึ้นมาเสียแล้วซิ ไปดูกันครับ....

ก่อนเริ่มท่านคงจะจำได้ ว่าบทความก่อนๆ หน้านี้ที่ผมพูดถึงฟังก์ชั่น 2 ฟังก์ชั่น คือ setName กับ getName ซึ่งเราจะได้เห็น
ลักษณะการใช้งาน ที่เหมือนกับ 2 ฟังก์ชั่นนี้ เพียงแต่เปลี่ยนชื่อไปเท่านั้นเองครับ...

เริ่ม
ผมจะสร้างไฟล์ขึ้นมา 3 ไฟล์ คือ index.php, database.php, MySqlConn.php
index.php เอาไว้ส่ง parameter และแสดงข้อมูล
database.php เอาไว้เก็บข้อมูล database
MySqlConn.php เป็น Class เก็บฟังก์ชั่นต่างๆ

เราจะเริ่มกันที่ไฟล์ database.php ก่อนดังนี้
define("host", "localhost");
define("username", "root");
define("password", "123");
define("db", "oop");
define คือ function ที่ใช้สำหรับการประกาศค่าตัวแปรคงที่ เมื่อเราประกาศค่าตัวแปรด้วยฟังก์ชั่นนี้  ตัวแปรจะถูกเก็บไว้ที่หน่วยความจำ
ทำให้เราสามารถเรียกใช้ค่าตัวแปรนี้ได้ทั้งภายในและภายนอกของ Class หรือ Function ตลอดเวลา

จากนั้นผมก็ไปนำเข้าไฟล์นี้ที่ไฟล์ MySqlConn.php ดังนี้

ไฟล์ MySqlConn.php
require_once('database.php');
ตามด้วยการสร้าง Class, function และ property 1ตัวกำหนดให้เป็น protected เอาไว้ใช้งานภายใน Class
และ SubClass เท่านั้น

ไฟล์ MySqlConn.php
require_once('database.php');

class MySqlConn
{ 

protected $_mysql;

public function __construct()
{

}

public function query()
{

}

}
หวังว่าท่านคงจะจำ __construct() ได้ ซึ่งเราจะเขียนโค้ดการเชื่อมต่อฐานข้อมูลไว้ใน function นี้เพื่อเรียกให้มันทำงาน
ทันทีที่มีการสร้างอ็อบเจกต์ เราจะเชื่อมต่อฐานข้อมูลแบบนี้ และกำหนดค่าให้กับ protected $_mysql เพื่อการเรียก
ใช้ภายหลัง
public function __construct()
    {
       $this->_mysql = new mysqli(host, username, password, db)
                       or die('not connect to sql');
    }
เสร็จแล้วเราก็ไปเรียกใช้งาน __construct() ที่ไฟล์ index.php ดังนี้
<!DOCTYPE html">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>oop php</title>
    </head>
    <body>
        <?php
        require_once('MySqlConn.php');
        $Db = new MySqlConn; 
        ?>        
        </div>
    </body>
</html>
แค่นี้การเชื่อมต่อฐานข้อมูลของเราก็เรียบร้อยแล้ว พร้อมที่จะให้เราใช้งานได้ทุกเมื่อ

แล้วผมก็ไปทำงานต่อที่ไฟล์ ไฟล์ MySqlConn.php ที่ function query()
public function query($sql)
    {   
        $query = $this->_mysql->query($sql);

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

ไฟล์ index.php
require_once('MySqlConn.php');
$Db = new MySqlConn; 
$sql = $Db->query("select * from article");

forech($sql as $row){
    echo $row['title'].'<br/>';
}
เพียงแค่นี้เราก็สามารถดึงข้อมูลจากฐานข้อมูลมาแสดง แบบ oop php เต็มรูปแบบได้แล้ว

จากโค้ดนี้
$sql = $Db->query("select * from article");
ผมอยากให้มันส่งค่า parameter ไปแบบ สามารถเลือก field ได้ หรือส่งเฉพาะชื่อตารางฐานข้อมูล แล้วออโต้ query ออกมาเลย

ก็เปลี่ยนวิธีส่งเสียใหม่ให้มี 2 parameter  แบบนี้
$sql = $Db->query("select title from", "article");
ก็ได้ หรือ ปล่อยให้ parameter แรกเป็นค่าว่างก็ได้
$sql = $Db->query("", "article");

parameter แรกคือการเลือก field ของตารางฐานข้อมูล
parameter ที่สองคือการเลือกตารางฐานข้อมูล

แล้วเราก็ไปแก้ไข function query() ดังนี้

ไฟล์ MySqlConn.php
public function query($sql='', $tableName='')
    {   

        if(!empty($sql)){
            $sql = $sql;
        }
        else{
            $sql = 'SELECT * FROM';
        }

        $this->_tableName = $tableName;
        $query = $this->_mysql->query($sql $this->_tableName);

        while ($row = $query->fetch_array()){       
           $results[] = $row;
        }
        return $results;
    }
รับ parameter มาสองค่า ใช้ if, else กำหนด parameter แรกว่า
ถ้า $sql ไม่ใช่ค่าว่าง ก็ให้ $sql = $sql; ถ้าเป็นอย่างอื่น ก็ให้ $sql = 'SELECT * FROM';
จากนั้นสร้าง property ขึ้นมาหนึ่งค่าเพื่อรับ parameter ตัวที่สองโดยกำหนดให้เป็น protected
protected $_tableName;
กำหนดค่าให้เท่ากับ patameter ตัวที่สอง
$this->_tableName = $tableName; แล้วก็เพิ่มเข้าไป query ด้วยแบบนี้
$query = $this->_mysql->query($sql $this->_tableName);
เพียงแค่นี้เราก็สามารถส่งค่า parameter แบบใหนก็ได้ตามด้านล่างนี้ แต่เราก็ต้องใส่ค่า parameter 2ค่าทุกครั้ง
โดยจะปล่อยให้ค่าใด ค่าหนึ่งว่างก็ได้ ที่ไฟล์ index.php
แบบนี้
$sql = $Db->query("select title from", "article");
หรือ
$sql = $Db->query("select title from article where article_id = '1'", "");
หรือ
$sql = $Db->query("", "article");//ค่าพื้นฐานของ parameter แรกคือ select * from
แต่ผมก็ยังคิดอีกว่า ถ้าเราใช้ where แบบโค้ดด้านบนมันจะยาวไปมั๊ย อยากให้มันส่งค่า where ไปต่างหากแบบนี้
$Db->where('article_id', '1');
จากโค้ด ความหมายก็คือ where article_id = '1' นี้มีการส่งค่า parameter ไปสองค่า ให้กับฟังก์ชั่น where();
เราก็ต้องไปสร้างฟังก์ชั่นเพื่อรับค่าสองค่านี้

ไฟล์ MySqlConn.php
protected $_where;

public function where($prop, $value)
{
if(!empty($prop)){
$this->_where = "WHERE $prop = '$value'";
}
}
จากโค้ดด้านบนเราจะเพิ่ม property อีกหนึ่งตัว แล้วกำหนดให้มีค่าเท่ากับ "WHERE $prop = '$value'
แล้วก็นำไป query แบบนี้
$query = $this->_mysql->query($sql $this->_tableName  $this->_where);
นอกจากนี้ยังมีการกำหนด order by ... desc แล้วก็ limit ซึ่งก็ใช้วิธีการเดียวกัน ดังที่ท่านจะได้เห็นตัวอย่างจากไฟล์สำเร็จแล้วแบบนี้
$query = $this->_mysql->query("$sql $this->_tableName $this->_where
         $this->_order $this->_limit");

แค่นี้เราก็ได้ปรับปรุงโค้ดของเราให้สามารถใช้งานได้ ด้วยการเขียนโค้ดสั้นๆ เพื่อ query ข้อมูลจาก database ขึ้นมาแสดงแบบนี้ 

ไฟล์ index.php
require_once('MySqlConn.php');
$Db = new MySqlConn;
$Db->where('language', 'php'); 
$sql = $Db->query("", "article"); 
โดยที่ท่านจะเรียกใช้งานกี่ครั้งก็ได้ในเพจเดียวเพียงแค่สร้าง อ็อบเจกต์ขึ้นมาใหม่ แบบนี้
$Db = new MySqlConn;
$Db->where('language', 'php'); 
$Db->order('article_id', 'desc');
$Db->limit('10');
$sql = $Db->query("select title from", "article");
  
$Db2 = new MySqlConn;
$Db2->limit('10');
$sql = $Db2->query("", "article");

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

ไฟล์ index.php
<!DOCTYPE html">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        require_once('MySqlConn.php');
        $Db = new MySqlConn;
        $Db->order('id_article', 'desc');
        $Db->where('language', 'php');
        $Db->limit('10');
        $sql = $Db->query('', 'myarticles');
        
        foreach($sql as $row){
            echo $row['title'].'<br/>';
        } 
        
        ?>        
        </div>
    </body>
</html>
ไฟล์ database.php
define("host", "localhost");
define("username", "root");
define("password", "123");
define("db", "oop");
ไฟล์ MySqlConn.php
require_once('database.php');

class MySqlConn
{     
    protected $_mysql;
    protected $_tableName;   
    protected $_where;
    protected $_order;
    protected $_limit;
    
    public function __construct()
    {
       $this->_mysql = new mysqli(host, username, password, db)
                       or die('not connect to sql');
    }

    public function where($prop, $value)
    {
        if(!empty($prop) && !empty($value)){
            $this->_where = "WHERE $prop = '$value'";
        }
    }
    
    public function order($order, $sort)
    {
        if(!empty($order)){
            $this->_order = "order by $order $sort";
        }
        
    }
    
    public function limit($value)
    {
        if(!empty($value)){
        $this->_limit = "LIMIT $value";
        }
    }
    
    public function query($sql='', $tableName='')
    {   
        if(!empty($sql)){
            $sql = $sql;
        }
        else{
            $sql = 'SELECT * FROM';
        }
        $this->_tableName = $tableName;
        $query = $this->_mysql->query('SET NAMES UTF8');
        $query = $this->_mysql->query("$sql $this->_tableName $this->_where
                 $this->_order $this->_limit");

        while ($row = $query->fetch_array()){       
           $results[] = $row;
        }
        return $results;
    }
    
    
}
Read More

วันอังคารที่ 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

© Bookneo, AllRightsReserved.

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