26 ธันวาคม 2554

เขียน Function ให้ Return ค่าออกมาหลายค่า

โดยปกติแล้ว เวลาเขียน ฟังชั่นก์ ซัก ฟังชั่นก์ ก็มักจะรีเทิร์น ค่าออกมาเพียงค่าเดียว แต่หากอยากจะเพิ่มค่าที่ รีเทิร์น กลับมาหลาย ๆ ค่า เราก็สามารถใช้ compact-extract ของ PHP ได้เลย

ตัวอย่างการใช้งาน ของ PHP

<?php

function Composite($x, $y) {
    $sum = $x + $y;
    $dif = $x - $y;
    return compact('sum', 'dif');
}

extract(Composite(3, 4));
echo $sum;
echo $dif;

?>

การใช้งาน compactextract

22 ธันวาคม 2554

Jquery เพิ่ม คอมม่า (,) ให้กับเลข ตามหน่วยต่าง ๆ

 หลักจากได้เพิ่มบทความ  Javascript เพิ่ม คอมม่า (,) ให้กับเลข ตามหน่วยต่าง ๆ   ซึ่งเป็นฟังชั่นก์ ที่มีผู้รู้เขียนไว้เป็นตัวอย่างในเว็บ thaicreate.com ห้อง PHP

แต่บทความนี้จะเป็นการนำ Jquery มาใช้แทน ซึ่งมีรูปแบบในการใช้งาน ง่าย และสะดวก  โดยเข้าไปดาวน์โหลด สคริป จากเว็บ http://www.decorplanit.com/plugin/ และในเว็บเขาก็จะมีคำอธิบายเกี่ยวกับการนำไปใช้งาน ซึ่งผมพอเข้าใจเพื่อนำไปใช้งานคร่าว ๆ ดังนี้

20 ธันวาคม 2554

โจทย์ โปรแกรมทอนเงิน ATM นำมาจากกระทู้เว็บ Thaicreate

เป็น โจทย์ข้อสอบสมัครงาน ที่เพิ่มไว้ใน Thaicreate โดยคุณ Black Megic ซึ่งมีเงื่อนไขดังต่อไปนี้

ให้เขียนโปรแกรมตู้ ATM ครับ โดยกำหนดให้มีเงินอยู่ในตู้ 23,000 บาท แบ่งเป็น แบงค์ 1,000 แบงค์ 500 แบงค์ 100 โดยให้เขียนโปรแกรมเพื่อรับจำนวนเงินที่จะถอน จากนั้นโปรแกรมจะแสดงจำนวนแบงค์ที่ออกมา ซึ่งแบงค์ 1,000 จะออกก่อน แล้วก็แบงค์ 500 100 ตามลำดับ


2 ธันวาคม 2554

สร้างรายงาน Excel ด้วย PHPExcel แบบเลือกฟิวล์ จากฐานข้อมูลได้โดย User ผู้ใช้งาน

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

25 พฤศจิกายน 2554

สร้างคำตอบแบบสุ่ม ด้วย XML และ PHP

บทความนี้จะเป็นตัวอย่างในการทำคำตอบ ของข้อสอบแต่ละข้อของเรา ให้สุ่มเปลี่ยนลำดับไปมา ซึ่งตัวคำถามเอง ถ้าหากเราดึงจากฐานข้อมูล Mysql เราก็จะใช้คำสั่ง ORDER BY RAND() เพื่อให้ข้อสอบสุ่มขึ้นมาได้เลยซึ่งตรงนี้ผมก็จะข้ามไปเป็นการสุ่มคำตอบแทน

15 พฤศจิกายน 2554

FPDF ภาษาไทย

พอดีวันนี้ได้ลองเข้าเว็บ www.fpdf.org ซึ่งได้เห็นเวอร์ชั่นใหม่ของ FPDF คือ เวอร์ชั่น 1.7 เอาลงวันที่ 2011-06-18 ห่างจากเวอร์ชั่นเก่าประมาณ 3 ปีกว่า ก็เลยทดลองโหลดมาใช้งานดูหลังแตกซิป แล้วภายในโฟลเดอร์ของ FPDF เวอร์ชั่น 1.7 จะประกอบไปด้วย

13 กันยายน 2554

นำฐานข้อมูล ที่ Backup ด้วย Navicat กลับมาใช้งาน

หลังจากบทความที่แล้ว ได้ทำการ Backup ฐานข้อมูลอัตโนมัติ ด้วย Navicat แล้ว วันนี้จะเป็นการนำฐานข้อมูลที่ได้ Backup ไว้นั้น กลับมาใช้งานกัน วิธีการมีดังต่อไปนี้

9 กันยายน 2554

สร้าง Back up ฐานข้อมูลอัตโนมัติ ด้วย Navicat

มาสร้าง Back up ฐานข้อมูลอัตโนมัติ ด้วย Navicat กัน เพื่อป้องกันข้อมูลหาย หรือว่าทาง โฮสต์ ไม่ได้แบ็คอัพไว้ให้

1.สร้าง Connection ไปยังฐานข้อมูล ที่โปรแกรม Navicat


31 สิงหาคม 2554

สร้าง Data Dictionary ด้วย Phpmyadmin

หลังจากโดน ผจก.สั่งให้ทำ Data Dict ซึ่งก็ลองเสริช หาวิธีทำใน Google ก็ได้พบกับวิธีทำโดยใ้ช้ Phpmyadmin ซึ่งง่ายมาก ๆ

วิธีการ คือ :

1. เวลาสร้างฟิวล์ ใด ๆ ในฐานข้อมูล ให้ใส่ Comment ไว้ด้วย



29 สิงหาคม 2554

Smary template แสดงข้อมูล จาก Database

หลังจากได้อ่านบทความต่าง ๆ ของ Smarty template ไปบ้างเล็ก ๆ น้อย ๆ วันนี้จะเป็นการนำข้อมูลจากฐานข้อมูลมาแสดง โดยการส่งข้อมูลออกมาเป็น Array

ซึ่งตัวอย่างในการใช้งานดังต่อไปนี้ :

- สร้างไฟล์ test_2.php ขึ้นมาโดยเขียนโค้ด ด้านล่างลงไป

<?php
require'libs/Smarty.class.php';

$hostname = 'localhost';
$database = 'phithan_appointment';
$user = 'root';
$pass = '';
$connection = mysql_connect($hostname, $user, $pass) or trigger_error(mysql_error(),E_USER_ERROR); //+ เชื่อมต่อฐานข้อมูล
mysql_select_db($database,$connection);
mysql_query("SET NAMES UTF8");

$sql = 'SELECT * FROM tbl_appointment LIMIT 20'; //+ เลือกมาแค่ 20 แถว
$rs_appointment = mysql_query($sql);

while($row_appointment = mysql_fetch_array($rs_appointment)){
$appointment[$row_appointment['app_id']] = $row_appointment['app_customer']; //+ ทำเป็น Array
}

$smarty = new Smarty();
$smarty->assign('appointment', $appointment);
$smarty->display('test_2.tpl'); //+ ส่งข้อมูลออกไปที่ test_2.tpl เืพื่อทำการแสดงข้อมูล
?>

- สร้างไฟล์ test_2.tpl ไว้ภายในโฟลเดอร์ templates แล้วเขียนโ้ค้ดด้านล่างลงไป

<html>
<head>
<title>Test Smary</title>
</head>
<body>
<table>
{foreach from=$appointment key=k item=i}
<tr><td>{$k}</td><td>{$i}</td></tr>
{/foreach}
</table>
</body>
</html>

* key เปรียบได้เป็น index ของ Array และ item คือ Value นั่นเอง


หรือจะเป็นการส่งข้อมูลจากฐานข้อมูลแบบหลาย ๆ คอร์ลัม ดังตัวอย่างด้านล่าง

- ไฟล์ test_2.php

<?php
require'libs/Smarty.class.php';

$hostname = 'localhost';
$database = 'phithan_appointment';
$user = 'root';
$pass = '';
$connection = mysql_connect($hostname, $user, $pass) or trigger_error(mysql_error(),E_USER_ERROR);
mysql_select_db($database,$connection);
mysql_query("SET NAMES UTF8");

$sql = 'SELECT * FROM tbl_appointment LIMIT 20';
$rs_appointment = mysql_query($sql);

while($row_appointment = mysql_fetch_array($rs_appointment)){
$appointment[$row_appointment['app_id']] ['app_customer'] = $row_appointment['app_customer'];
$appointment[$row_appointment['app_id']] ['app_register'] = $row_appointment['app_register'];
$appointment[$row_appointment['app_id']] ['app_check'] = $row_appointment['app_check'];
}

$smarty = new Smarty();
$smarty->assign('appointment', $appointment);
$smarty->display('test_2.tpl');
?>

- ไฟล์ test_2.tpl

<html>
<head>
<title>Test Smary</title>
</head>
<body>
<table>
{foreach from=$appointment key=k item=i}
<tr><td>{$k}</td><td>{$i.app_register}</td><td>{$i.app_customer}</td><td>{$i.app_check}</td></tr>
{/foreach}
</table>
</body>
</html>


เท่านี้ก็เป็นตัวอย่างเบื้องต้นสำหรับการนำข้อมูลจากฐานข้อมูลออกมาแสดงด้วย Smarty template ครับ !

26 สิงหาคม 2554

เริ่มต้นการใช้งาน Smary template !

ก่อนที่จะเริ่มต้นการใช้งาน ต้องไปทำการดาวน์โหลด Class มาใช้งานกันก่อนที่ http://www.smarty.net/ (Smarty-3.0.8)
หลังจากดาวน์โหลดมาแล้วทำการแตกไฟล์ออก ซึ่งภายในจะประกอบไปด้วย
- demo
- libs
- README
- SMARTY2_BC_NOTES
- COPYING.lib
- change_log.txt

โฟลเดอร์ที่สำคัญคือ libs ซึ่งภายในจะมี ไฟล์ Smarty.class.php ซึ่งจำเป็นต่อการใช้งาน ต่อไปก็เริ่มทำการทดสอบการใช้งานลองดูเลย

- ก็อบปี้ โฟลเดอร์ Smarty-3.0.8 ที่ได้หลังจากการแตกไฟล์ (ซึ่งผมตัดชื่อให้เหลือแค่ Smarty)ไปไว้ที่ เซิฟเวอร์จำลอง โฟลเดอร์ WWW
- สร้างไฟล์ test.php ไว้ภายในโฟลเดอร์ Smarty แล้วก็เขียนคำสั่งนี้ลงไป

<?php
require'libs/Smarty.class.php'; // แทรก Class Smarty ลงไป

class Contacts{
var $id = 1;
var $name = 'Chaiwit';
var $email = 'lionblue_wit_99 at hotmail dot com';
var $phone = '083-130-43xx';
}

$contacts = new Contacts;

$smarty = new Smarty();

$smarty->assign('title', 'Contact Detail'); // ตัวแปร, ค่าที่ส่งไป

$smarty->assign('contact',$contacts); // ตัวแปร, ค่าที่ส่งไป

$smarty->display('test.tpl'); // อ้างอิงการเรียกใช้งาน Template
?>

- สร้างโฟลเดอร์ templates เพื่ออ้างอิง Template ที่เราเรียกใช้จากไฟล์ test.php โดยในไฟล์ test.php เราเรียกใช้งานไฟล์ชื่อ test.tpl ฉะนั้นเราก็ต้องสร้างไฟล์ test.tpl เก็บไว้ในโฟลเดอร์ templates แล้วก็เขียนโค้ดนี้ลงไป

<html>
<head>
<title>{$title}</title>
</head>
<body>
{$contact->id}<br>
{$contact->name}<br>
{$contact->email}<br>
{$contact->phone}<br>
</body>
</html>

หมายเหตุ คำสั่ง $contact->id คือ คำสั่งที่ใช้แสดง property ค่าของ Class ที่เราส่งมา

หลังจากนั้นก็ทดลองรับ สคริป นี้ที่ http://localhost/smarty/test.php ก็จะได้ผลลัพย์ดังรูปด้านล่าง



* Smarty template case sensitive เรื่องการส่งตัวแปร ตัวอักษรเล็ก ตัวอักษรใหญ่

อ่านเนื้อหาเพิ่มเติมได้ที่ : http://www.phpeveryday.com/articles/Smarty-Template-Engine-Tutorial-P849.html


15 สิงหาคม 2554

ตัวอย่าง โค้ด เลือก ภาค จังหวัด อำเภอ ตำบล แบบต่อเนื่องกัน

หลังจากได้ดู โค้ด ตัวอย่างการ เลือก ภาค จังหวัด อำเภอ ตำบล จากหลาย ๆ ที่ ก็เลยมีแนวคิดว่าควรเขียนไว้เพื่อเตือนความจำตัวเอง เผื่ออนาคตหลง ๆ ลืม ๆ มันไปเสีย จะได้ค้นหาง่าย ซักหน่อย

ก่อนอื่นทำการโหลดคลาส mysql2json.class.php จาก

http://snipplr.com/view/18162/ หรือ
http://code.google.com/p/evalactisem/source/browse/trunk/www/library/php/mysql2json.class.php?spec=svn539&r=539

แล้วทำการเขียนไฟล์ ตัวอย่างเพื่อทำการ ดึง ภาค จังหวัด อำเภอ และตำบล

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function(){

$('#ddlGeo').change(function(){
$.ajax({
type: 'POST',
dataType: 'json',
url: "data.php",
data: {geo_id: $(this).val()},
success: function(data){

var opt = '<option value="0">-- เลือกจังหวัด --</option>';
for(var i =0; i<data.length; i++){
opt += '<option value="'+data[i].province_id+'">'+data[i].province_name+'</option>';
}
$('#ddlProvince').html( opt );

}
});

});

$('#ddlProvince').change(function(){
$.ajax({
type: 'POST',
dataType: 'json',
url: "data.php",
data: {province_id: $(this).val()},
success: function(data){

var opt = '<option value="0">--เลือกอำเภอ --</option>';
for(var i =0; i<data.length; i++){
opt += '<option value="'+data[i].amphur_id+'">'+data[i].amphur_name+'</option>';
}
$('#ddlAmphur').html( opt );

}
});

});

$('#ddlAmphur').change(function(){
$.ajax({
type: 'POST',
dataType: 'json',
url: "data.php",
data: {amphur_id: $(this).val()},
success: function(data){

var opt = '<option value="0">--เลือกตำบล --</option>';
for(var i =0; i<data.length; i++){
opt += '<option value="'+data[i].district_id+'">'+data[i].district_name+'</option>';
}
$('#ddldistrict').html( opt );

}
});

});

});
</script>
<title>ตัวอย่างโค้ด เลือก ภาค จังหวัด อำเภอ ตำบล </title>

<?php
$objConnect = mysql_connect("localhost","root","") or die("Error Connect to Database");
$objDB = mysql_select_db("geo");
@mysql_query("SET NAMES UTF8");
?>
</head>
<form name="frmMain" action="test.php" method="post">
ภาค :
<select id="ddlGeo" name="ddlGeo">
<option select value="0">-- เลือกภาค --</option>
<?
$strSQL = "SELECT * FROM geography ORDER BY geo_id ASC ";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
while($objResult = mysql_fetch_array($objQuery))
{
?>

<option value="<?=$objResult["geo_id"];?>"><?=$objResult["geo_name"];?></option>
<?
}
?>
</select>

จังหวัด :
<select id="ddlProvince" name="ddlProvince" style="width:120px">
<option value="0">--เลือกจังหวัด --</option>
</select>

อำเภอ :
<select id="ddlAmphur" name="ddlAmphur" style="width:200px">
<option value="0">--เลือกอำเภอ --</option>
</select>

ตำบล :
<select id="ddldistrict" name="ddldistrict" style="width:200px">
<option value="0">--เลือกตำบล --</option>
</select>
<input type="submit" name="button" id="button" value="Submit" />
</form>

</body>
</html>
<?
mysql_close($objConnect);
?>


ไฟล์ data.php เพื่อดึงข้อมูลออกมาแสดง

<?php
include('mysql2json.class.php'); //+ แทรกไฟล์ mysql2json.class.php เพื่อใช้งานคลาส

$objConnect = mysql_connect("localhost","root","") or die("Error Connect to Database");
$objDB = mysql_select_db("geo");
mysql_query("SET NAMES UTF8");

if($_POST['geo_id'] != ''){

$strSQL = "SELECT province_id, province_name FROM province WHERE geo_id = '".$_POST['geo_id']."' ORDER BY province_id ASC ";
$rs_province = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
$num = mysql_affected_rows();

$json = new mysql2json();
echo $json->getJSON($rs_province, $num);
}

if($_POST['province_id'] != ''){

$strSQL = "SELECT amphur_id, amphur_name FROM amphur WHERE province_id = '".$_POST['province_id']."' ORDER BY amphur_id ASC ";
$rs_amphur = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
$num = mysql_affected_rows();

$json = new mysql2json();
echo $json->getJSON($rs_amphur, $num);
}

if($_POST['amphur_id'] != ''){

$strSQL = "SELECT district_id, district_name FROM district WHERE amphur_id = '".$_POST['amphur_id']."' ORDER BY district_id ASC ";
$rs_district = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
$num = mysql_affected_rows();

$json = new mysql2json();
echo $json->getJSON($rs_district, $num);
}http://www.blogger.com/img/blhttp://www.blogger.com/img/blank.gifank.gif

?>

ฐานข้อมูล จังหวัดทั้งหมด จาก : http://www.thaicreate.com/free-web-script/thailand-province-database.html

และ http://www.thaicreate.com/community/dependant-listmenu-dropdownlist.html

อ่านเพิ่มเติมได้ที่เว็บ select2web.com : http://www.select2web.com/php/chain-select.html

1 สิงหาคม 2554

Javascript Trim ไม่มีให้ ก็หันมาใช้ Jquery Trim มันเสียเลย !

    หลังจากได้ทำการค้นหา คำสั่ง Trim ของ Javascript ทาง Google ตั้งนาน สองนาน แล้วไอ้ Javascript  ดันไม่ได้มี คำสั่งนี้เตรียมมาให้ใช้กันง่าย ๆ ซึ่งอยากจะใช้ก็ต้องเขียนมาเอง

    ผมก็เลยลองหาด้วยคำว่า Jquery Trim โอ๊ะแม่เจ้า Link แรกเลยครับ อุตส่าห์หาตั้งนาน ลองเอาฟังชั่นที่ท่านอื่น ๆ เขียนไว้มาลองตั้งนานสองนาน

    สรุปแล้ว Jquery มีเขียนไว้ให้ใช้กัน สั้น ๆ ง่าย ๆ เลยทีเดียวครับ !

    คำสั่ง Trim ของ Jquery  คือ  
    jQuery.trim('ข้อความ / ตัวแปรที่ต้องการตัด');
    หรือ
    $.trim('ข้อความ / ตัวแปรที่ต้องการตัด'); อย่างนี้ก็ได้

   คำสั่งง่าย ๆ ที่ผมไม่รู้ครับ !!!


ลิงค์ของ Jquery : http://api.jquery.com/jQuery.trim/

14 กรกฎาคม 2554

เพิ่มค่าเข้าไปใน Array พร้อมด้วยค่า Index

โดยปกติแล้วหากเวลาจะเพิ่มค่าเข้าไปใน Array PHP จะมีฟังชั่น array_push() เพื่อให้ใช้งาน

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

<?php
  $stack = array("ส้ม", "กล้วย", "มะละกอ", "ทุเรียน");
   array_push($stack ,"ลองกอง");
   print_r( $stack );
?>

ผลลัพธ์ :

Array
(
    [0] => ส้ม
    [1] => กล้วย
    [2] => มะละกอ
    [3] => ทุเรียน
    [4] => ลองกอง
)

แต่ถ้าหากเรามีค่า Array ดังนี้  $myarray = array('f' => 'ส้ม',  'b' => 'กล้วย');

เมื่อใช้คำสั่ง array_push()  : array_push($myarray, 'มะละกอ');

ก็จะได้ ผลลัพธ์ :

Array (
  [f] => ส้ม
  [b] => กล้วย
  [0] => มะละกอ // ค่าที่เพิ่มเข้ามาด้วย array_push()
)

ซึ่งระบบจะสร้าง Index array ให้อัตโนมัติ แต่หากเราอยากจะเพิ่ม Index array เข้าไปด้วยก็จะใช้วิธีนี้ไม่ได้

ตรงนี้จะต้องสร้าง function เพิ่มเข้ามา ซึ่งได้มี ฝรั่ง (น่าจะ อินเดีย) ได้ทำการสร้างไว้ให้ดูเป็นตัวอย่างแล้ว คือ

function array_push_assoc($array, $key, $value){
 $array[$key] = $value;
 return $array;
}

และ วิธีใช้งาน

$myarray = array_push_assoc($myarray, 'h', 'hello');

ข้อมูล :
http://www.select2web.com/php/array_push.html
http://jaswanttak.wordpress.com/2010/04/23/php-associative-array-push/





16 มิถุนายน 2554

ตัด Subfolder ออกจาก Link Wordpress

หาำกเราได้สร้าง เว็บไซต์มาสักเว็บหนึ่ง ภายในเครื่องของเราหรือ Localhost ก็จะมี โฟลเดอร์ (Folder) เพื่อเก็บเว็บไซต์ต่าง ๆ ที่อยู่ในเครื่อง เวลาเราทดสอบ ก็จะพิมพ์ลิงค์ไปที่เบราเซอร์ เช่น http://localhost/โฟลเดอร์ที่เก็บเว็บไซต์

ในโฮสติ้ง จริงๆ เขาก็จะมี Public_html โฟลเดอร์มาให้หนึ่งโฟลเดอร์ เพื่อที่จะวางเว็บไซต์ที่เราีต้องการ หากว่าเราเก็บไฟล์ต่าง ๆ ของ Wordpress ไว้ที่ Public_html เลย เราก็จะมีเว็บไซต์ก็จะมีลิงค์ที่สวยงาม คือ http://www.test.com แต่หากว่าเราสร้างโฟลเดอร์มาเก็บไฟล์อีกทีหนึ่งจะมีลิงค์ดังนี้ http://www.test.com/folder

ใน Wordpress จะมีวิธีตัด folder ที่สร้างออกจากลิงค์ ตามวิธีต่อไปนี้ (ใช้ localhost เพื่อทดสอบหน่ะครับ)

1. สร้างโฟลเดอร์ test ขึ้นมาภายใน WWW แล้วติดตั้ง Wordpress ไปตามปกติจนสิ้นสุดกระบวนการ

2. เมื่อสร้างเสร็จล๊อกอินเข้าไปจัดการโดยไปที่เมนูซ้ายมือ Setting->General
ตั้งค่า WordPress address (URL) : http://localhost/test และ Site address (URL) : http://localhost

3. ก็อบปี้ index.php and .htaccess ออกมาวางที่ WWW หรือ นอก โฟลเดอร์ test

4. เิปิดไฟล์ index.php แล้วแก้ไข require('./wp-blog-header.php'); เป็น require('./test/wp-blog-header.php');
ตรงคำว่า test คือโฟล์เดอร์ที่สร้างไว้

5. ล๊อกอิน เข้าหน้าแอดมิน เพื่อไปแก้ไข Permalinks ซึ่งเราก็ทำการกดเซฟเพื่ออัพเดทค่าตามปกติ Wordpress จะจัดการให้เองโดยอัตโนมัติ

หลังจากนั้นก็ทดลองเข้าระบบ http://localhost ก็จะเ้ข้าไปสู่ Wordpress ที่เราสร้างไว้ในโฟลเดอร์ test ซึ่งจะตัด /test ออกให้เลย


ข้อมูลเพิ่มเติมที่ : http://marcosblog.com/2010/04/12/how-to-install-wordpress-in-a-sub-folder/

10 มิถุนายน 2554

ทำลิงค์ (Link) Wordpress ให้สวยงาม

    หากทำเว็บบล๊อก หรือ เว็บไซต์ ด้วย Wordpress แล้วต้องการที่จะให้ Link ออกมาสวยงาม และ น่าจะเหมาะสำหรับทำ SEO ก็จะต้องไป เซต ค่า เพื่อให้ Wordpress แสดง Link ออกมาสวย ดังนี้
   - ล็อกอิน wp-admin
   - ไปที่เมนู Setting -> Permalink
   - Wordpress จะมีตัวเลือกให้ 5 ตัวเลือก

    - Default = http://localhost/wordpress/?p=123
    - Day and name = http://localhost/wordpress/2011/06/10/sample-post/
    - Month and name = http://localhost/wordpress/2011/06/sample-post/
    - Numeric = http://localhost/wordpress/archives/123
    - Custom Structure = ค่าที่เราต้องการ
เลือกที่  Custom Structure แล้วใส่ค่า  /%category%/%postname%  ลงไป ก็จะได้ ลิงค์
    
     - http://localhost/wordpress/5555/หัวข้อที่เลือก
 
Wordpress ก็จะแสดงค่าที่สวยงามออกมาให้ ครับ
 

2 มิถุนายน 2554

ส่งเมล์ด้วย phpmailer

   ก่อนอื่นต้องเข้าไปโหลด  Class Phpmailer  มาก่อนจากเว็บ http://sourceforge.net/projects/phpmailer/files/phpmailer%20for%20php4/PHPMailer%20v2.0.4%20for%20PHP4/ โดยผมเลือกโหลดที่ เวอร์ชั่น PHPMailer_v2.0.4 หลังจากดาวน์โหลดมาเสร็จแล้วทำการ แตกไฟล์ ก็จะมีไฟล์ในนั้นมากมายเราเอาไว้แค่ 3 ไฟล์ครับ คือ

1.class.phpmailer.php
2.class.smtp.php
3.class.pop3.php

ซึ่งในขั้นตอนต่อไปก่อนที่จะทำการ ทดลองส่งเมล์ ให้เราแก้ปัญหาเบื้องต้นก่อนทำการทดลอง คือ

1.แก้ $Charset ในไฟล์ class.phpmailer.php จาก iso-8859-1 เป็น utf-8 เพื่อให้เมล์ของเรารองรับภาษาไทย
2.เปิด ;extension=php_openssl.dll ในไฟล์  php.ini โดยลบเครื่องหมาย ; ด้านหน้าแล้วทำการ รีสตาร์ท Apache หนึ่งครั้ง เพื่อทำการเปิดใช้งาน SSL (อ่านเพิ่มเติม)

หลังจากแก้ไขตาม 2 วิธีข้างต้นเสร็จแล้วก็เริ่มทำการสร้างไฟล์เพื่อทดสอบการส่งเมล์ของเราตามนี้เลยครับ

<?php
require('class.phpmailer.php');

$mail = new PHPMailer();
$mail->From = 'chaiwit@xxx-xxx.com'; // เมล์ที่เราใช้ในการส่ง
$mail->FromName = 'chaiwit'; // ชื่อที่ส่ง

$to =array ('chaiwit'=>'chaiwit@xxx-xxx.com');  // to array ใช้ในกรณีส่งหลาย ๆ คนพร้อมกัน
foreach ($to as $name=>$email){
    $mail->AddAddress($email,$name);
}

$cc =array ('chaiwit'=>'chaiwit@xxx-xxx.com'); // cc array ใช้ในกรณี cc หลาย ๆ คนพร้อมกัน
foreach ($cc as $cc_name=>$cc_email){
    $mail->AddCC($cc_email,$cc_name);
}

$bcc =array ('chaiwit'=>'chaiwit@xxx-xxx.com'); // bcc array ใช้ในกรณี bcc หลาย ๆ คนพร้อมกัน
foreach ($bcc as $bcc_name=>$bcc_email){
    $mail->AddBCC($bcc_email,$bcc_name);
}

$mail-> Subject    = 'Test Send Mail'; // หัวข้อเมล์ที่ทำการส่ง ซึ่งใช้ภาษาไทยได้ (เพราะทำการตั้งค่า Charset เป็น utp-8 แล้ว)
$mail-> Body        = 'Mail Detail'; // เนื้อหาของเมล์

$mail->IsHTML (true);
$mail->IsSMTP(); // เปิดใช้ Smtp
$mail->Host = 'ssl://smtp.gmail.com'; // ส่งผ่าน Smtp ของ google
$mail->Port = 465; // พอร์ต
$mail->SMTPAuth    = true;

$mail->Username = 'chaiwit@gmail.com'; // Account ของ Gmail
$mail->Password = 'xxx';

$mail->Send();
$mail->ClearAddresses();
?>


อ่านเพิ่มเติมได้ที่ http://www.select2web.com/php/send-email-with-phpmailer.html

24 พฤษภาคม 2554

ย้าย webroot สำหรับ run php และ ฐานข้อมูล MySQL

ย้าย Webroot สำหรับรัน Php  คือ

 start -> All program -> Appserv -> Configuration Server -> httpd.conf

ค้นหาคำว่า

DocumentRoot "C:/AppServ/www"

และคำว่า

<Directory "C:/AppServ/www"> 


แล้วแก้ไข พาธ ในเครื่องหมายคำพูดเป็น พาธ ที่ต้องการ

-------------------------------------------------------------------------------------------

ย้ายฐานข้อมูล Mysql

start -> All program -> Appserv -> Configuration Server -> my.ini

ค้นหาคำว่า

datadir="C:\AppServ/MySQL/data/"

เปลี่ยน พาธ ในเครื่องหมายคำพูดเป็น พาธ ที่ต้องการ



ข้อมูลจากเว็บ  select2web.com

28 เมษายน 2554

Javascript เพิ่ม คอมม่า (,) ให้กับเลข ตามหน่วยต่าง ๆ

<form name="frmMain" action="" method="post">

<script type="text/javascript">

function addCommas(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}

function chkNum(ele)
{
var num = parseFloat(ele.value.replace(/,/g,''));
ele.value = addCommas(num.toFixed(2));
}
</script>

-----------------------------------------------
วิธีนำไปใช้งาน

<input type="text" name="txtNumber" value="" OnChange="JavaScript:chkNum(this)">
</form>

ข้อมูลจาก : thaicreate.com

สิ่งที่ควรจำของ Cakephp

 ในการบันทึกค่าที่ส่งมาจาก Form ลงในฐานข้อมูล จะใช้คำสั่งที่เหมือนกันคือ

    $this->Book->create();  //เรียกใช้ Method create() เพื่อสร้างแถว
    $this->Book->save($this->data) // บันทึกข้อมูลที่ส่งมา คือ $this->data

ถ้าหากว่าในหน้า Form เราไม่มี Field ที่ชื่อว่า id  Cakephp จะมองเป็นการบันทึกข้อมูลลงไปใหม่ (INSERT)
แต่ถ้าหากว่ามี Field ที่ชื่อว่า id แล้ว  Cakephp จะมองเป็นการแก้ไข (UPDATE) ด้วย id ที่ส่งเข้ามานั้นโดยอัตโนมัติ

27 เมษายน 2554

ค้นหาจำนวนวัน ตามวัน และ ระยะเวลาที่กำหนด

 <?php
function date_in_period($format, $start, $end, $skip = NULL){
    $output = array();
    $days = floor((strtotime($end) - strtotime($start))/86400);
    for($i=0;$i<=$days;$i++){
        $in_period = strtotime("+" . $i . " day", strtotime($start));
        if(is_array($skip) and in_array(date("D",$in_period), $skip)){
            continue;
        }
        array_push($output, date($format, $in_period));
    }
    return $output;
}
echo "No skipping : <br / >";
$date = date_in_period("D-d-m-Y", "2011-04-04", "2011-04-19");
foreach($date as $day){
    echo $day . "<br / >";
}
echo "Total : " . count($date) . " days<br / >";

echo "<br / ><br / >Has skipping : <br / >";
$date = date_in_period("D-d-m-Y", "2011-04-04", "2011-04-19", array("Mon", "Tue", "Wed", "Thu", "Fri"));
foreach($date as $day){
    echo $day . "<br / >";
}
echo "Total : " . count($date) . " days";
?>

ข้อมูลจากเว็บ thaicrate.com

ค้นหา วันเสาร์ - อาทิตย์ ภายในระยะเวลาที่ต้องการ

 <?php
$start = strtotime("2011-04-04 08:00:00"); // your start here
$end = strtotime("2011-04-29 08:50:00"); // +end dates here

$saturday = strtotime("saturday", $start);

while($saturday < $end) {
      
    echo "Saturday = ", date("d m Y", $saturday), "\n";
    echo '<br>';
  
    $sunday = strtotime("+1 days", $saturday);
      
        if($sunday < $end ){   //+ check if sunday more than $end
            echo "Sunday = ", date("d m Y", $sunday), "\n";
            echo '<br>'; 
        }
      
    $saturday = strtotime("+1 weeks", $saturday);
  
}
?>

21 เมษายน 2554

เลือก Checkbox ทั้งหมดในครั้งเดีียวด้วย Jquery

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.js"></script>
<script type="text/javascript">
    function checked_all( id, nameclass ){
       $("input[class^=" + nameclass + "]").attr('checked', $('#' + id).is(':checked'));
    }
</script>
</head>
<body>
<p>ALL
  <input type="checkbox" name="checked_all" id="checked_all" onClick="checked_all( this.id, 'check_me' )" />
</p>
<p>
  <input type="checkbox" name="checkbox" id="checkbox" class="check_me" />
  1
</p>
<p>
  <input type="checkbox" name="checkbox2" id="checkbox2" class="check_me" />
  2
</p>
<p>
  <input type="checkbox" name="checkbox3" id="checkbox3" class="check_me" />
  3
</p>
<p>
  <input type="checkbox" name="checkbox4" id="checkbox4" class="check_me" />
  4
</p>
</body>
</html>

20 เมษายน 2554

การส่งค่าไปหลาย ๆ ค่าพร้อมกันโดย Ajax ของ Jquery

ส่งค่าไปหลาย ๆ ค่าพร้อมกันโดย Ajax ของ Jquery โดยใช้  serialize เข้าช่วย
--------------------------------------------------------------------------------------------------------------

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
      
        $('#button').click(function(){  
                var txt=$('#form1').serialize();  // ใช้ serialize() รวมเอา ค่าทั้งหมดที่อยู่ใน form     
                $.ajax({
                  type: 'POST',
                  url: "test.php",
                  data: txt,
                  success: function(data){
                     $('#result').html( data );                  
                  }
                
                });              
        })
      
    });
</script>
</head>
<body>

<form id="form1" name="form1" method="post" action="">
ชื่อ :<input type="text" name="name" id="name" />
นามสกุล :<input type="text" name="lastname" id="lastname" />
ที่อยู่ :<input type="text" name="address" id="address" />
<input type="button" name="button" id="button" value="Button"/>
</form>
<br />
<span id="result"></span>

</body>
</html>

---------------------------------------------------------------------------------------------------------------

 ไฟล์ test.php
<?php
    echo 'ชื่อ : '.$_POST['name'].' นามสกุล : '.$_POST['lastname'];
    echo '<br>';
    echo 'ที่อยู่ : '.$_POST['address'];
?>

การส่งค่าโดย Ajax ของ Jquery

--------------------------------------------------------------------------------------------------------------

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.js"></script>
<script type="text/javascript">
    $(document).ready(function(){

        $('#button').click(function(){          
                $.ajax({
                  type: 'POST',
                  url: "test.php",
                  data: {name: $('#name').val()},
                  success: function(data){
                     $('#result').html( data );                  
                  }
                
                });              
        })
      
    });
</script>
</head>
<body>

<input type="text" name="name" id="name" />
<input type="submit" name="button" id="button" value="Submit"/>
<br />
<span id="result"></span>

</body>
</html>

 --------------------------------------------------------------------------------------------------------------
ไฟล์  test.php

<?php
    echo $_POST['name'];
?>

เรียงลำดับ ตัวเลข ในกรณีที่ไม่ได้เป็นชนิด int

    เมื่อเราทำการ เลือกข้อมูลจากฐานข้อมูลแล้ว ต้องการที่จะให้มันเรียงลำดับ เช่น
ในฐานข้อมูล ตารางคะแนน มีอยู่หนึ่ง ฟิวล์  เป็นชนิด text  มีคะแนน  1 2 3 4 10 11 21 ตามลำดับ

เมื่อเราเขียน SQL ก็จะได้ว่า
   SELECT *  FROM  tbl_test  ORDER BY score DESC 
มันจะเรียงลำดับให้เป็น  1 11 2 21 3 4 ถ้าหากต้องการจะให้มันเรียงลำดับเป็น 1 2 3 4 10 11 21
เปลี่ยน SQL ให้เป็นดังนี้ 
  SELECT * FORM tbl_test ORDER BY ABS(score) DESC

* คำสั่ง  ABS()  ใช้สำหรับหาค่าสัมบูรณ์

18 มกราคม 2554

การใช้งาน PHPExcel Class สร้างไฟล์ PDF สำหรับภาษาไทย

 หลังจากได้ทดลองสร้างไฟล์ PDF จากไลบรารี่ ของ PHPExcel แล้วไม่รองรับภาษาไทย ซึ่งจะทำให้ภาษาไทยเป็นตัวอักษร สี่เหลี่ยม  บทความนี้เราจะมาดูวิธีการทำให้ PDF รองรับภาษาไทยกัน

PHPExcel ใช้งาน TCPDF

1. ดาวน์โหลดฟ้อนท์ไทยก่อนที่ http://komsitr.net/?p=18

2. แตกไฟล์แล้วก็อบเอาฟ้อนท์ที่จะใช้งานไป ตัวอย่าง ผมใช้ angsanaupc ซึ่งจะมี 3 ไฟล์ที่จะต้องเลือก คือ angsanaupc.ctg.z , angsanaupc.php และ angsanaupc.z
ไปวางที่ \Classes\PHPExcel\Shared\PDF\fonts

3.
$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('angsanaupc');
   ปรับค่า setName  ตามอักษรที่เราต้องการ

แล้วทดลองออกรายงานเป็น pdf เช่นเดิม โดยไม่ต้องใช้ iconv ครับ 

ขอบคุณ  เว็บ http://komsitr.net/?p=18 

อ่านเพิ่มเติม http://phpexcel.codeplex.com/Thread/View.aspx?ThreadId=232179

ป.ล.อาจจะมีวีธีที่ดีกว่านี้ซึ่งผมยังไม่เจอครับ 

14 มกราคม 2554

การใช้งาน PHPExcel Class สร้างไฟล์ PDF

   ดาวน์โหลด Class มาจาก  : http://phpexcel.codeplex.com/releases/view/26479 เวอร์ชั่นล่าสุด: 1.7.5

  วิธีการใช้งาน Class เพื่อสร้างไฟล์ PDF ลักษณะการทำงานก็คล้าย ๆ กับการสร้างไฟล์ xls ดังนี้

<?php

/** Error reporting */
error_reporting(E_ALL);

date_default_timezone_set('Europe/London');

/** PHPExcel */ 
require_once 'Classes/PHPExcel.php';  // แทรก Class ที่ดาวโหลดมา

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set properties
$objPHPExcel->getProperties()->setCreator("Chaiwit");

//Setting a worksheet's page orientation and size
$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE); // กำหนดแนวตั้ง / แนวนอน
$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4); // กำหนดขนาดกระดาษ
//Page Setup: Scaling options
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToWidth(1); // กำหนดมาตราส่วน หรือไม่ก็ได้
$objPHPExcel->getActiveSheet()->getPageSetup()->setFitToHeight(0); // กำหนดมาตราส่วน หรือไม่ก็ได้

//Page margins // กำหนดระยะขอบ
$objPHPExcel->getActiveSheet()->getPageMargins()->setTop(1); // กำหนดระยะขอบ บน
$objPHPExcel->getActiveSheet()->getPageMargins()->setRight(0.75); // กำหนดระยะขอบ ขวา
$objPHPExcel->getActiveSheet()->getPageMargins()->setLeft(0.75); // กำหนดระยะขอบ ซ้าย
$objPHPExcel->getActiveSheet()->getPageMargins()->setBottom(1); // กำหนดระยะขอบ ล่าง

// Add some data วนลูปแสดงข้อมูล
$txt = range('A','O');

for($i=0; $i< 30; $i++){
    foreach($txt as $key => $val)
    {        
       $objPHPExcel->getActiveSheet()->getColumnDimension(''.$val.'')->setWidth(9.5); // กำหนดความกว้าง

 $objPHPExcel->getActiveSheet()->getRowDimension(''.$i.'')->setRowHeight(23); // กำหนดความสูงของแถว
        $objPHPExcel->setActiveSheetIndex(0)->setCellValue(''.$val.''.$i.'', ''.$key.''); // เพิ่มค่า
       
       // กำหนดสีพื้นหลังให้ cell
        $objPHPExcel->getActiveSheet()->getStyle(''.$val.''.$i.'')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
        $objPHPExcel->getActiveSheet()->getStyle(''.$val.''.$i.'')->getFill()->getStartColor()->setARGB('5c5cb3fc');
    }
}

// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('Chaiwit');

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

// Redirect output to a client’s web browser
header('Content-Type: application/pdf');
header('Content-Disposition: attachment;filename="'.iconv('UTF-8','TIS-620','ชัยวิทย์').'.pdf"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF'); // จุดที่แตกต่างไปจากการสร้างไฟล์ excel
$objWriter->save('php://output');
exit;

?>

13 มกราคม 2554

การใช้งาน PHPExcel

วิธีการเริ่มต้น การใช้งาน PHPExcel
----------------------------------------------------------------------------------
<?php

/** PHPExcel */
require_once 'Classes/PHPExcel.php'; // แทรก Class ที่ดาวโหลดมา

// Create new PHPExcel object // เริ่มต้นสร้าง object
$objPHPExcel = new PHPExcel();

// Set properties // ระบุผู้สร้างไฟล์ จะระบุหรือไม่ก็ได้
$objPHPExcel->getProperties()->setCreator("Chaiwit");

//+ กำหนดชื่อ ฟอนต์ ที่จะใช้งาน
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');

//+ กำหนดขนาด ฟอนต์
$objPHPExcel->getDefaultStyle()->getFont()->setSize(15);

// Add some data // เริ่มต้นแสดงข้อมูล
$txt = range('A','E');

for($i=0; $i< 8; $i++){
foreach($txt as $key => $val)
{
$objPHPExcel->getActiveSheet()->getColumnDimension(''.$val.'')->setWidth(10); // กำหนดความกว้างของแถว $objPHPExcel->getActiveSheet()->getRowDimension(''.$i.'')->setRowHeight(23); // กำหนดความสูงของแถว
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue(''.$val.''.$i.'', ''.$key.'');
}
}

// insert image // ตัวอย่างในการแทรกรูปภาพลงในไฟล์ ระบุที่เซล B15
$objDrawing = new PHPExcel_Worksheet_Drawing();
$objDrawing->setName('Logo');
$objDrawing->setDescription('Logo');
$objDrawing->setPath('./Tests/images/officelogo.jpg');
$objDrawing->setHeight(36);
$objDrawing->setWidth(100);
$objDrawing->setCoordinates('B15');
$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());

// Rename sheet // สร้างชื่อ Sheet
$objPHPExcel->getActiveSheet()->setTitle('Chaiwit');

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0); // กำหนดให้เมื่อเราเปิดไฟล์ให้แสดง sheet ไหนเป็นอันดับแรก

// Create a new worksheet, after the default sheet
$objPHPExcel->createSheet(); // ในกรณีที่เราสร้างหลาย ๆ Sheet ในงานไฟล์เดียว

/** PHPExcel_IOFactory */
require_once './Classes/PHPExcel/IOFactory.php';

// ตรงนี้เริ่มสู่กระบวนการสร้างไฟล์ xls
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('chaiwit.xls');
//$objWriter->save(''.iconv('UTF-8','TIS-620','ชัยวิทย์').'.xls'); // ใช้ในกรณีทำให้ไฟล์ที่ Save เป็นชื่อ ภาษาไทย

-------------------------------------------------------------------------------------------------
/* ตั้งแต่แถวนี้จะเป็นการใช้ในกรณีที่จะให้มันขึ้น Dialog มาเพื่อทำการ Save AS ไฟล์นั้น ใช้แทนคำสั่ง สร้างไฟล์ xls ด้านบน */

// redirect output to client browser
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="Chaiwit.xls"');
header('Cache-Control: max-age=0');

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');

?>

แนะนำความรู้นี้โดย พี่ปลาทู แห่ง http://www.select2web.com/

หาความรู้เพิ่มเติมจาก Documentation ที่ให้มาพร้อมกับ Class ที่ดาวโหลดมาได้เลยครับ
ดาวน์โหลด : http://phpexcel.codeplex.com/releases/view/26479 เวอร์ชั่นล่าสุด: 1.7.5