วันอาทิตย์ที่ 25 พฤศจิกายน พ.ศ. 2555

php excel class

<?php
$a = array('A','B','C');
$fs = array('field1','field2','field3');
$cs = array(
    array('aaa1','bbb1','ccc1ทดสอบ'),
    array('aaa2','bbb2','ccc2'),
    array('aaa3','bbb3','ccc3'),
);
require_once './excel/PHPExcel.php';
$e = new PHPExcel();
$e->getProperties()->setCreator("num")
        ->setLastModifiedBy("num")
        ->setTitle("Report")
        ->setSubject("Report")
        ->setDescription("Report")
        ->setKeywords("report")
        ->setCategory("report");

$default_border = array(
    'style' => PHPExcel_Style_Border::BORDER_THIN,
    'color' => array('rgb'=>'1006A3')
);
$style_header = array(
    'borders' => array(
        'bottom' => $default_border,
        'left' => $default_border,
        'top' => $default_border,
        'right' => $default_border,
    ),
    'fill' => array(
        'type' => PHPExcel_Style_Fill::FILL_SOLID,
        'color' => array('rgb'=>'E1E0F7'),
    ),
    'font' => array(
        'bold' => true,
        'name' => 'CordiaUPC',
        'size' => 30,
    )
);
$sh = $e->setActiveSheetIndex(0);
$sh->getStyle('A1:C4')->applyFromArray( $style_header );
$sh->getColumnDimension('C')->setWidth(20);
foreach($fs as $i=>$f)
        $sh->setCellValue($a[$i].'1', $f);
$row = 2;
foreach($cs as $c){
        $vals = array_values($c);
        foreach($fs as $i=>$f)
                $sh->setCellValue($a[$i].$row, $vals[$i]);
        $row++;
}
$e->getActiveSheet()->setTitle('Report');
$e->setActiveSheetIndex(0);
$writer = PHPExcel_IOFactory::createWriter($e, 'Excel5');
$writer->save('test.xls');
?>



PHPExcel.php ดาวนโหลดได้ที่ http://phpexcel.codeplex.com/

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

windows 8



windows 8 มาพร้อมกับสิ่งใหม่ๆ มากมายครับ

Start Screen หน้าจอเริ่มต้นจะแสดงข่าวสารล่าสุดที่คุณสนใจ สภาพอากาศวันพรุ่งนี้ ข้อความใหม่จากเพื่อนของคุณฯลฯ

Windows 8 มีความสามารถสมบูรณ์แบบกับ touchscreens ซึ่งมี mouse และ keyboard และ computer tablet แบบต่างๆ

Internet explorer 10 เร็วและยึดหยุ่นกว่าเดิม

Apps รวมโปรแกรมพื้นฐานที่เกี่ยวของกับ Skydrive, Skype, Facebook, Mail และโปรแกรมออนไลน์ไว้มากมาย

Microsoft Office 2013 สำหรับงานเอกสาร

อ่านเพิ่มเติมได้ที่
http://windows.microsoft.com/en-US/windows-8/meet
http://www.manager.co.th/cyberbiz/viewNews.aspx?NewsID=9550000130841

วันพฤหัสบดีที่ 27 กันยายน พ.ศ. 2555

php-xml-edit-attribute

ไฟล์ edit-attribute.php
<?php
$sx = new SimpleXMLElement('./test.xml', null, true);
$sx->book[1]['id'] = 9;
$sx->asXML('./test.xml');
ไฟล์ test.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
   <book id="1">
        <author>AAA</author>
    </book>
    <book id="2">
       <author>BBB</author>
    </book>
</books>

วันอาทิตย์ที่ 9 กันยายน พ.ศ. 2555

php pdo

วิธีการใช้งาน php pdo แบบง่ายๆ ครับ php pdo class จะมีคำสั่งช่วยในการป้องกัน sql injection และคำสั่งการดึงข้อมูลที่หลากหลาย ช่วยให้สะดวกในการเขียนโปรแกรมติดต่อกับ database ครับ
/*
CREATE TABLE `tbcontact` (
        `id` INT(4) NOT NULL AUTO_INCREMENT,
        `name` VARCHAR(50) NULL DEFAULT NULL,
        PRIMARY KEY (`id`)
)
ENGINE=MyISAM
*/

//configuration
$dbname = 'test';
$user = 'root';
$pass = '';

try{
    //connect    
    $db = new PDO("mysql:host=localhost;dbname=$dbname;", $user, $pass, array(
        PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES UTF8'
    ));
}catch (Exception $e){
    echo 'error:'.$e->getMessage();
}

//insert
$stmt = $db->prepare('insert into tbcontact(name) values(:name)');    
$stmt->bindValue(':name','nobita');
$stmt->execute();

$info = $stmt->errorInfo();
if ($info[0]=='0000')
    echo 'no error';
else
    echo 'error: '.$info[2];

//select
echo '<hr /><h1>FETCH TO OBJECT</h1>';
$stmt = $db->query('SELECT id,name from tbcontact',PDO::FETCH_OBJ);
foreach($stmt as $row) {
    echo $row->id,'...',$row->name,'<br','>';
}

echo '<hr /><h1>FETCH TO ARRAY</h1>';
$stmt = $db->query('SELECT id,name from tbcontact',PDO::FETCH_ASSOC);
while($row = $stmt->fetch()) {
    echo $row['id'],'...',$row['name'],'<br','>';
}

echo '<hr /><h1>FETCH TO VARIABLE</h1>';
$stmt = $db->query('SELECT id,name from tbcontact',PDO::FETCH_BOUND);
$stmt->bindColumn('id',$id);
$stmt->bindColumn('name',$name);
while($row = $stmt->fetch()) {
    echo $id,'...',$name,'<br','>';
}

echo "column count = {$stmt->columnCount()}, row count= {$stmt->rowCount()}";

วันศุกร์ที่ 7 กันยายน พ.ศ. 2555

PHP Calendar Class

class Calendar{
    protected $time;
    protected $timezone;
    public $isLeapYear;
    public function __construct($year) {
        $this->timezone = new DateTimeZone('Asia/Bangkok');
        $this->time = DateTime::createFromFormat('Y-n-j', $year.'-1-1', $this->timezone);
        $this->isLeapYear = checkdate(2, 29, $this->time->format('Y'));
    }
    protected function getMonthFirstDay($month){
        $format = sprintf('%d-%d-1',$this->time->format('Y'),$month);
        return DateTime::createFromFormat('Y-n-j', $format, $this->timezone);
    }
    public function getMonthDays($month){
        $interval = DateInterval::createFromDateString('+1day');
        $time = $this->getMonthFirstDay($month);
        $a = array();
        while($time->format('n') == $month){
            $a[] = clone $time;
            $time->add($interval);
        }
        return $a;
    }
    public static function monthName($month){
        $a = array(1=>'มกราคม','กุมภาพันธ์','มีนาคม','เมษายน',
            'พฤษภาคม','มิถุนายน','กรกฎาคม','สิงหาคม','กันยายน'
            ,'ตุลาคม','พฤศจิกายน','ธันวาคม');
        return $a[$month];
    }
    public static function dayName(DateTime $date){
        $a = array('อาทิตย์','จันทร์','อังคาร','พุธ','พฤหัสบดี','ศุกร์','เสาร์');
        return $a[$date->format('w')];
    }
}

header('Content-type:text/html;charset=utf-8');
#header('Content-type:text/html;charset=tis-620');
$c = new Calendar(2012);
echo '<h1>Calendar 2012</h1>';
foreach(range(1,12) as $month){    
    echo '<h2>',Calendar::monthName($month),'</h2>';
    foreach($c->getMonthDays($month) as $d){
        echo Calendar::dayName($d),' ',$d->format('j'),'<','br/>';
    }
}

วันอาทิตย์ที่ 22 กรกฎาคม พ.ศ. 2555

Fix mysql database utf8 and tis620 encoding

ปัญหาการ encoding ของ database ไม่ถูกต้องซึ่งทำให้ภาษาไทยไม่แสดงผล มีหลายกรณีด้วยกันครับ

สำหรับการแก้ปัญหาที่ยกตัวอย่างมานี้
จะเป็นวิธีการแก้ไข encoding ของ database ที่ถูกป้อน
ข้อมูลผ่าน php โดยไม่ได้กำหนดค่า set names utf8 หรือ set names tis620
ทำให้ names default mysql ถูกใช้ซึ่งปกติจะเป็น latin1


ขั้นที่ 1. export ไฟล์เป็น .sql ผ่าน phpmyadmin เป็น utf8 (เป็นค่า default อยู่แล้ว)
ขั้นที่ 2. สร้าง database ใหม่เป็น utf8 สำหรับทดสอบ สร้างตารางชื่อ test ขึ้นมาและสร้าง field ขึ้นมา field หนึ่งเป็น long_text ตั้งชื่อว่า field1
ขั้นที่ 3. เพิ่ม record ของตาราง test ขึ้นมา โดย copy โค้ดจากไฟล์ .sql มาใส่ไว้ใน field1 
ขั้นที่ 4 แทรกคำสั่ง set names latin1; จากนั้นแสดงผล field1 ของตาราง test
ขั้นที่ 5 จะได้ข้อมูลโค้ดจากไฟล์ .sql ในรูปแบบภาษาไทยที่ถูกต้อง นำไปใช้ import ได้
(ขั้นที่ 5 ถ้าแสดงผลใน browser จะต้องกำหนดค่า charset utf8)


ถ้าต้องการให้ช่วยแปลงข้อมูลภาษาไทยที่ผิดปกติ
สามารถติดต่อได้ที่ 0897902424 (หนุ่ม)
คิดค่าบริการประมาณ 200-1000 โดยขึ้นอยู่กับจำนวนตารางข้อมูลครับ

วันจันทร์ที่ 2 กรกฎาคม พ.ศ. 2555

mysql-transaction-example

โปรแกรมที่มีคนใช้กันหลายคนจะมีโอกาสที่เกิดเหตุการณ์บันทึกข้อมูลผิดพลาดได้ง่าย
ให้ใช้ transaction ในการ commit ถ้าข้อมูลถูกต้องแล้ว เพื่อทำการบันทึกจริง
และ rollback เมื่อตรวจสอบแล้วพบว่าข้อมูลผิดพลาดเพื่อย้อนกลับไปเหมือนยังไม่เคยเกิดเหตุการ update ใดๆ

<?php
/*
CREATE TABLE `x` (
`id` INT(10) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(10) NOT NULL DEFAULT '0',
`qty` INT(10) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
)
ENGINE=InnoDB ROW_FORMAT=DEFAULT
*/


$rs = mysql_connect('localhost','root','');
mysql_select_db('xx');
mysql_query('set names utf8');

mysql_query('SET autocommit = 0');
mysql_query('START TRANSACTION');

mysql_query('update x set qty=qty-5');
$rs = mysql_query('select qty from x where id=1');
if (mysql_result($rs,0) > 0)
mysql_query('COMMIT');
else
mysql_query('ROLLBACK');
mysql_query('SET autocommit = 1');

?>

วันเสาร์ที่ 23 มิถุนายน พ.ศ. 2555

jquery text animation

http://sideroad.secret.jp/plugins/jQueryTextAnimation/


jQuery Text Animation Plugin is for making custom text animations.
Dual licensed under the MIT or GPL Version 2 licenses.
Requires jQuery , jQuery UI.
Supported Browser : Firefox 3.x+, Google Chrome2.x+, IE8+, Safari5.x+