ค้นหาค่า auto_increment ของ table ด้วย MDB2

        $sql = "SHOW TABLE STATUS LIKE 'table_name'";
        $res = $mdb2->query($sql);
        if (PEAR::isError($res)) {
            die($res->getMessage());
        }
        $result = $res->fetchRow();
        $next_id = $result['auto_increment'];

จัดการภาษาไทย (UTF-8) ด้วย Multibyte String Functions

UTF-8 ใช้พื้นที่ 3 ไบต์ ในการเก็บข้อมูลภาษาไทย 1 อักขระ  ดังนั้นจึงไม่สามารถใช้ฟังก์ชัน เช่น strlen() และ substr() กับภาษาไทยที่เป็น UTF-8 ได้ เช่น

$string = "ที่นี่abcd1234";
echo 'strlen() return: '.strlen($string);
ผลลัพธ์ที่ได้คือ
strlen() return: 26

ตัวเลข 26 มาจาก ภาษาไทย 6×3 = 18, ภาษาอังกฤษ 4 และตัวเลข 4 ตัว

ดังนั้นเพื่อให้นับจำนวนตัวอักขระได้อย่างถูกต้องจะต้องใช้ฟังก์ชัน multibyte  string  เช่น จากตัวอย่างข้างต้น จะต้องใช้ฟังก์ชัน mb_strlen() แทน strlen()

Continue reading จัดการภาษาไทย (UTF-8) ด้วย Multibyte String Functions

กลับไปหน้าที่แล้ว

วิธีการที่จะทำให้ script กลับไปหน้าที่แล้วหลังจากทำงานเสร็จคือใช้ $_SERVER[‘HTTP_REFERER’] ครับ

<?php

// Somethint here

// Redirect back to previous page
$previous = $_SERVER['HTTP_REFERER'];
header("location:$previous");
exit;
?>

ภาษาไทยกับ PHP และ MySQL

UTF-8 เป็นคำตอบสุดท้่าย เพื่อให้การใช้ภาษาไทยกับ PHP และ MySQL ใช้งานได้อย่างสมบูรณ์

การสร้างฐานข้อมูลใน MySQL

ให้ตั้งค่าดังต่อไปนี้

  • Default CHARSET = utf8
  • COLLATE = utf8_unicode_ci

ตัวอย่างเช่น

CREATE TABLE brand (
pk_brand int(5) NOT NULL auto_increment,
brand varchar(250) collate utf8_unicode_ci NOT NULL,
brand_logo varchar(200) collate utf8_unicode_ci NOT NULL,
website varchar(200) collate utf8_unicode_ci default NULL,
PRIMARY KEY  (pk_brand)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

แล้วทำไมจึงไม่ใช้ utf8_general_ci?  อ่านได้ที่นี่

การเชื่อมต่อจาก PHP ไปยัง MySQL

หลังจากที่เชื่อมต่อกับฐานข้อมูลแล้วให้ส่ง query ต่อไปนี้ด้วย (ทำแค่ครั้งเดียว)

  • set NAMES utf8

ขอให้สังเกตว่า ใช้ utf8  ไม่ใช่  utf-8  ตัวอย่างเช่น

<?php
// Database connection for abstract
$dsn = 'mysql://username:password@localhost/database';
$mdb2 =& MDB2::factory($dsn);
if (PEAR::isError($mdb2)) {
    die ($mdb2->getMessage());
}
// set fetchmode
$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
$mdb2->query('set NAMES utf8');
?>

การเขียน META TAG ใน HTML Code

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello!</title>
</head>

🙂

PEAR::Auth package

PEAR  มีแพ็คเกจที่ชื่อว่า  Auth  ซึ่งช่วยอำนวยความสะดวกในการสร้างระบบตรวจสอบสิทธิ์ผู้ใช้ (authentication) โดยช่วยอำนวยความสะดวกตั้งแต่ การเพิ่มและลบผู้ใช้ การล็อกอิน การนำข้อมูลผู้ใช้มาแสดง การกำหนดระยะเวลาการล็อกอินและ Idle timeout และการตรวจสอบสิทธิ์ผู้ใช้งาน  ทำให้ช่วยลดเวลาในการพัฒนาโปรแกรมลงได้มาก 

สิ่งที่สำคัญคือ Auth รองรับระบบจัดเก็บข้อมูลของผู้ใช้หลากหลายประเภท ได้แก่

  • All databases supported by the PEAR database layer
  • All databases supported by the MDB database layer
  • All databases supported by the MDB2 database layer
  • Plaintext files
  • LDAP servers
  • POP3 servers
  • IMAP servers
  • vpopmail accounts (Using either PECL vpopmail or PEAR Net_Vpopmaild)
  • RADIUS
  • SAMBA password files
  • SOAP (Using either PEAR SOAP package or PHP5 SOAP extension)
  • PEAR website
  • Kerberos V servers
  • SAP servers

ทำ RSS ใช้เองง่ายๆ

RSS is a family of Web feed formats used to publish frequently updated content such as blog entries, news headlines or podcasts. An RSS document, which is called a “feed,” “web feed,” or “channel,” contains either a summary of content from an associated web site or the full text. RSS makes it possible for people to keep up with their favorite web sites in an automated manner that’s easier than checking them manually.Source: http://en.wikipedia.org/wiki/RSS_(file_format)

สำหรับคำนิยามภาษาไทย เลือกอ่านได้ตามใจที่ Google ครับ  ส่วนหากต้องการทราบรายละเอียดดูได้ที่  RSS 2.0 specification และสามารถดูตัวอย่างของ RSS 2.0 ได้ครับ

หากเราต้องการทำ RSS ขึ้นมาเองก็จะต้องทำตาม Specification ข้างต้นได้ครับ  แต่หากไม่ต้องการใช้เวลามาก ก็ใช้ฟังก์ชันที่มีคนทำไว้แล้วชื่อ FeedCreator  เราเพียงแต่เตรียมข้อมูลไว้ให้พร้อม   ข้อมูลส่วนแรกจะเป็นส่วนที่อธิบาย feed ของเรา

title คือ ชื่อ RSS ที่เราต้องการ  description เป็นคำอธิบายเกี่ยวกับ feed ของเรา  และ link คือ URL ของเว็บเพจเรา

ส่วนที่สำคัญก็คือการใส่ข้อมูลข่าวต่างๆ ลงไปใน item ต่างๆ  ตัวอย่างข้างล่างนี้เป็นการดึงข้อมูลจากฐานข้อมูล และนำไปใส่ใน feed โดยตรง

title ในที่นี้คือ ชื่อของข่าว  link เป็น url ของข่าว  description เป็นคำสรุปสั้นๆ เกี่ยวกับเนื้อข่าว  date เป็นวันที่ของข่าว  (ซึ่งจะต้องเป็นไปตามรูปแบบที่กำหนด เช่น Sun, 19 May 2002 15:21:36 GMT

ส่วน source และ author ก็คือแหล่งที่มาของข่าว และผู้เขียนข่าวตามลำดับ  และขั้นตอนสุดท้ายที่สำคัญได้แก่การบันทึกผลลัพธ์ที่ได้ลงเป็นไฟล์ เช่น feed.xml  คำสั่งข้างล่างนี้จะบันทึกผลลัพธ์ลงเป็นไฟล์ พร้อมกับแสดงผลออกมาทางหน้าจอให้เราดูด้วย

แต่ในการทำงานจริง เราต้องการให้สคริปต์ทำงานเพื่อสร้างไฟล์ feed.xml โดยไม่ต้องแสดงผลลัพธ์ออกมาทางหน้าจอ จึงต้องใส่คำสั่งเพิ่มเติมเข้าไปด้วยดังนี้

จากตัวอย่างนี้หากทุกอย่างทำงานเรียบร้อย  เราก็สามารถเรียกไฟล์ feed ซึ่งเป็นผลลัพธ์จากสคริปต์ของเราได้ เช่น http://my.diary.in.th/news/feed.xml  และเพื่อให้สคริปต์สร้างไฟล์ feed ให้เราอัตโนมัติ  ก็ควรจะสั่งให้สคริปต์ทำงานผ่านทาง crontab

อย่างไรก็ตามหากต้องการตรวจสอบว่า RSS ของเราที่สร้างมานั้นถูกต้องเพียงใด ก็สามารถตรวจสอบผ่านทาง  FEED Validator ได้ครับ

หากต้องการทำให้ feed ของเราใช้งานได้ดีมากขึ้น ก็สามารถใช้บริการของ FeedBurner (http://www.feedburner.com) ซึ่งเพิ่งจะถูกซื้อโดย Google ด้วยราคา 100 ล้านเหรียญ   และดูเหมือนจะทำให้บริการของ FeedBurner เป็นของฟรีไปแล้ว

บริการของ FeedBurner จะทำหน้าที่เป็นผู้กระจาย feed แทนเซิร์ฟเวอร์ของเราโดยตรง  นอกจากนี้ยังมี option ที่เกี่ยวช่วยให้ feed ของเราสมบูรณ์มากขึ้น เช่น สามารถเลือกปรับเปลี่ยนจาก RSS เป็น Atom ได้ตาม โปรแกรมที่เข้ามาดึงข่าว   สิ่งที่สำคัญอีกประการหนึ่งก็ feedBurner มีระบบสถิติที่ทำให้เรารู้ว่ามีผู้สมัครเป็นสมาชิกของ feed เรามากน้อยขนาดไหนด้วยครับ

PHP mod_rewrite and .htaccess tutorials

ผมเคยใช้งาน mod_rewrite กับ .htaccess นานมาแล้ว จนลืมไปหมด วันนี้ก็บังเอิญไปเจอเว็บที่น่าสนในเกี่ยวกับเรื่องนี้ครับ

Widexl.com – Module Rewrite URL Rewriting Guide
Corz.org more .htaccess tips and tricks..

Apache Mod_Rewrite URL Rewriting Engine documentation
 URL Rewriting Guide

PHP : Parsing Email Adresses in PHP

นี่เป็น PHP script ที่ใช้สำหรับตรวจสอบรูปแบบของอีเมลที่ผู้ใช้ป้อนผ่านฟอร์ม ว่าต้องเป็นไปตาม RFC822

http://www.iamcal.com/publish/articles/php/parsing_email/

เขียนอธิบายอย่างละเอียดครับ ลองแวะเข้าไปอ่านดู

ฟังก์ชันอะไรบ้างของ php ที่ควรระงับการใช้งาน

คำแนะนำจาก http://www.netadmintools.com/art411.html

disable_functions = “dl, phpinfo, shell_exec, passthru, exec, popen, system,
proc_get_status,proc_nice,proc_open,proc_terminate,proc_close”

ส่วนเว็บโฮสติ้งที่ผมใช้อยู่เค้า ยกเลิกฟังก์ชันต่อไปนี้

disable_functions = “system, shell_exec, proc_terminate, proc_open, proc_nice, proc_getstatus, proc_close, passthru, exec, escapeshellcmd, escapeshellarg”

แก้ใน php.ini (เลือกเอาตามใจชอบครับ)