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

MosKill Calculator โปรแกรมคำนวณการผสมน้ำยาเคมี

             
                     MosKill Calculator เป็นโปรแกรมคำนวณสูตรการผสมน้ำยาเคมี และคำนวณระยะเวลาที่ใช้พ่นในบ้าน สำหรับใช้กับเครื่องพ่นเคมีควบคุมโรคไข้เลือดออก ที่สามารถติดตั้งในเครื่อง Android SmartPhone ใช้งานสะดวกมาก ไม่ต้องพึ่งเครื่องคิดเลขเพื่อคำนวณเทียบบัญญัติไตรยางค์ และลดข้อผิดพลาดจากการคำนวณได้เป็นอย่างดี
Download ได้ที่นี่

วันพุธที่ 24 กันยายน พ.ศ. 2557

การติดตั้ง Eclipse ADT สำหรับพัฒนาโปรแกรม Android

1.ติดตั้ง ADT  (แนะนำให้เป็น Bundle เพราะจะรวม Eclipse กับ SDK ไว้ด้วยกัน ไม่ต้องแยก download และต้องติดตั้งให้ยุงยาก) สำหรับ Windows7 ที่ Ram ไม่มากใช้เครื่อง 32 Bit แนะนำให้ใช้ ADT(Android Developer Tools) v21.0.0-531062 เป็นรุ่นเก่าจะดีกว่า เพราะdefault1จะเป็น Android 4.2 (ซึ่งไฟล์ไม่ใหญ่มาก แต่ถ้าเป็นรุ่นปัจจุบัน v.4.4 ไฟล์จะใหญ่ ต้องใช้กับเครื่อง spect สูงๆ หรือ 64 bit ) สามารถหา download จาก http://developer.android.com/sdk/older_releases.html
(สำหรับ versionล่าสุดเมือ 26 กย 57 download ที่ http://developer.android.com/sdk/index.html หรือหากต้องการเปลี่ยนมาใช้ตามคำแนะนำของ google เนื่องจาก exlipse bundle จะไม่พัฒนาต่อแต่จะให้ใช้ Android Studio สามารถ download ได้ที่ http://developer.android.com/sdk/installing/studio.html)

2.ติดตั้ง Emulator สำหรับการ Debug หรือทดลองRunโปรแกรม
ไม่แนะนำให้ใช้ AVD(Android Virtual Device)หรือทำเครื่องจำลองสำหรับทดสอบ
เพราะจะช้ามาก เปิดโปรแกรมแต่ละครั้งจะใช้เวลา 2-3 นาที มันไม่ work !
ทางออกก็คือ ให้ทดสอบในเครื่องจริงๆไปเลย(ต้องต่อเครื่องโทรศัพท์กับโน๊ตบุกด้วยสายUSB)
ซึ่งจะแสดงผลได้เร็วกว่ามาก และเหมือนจริงมากที่สุดเพราะลองบนเครื่องโทรศัพท์จริง

จริงๆและ ADT จะรองรับทดสอบบนเครื่องโทรศัพท์ของเครื่องตระกูล Google(Nexus) เท่านั้น
สำรหรับเครื่องตระกูลอื่นต้องหา USB Driver เอง และมี USB Driver ซึ่งจะอยูในโปรแกรม PdaNet
ดาวนโหลดจาก http://junefabrics.com/android/downloadold.php (ทดลองใช้แล้ว v3.02)
มาติดตั้งในเครื่องเพื่อใช้สำหรับการแสดงผลในเครื่องโทรศัพท์จริง

วันเสาร์ที่ 20 กันยายน พ.ศ. 2557

สร้างกราฟด้วย FusionChart

การสร้างกราฟด้วย FusionChart นับเป็นอีกวิธีนำเสนอที่มีจุดเด่น โดยเฉพาะหากต้องการนำเสนอค่าแสดงของแต่ละเส้นกราฟ ซึ่งเครื่องมือสร้างกราฟชนิดอื่นยังไม่สามารถทำได้ นอกจากนั้นแล้ว fusionchart ยังมีเครื่องมือเกี่ยวกับการสร้างกราฟอย่างครบครัน ดังตัวอย่างรายละเอียดการสร้างกราฟเส้น ดังนี้

<?php
 # Include FusionCharts PHP Class
 include('FusionCharts/FusionCharts_Gen.php');
 # Create Multiseries Column3D chart object using FusionCharts PHP Class
 $FC = new FusionCharts("MSLine","550","400");
 # Set the relative path of the SWF file
 $FC->setSWFPath("FusionCharts/");
 #  Store chart attributes in a variable
 $strParam="caption=ค่าความดันโลหิตและน้ำตาลในกระแสเลือด; xAxisName=Week;yAxisName= ;numberPrefix=;decimalPrecision=0;showAlternateHGridColor=1;AlternateHGridColor=ff5904;divLineColor=ff5904;divLineAlpha=20;alternateHGridAlpha=5; canvasBorderColor=666666; canvasBorderThickness=1; canvasBorderAlpha=10; outCnvBaseFontSize=14; outCnvBaseFontColor=006633; canvasPadding=30; chartLeftMargin=1; chartRightMargin=35;paletteThemeColor='000000,0372AB,FF5904'";

# Set chart attributes
 $FC->setCategoriesParams("font=Arial;fontSize=13;fontColor=ff0000");

 $FC->setChartParams($strParam);
# Add category names
 $FC->addCategory("Week 1");
 $FC->addCategory("Week 2");
 $FC->addCategory("Week 3");
 $FC->addCategory("Week 4");

   # Create a new dataset

   $FC->addDataset("FBS");
  //$FC->addDataset("color=3994F9");
  # Add chart values for the above dataset
  $FC->addChartData("408");
  $FC->addChartData("314");
  $FC->addChartData("267");
  $FC->addChartData("544");
 # Create second dataset
 $FC->addDataset("Systolic");          // #800000    #FF0000
 # Add chart values for the second dataset
  $FC->addChartData("383");
  $FC->addChartData("284");
  $FC->addChartData("157");
  $FC->addChartData("481");
  # Create second dataset
  $FC->addDataset("Systolic");
  # Add chart values for the second dataset
  $FC->addChartData("83");
  $FC->addChartData("84");
  $FC->addChartData("57");
  $FC->addChartData("81");

 ?>
  <html>
   <head>
      <title></title>
             <script language='javascript' src='FusionCharts/FusionCharts.js'></script>
    </head>
   <body>
          <div align="center">
                 <?php
                    # Render Chart
                    $FC->renderChart();
                  ?>
        </div>
  </body>
  </html>

jQuery DatePicker วันที่แบบไทย



    jQuery DatePicker วันที่แบบไทย ที่สามารถกำหนดรูปแบบของวันที่ ทั้ง dd/mm/yyyy หรือ dd-mm-yy และยัสามารถกำหนด theme ได้ด้วย มีรายละเอียดดังนี้

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>jquery ui datepickerภาษาไทย ปี พ.ศ.</title>


/*สามารเลือกกำหนด theme */
<link type="text/css" rel="stylesheet" href="calendar_themes/smoothness/jquery-ui.css" />

<style type="text/css">
/* ปรับขนาดตัวอักษรของข้อความใน tabs
สามารถปรับเปลี่ยน รายละเอียดอื่นๆ เพิ่มเติมเกี่ยวกับ tabs*/
.ui-tabs{ font-family:tahoma; font-size:14px;}
</style>

<style type="text/css">
/* Overide css code กำหนดความกว้างของปฏิทินและอื่นๆ */
.ui-datepicker{ width:280px; font-family:tahoma; font-size:14px; text-align:center;}
</style>
</head>

<body>
<div style="margin:auto;width:95%;">
<input name="dateInput" type="text" id="dateInput" value="" />
</div>

<script src="calendar_js/jquery.min.js"></script>
<script src="calendar_js/jquery-ui.min.js"></script>
<script type="text/javascript">
$(function(){
    var dateBefore=null;
    $("#dateInput").datepicker({
        dateFormat: 'dd-mm-yy',
        showOn: 'button',
       //buttonImage: 'http://jqueryui.com/demos/datepicker/images/calendar.gif',
        buttonImageOnly: false,
        dayNamesMin: ['อา', 'จ', 'อ', 'พ', 'พฤ', 'ศ', 'ส'],
        monthNamesShort: ['มกราคม','กุมภาพันธ์','มีนาคม','เมษายน','พฤษภาคม','มิถุนายน','กรกฎาคม','สิงหาคม','กันยายน','ตุลาคม','พฤศจิกายน','ธันวาคม'],
        changeMonth: true,
        changeYear: true,
        beforeShow:function(){
            if($(this).val()!=""){
                var arrayDate=$(this).val().split("-");
                arrayDate[2]=parseInt(arrayDate[2])-543;
                $(this).val(arrayDate[0]+"-"+arrayDate[1]+"-"+arrayDate[2]);
            }
            setTimeout(function(){
                $.each($(".ui-datepicker-year option"),function(j,k){
                    var textYear=parseInt($(".ui-datepicker-year option").eq(j).val())+543;
                    $(".ui-datepicker-year option").eq(j).text(textYear);
                });
            },50);
        },
        onChangeMonthYear: function(){
            setTimeout(function(){
                $.each($(".ui-datepicker-year option"),function(j,k){
                    var textYear=parseInt($(".ui-datepicker-year option").eq(j).val())+543;
                    $(".ui-datepicker-year option").eq(j).text(textYear);
                });
            },50);
        },
        onClose:function(){
            if($(this).val()!="" && $(this).val()==dateBefore){
                var arrayDate=dateBefore.split("-");
                arrayDate[2]=parseInt(arrayDate[2])+543;
                $(this).val(arrayDate[0]+"-"+arrayDate[1]+"-"+arrayDate[2]);
            }
        },
        onSelect: function(dateText, inst){
            dateBefore=$(this).val();
            var arrayDate=dateText.split("-");
            arrayDate[2]=parseInt(arrayDate[2])+543;
            $(this).val(arrayDate[0]+"-"+arrayDate[1]+"-"+arrayDate[2]);
        }
    });
});
</script>

</body>
</html>

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

MySQL คิวรี่แบบแหวกแนว

มีวิธีการใช้คำสั่งคิวรี่ของ MySQL แบบแหวกแนว เพื่อสนองความต้องการใช้ประโยชน์
จากฐานข้อมูลมีดังนี้

1.แสดงหมายเลขลำดับของรายการที่แสดง
SELECT @row_number := @row_number +1 AS No, pid
FROM `lab1`, (SELECT @row_number:=0) AS t
WHERE LENGTH(pid)=13
ORDER BY pid

     หมายเหตุ : ถ้ามีการ JOIN จะต้องใส่หลังการ JOIN ดังนี้(สีแดงเป็นส่วนที่แสดงสำดับ)
        SELECT @row_number:=@row_number+1 AS No,
        screen_person.fname,screen_person.moo ,sys_district.DISTRICT_NAME ,
        sys_amphur.AMPHUR_NAME , sys_province.PROVINCE_NAME
        FROM screen_person  LEFT Join sys_district On screen_person.subdistrict_id =
        sys_district.DISTRICT_ID LEFT Join sys_amphur On screen_person.district_id =
        sys_amphur.AMPHUR_ID LEFT Join sys_province On screen_person.province_id =
        sys_province.PROVINCE_ID
        (SELECT @row_number:=0) AS t ORDER BY screen_person.pid 

2.คำสั่ง GROUP BY ให้ได้รายการสุดท้าย
(ปกติ Group by จะรวมรายการจากหลายรายการตามเงื่อนไข
แต่จะแสดงผลได้เป็นรายการแรกเท่านั้น) หากต้องการให้แสดง
รายการสุดท้าย ทำดังนี้
(SELECT pid,chk_date,fbs
FROM
    (select pid,chk_date,fbs from lab1 order by chk_date DESC) as check_date
GROUP BY pid)

3.การใช้ CASE WHEN สำหรับเปรียบเทียบค่ามากกว่าน้อยกว่า

CASE
   WHEN t2.fbs<=120 THEN 'ระดับ 0'
   WHEN t2.fbs<=150 THEN 'ระดับ 1'
   WHEN t2.fbs<=180 THEN 'ระดับ 2'
   WHEN t2.fbs<=220 THEN 'ระดับ 3'
END AS PT_GROUP

4.การใช้ CASE WHEN สำหรับเปรียบเทียบค่าเท่ากับ
CASE t2.fbs
   WHEN '1' THEN 'ระดับ 0'
   WHEN '2' THEN 'ระดับ 1'
   WHEN '3' THEN 'ระดับ 2'
   WHEN '4' THEN 'ระดับ 3'
END AS PT_GROUP

5.เลือกแสดงเฉพาะรายการสุดท้ายตามจำนวนที่ต้องการ
(ตย.แสดงเฉพาะ 6 รายการสุดท้าย) 

SELECT *
FROM
 (SELECT * FROM lab1 WHERE pid ='0000000000139' ORDER BY chk_date
 DESC LIMIT 6) AS tbl
ORDER BY tbl.chk_date ASC

 6. SQL update from one Table to anather based on a ID match

UPDATE Sales_Import SI,RetrieveAccountNumber RAN SET SI.AccountNumber = RAN.AccountNumber WHERE SI.LeadID = RAN.LeadID

7.ความแตกต่างระหว่าง 2 คำสั่ง
$row = mysql_fetch_assoc($result);  กับ $row=mysql_fetch_row($result); 
โดยที่
    mysql_fetch_assoc($result) จะสามารถอ้างอิงชื่อฟิวด์ได้โยตรง ดังนี้
          $row = mysql_fetch_assoc($result);
          $default_geo_id= $row['default_geo_id'];  //ระบุชื่อฟิวด์ จะไม่กระทบเวลาลบหรือเพิ่มฟิวด์ใหม่

     
    แต่  $row=mysql_fetch_row($result); จะอ้างอิงด้วยลำดับที่ของฟิวด์ ดังนี่
             $row=mysql_fetch_row($result);
             $default_geo_id= $row[5];  //ระบุ 5 เป็บลำดับที่ของฟิวด์ จะกระทบเวลาลบหรือเพิ่มฟิวด์ใหม่

วันจันทร์ที่ 8 กันยายน พ.ศ. 2557

การใช้ csv เป็น database


                การใช้ csv ไฟล์เป็น Database น่าจะเป็นอีกวิธีหนึ่งที่สามารถใช้แทน MySQL ในกรณีที่ข้อมูลไม่มาก นัก แต่ข้อดีก็คือไม่ต้องยุ่งยากกับการ set ค่า database หรือ การใช้ PhpMyAdmin อีกทั้งยังสามารถ run ได้โยไม่ต้องมี database server 
                การใช้งานจะต้องมี MyCSV.class สามารถD/L จาก http://maettig.com/?page=PHP/MyCSV หรือจาก  http://www.phpclasses.org/package/5594-PHP-Manage-CSV-files-like-database-tables.html โดยมีวิธีใช้ดังนี้

1.การแสดงข้อมูลตามเงื่อนไข(เหมือนกับคำสั่ง Select และ Where )
<?
$table = new MyCSV("sys_province.csv");   //เปิดไฟล์ข้อมูล
$tbname=$table->tablename();    //ชื่อตารางข้อมูล
$numrow=$table->num_rows();   //จำนวน record
echo $tbname.'<br>';                   //แสดงชื่อตาราง
while ($row = $table->each()) {
        if($row['GEO_ID']=='6'){   //แทนคำสั่ง Where
                 echo $row['id'] . "-";
                 echo $row['PROVINCE_ID']. "-";
                 echo $row[',PROVINCE_CODE']. "-";
                 echo $row['PROVINCE_NAME']. "-";
                 echo $row['GEO_ID']. "-";
                 echo "<br>";
          }
}
echo $numrow.'<br>';   //แสดงจำนวน record
?>


2.การ Join ตารางข้อมูล
การ join ข้อมูลในตาราง thing.csv ฟิวดฺ์รหัสสี โดยดึงรหัสสีจากตาราง color.csv มีโครงสร้างและข้อมูลดังนี่
1.ไฟล์ color.csv
id,color
1,red
2,yellow
3,green

2.ไฟล์ thing.csv
id,thing,color_id
1,book,2
2,pen,1
3,table,3
4,ruller,2
5,chair,2

<?
$colorTable = new MyCSV('color.csv');     //เปิดตารางรหัสสี
$thingTable = new MyCSV('thing.csv');     //เปิดตารางข้อมูล
$thingTable->join($colorTable, "color_id");
while ($row = $thingTable->each()) {
    echo $row['thing'] . " is " . $row['color'] . "<br>"; 
}
//$row['thing']  เป็นฟิวด์จากตาราง thing.csv 
//และ $row['color'] เป็นฟิวด์จากตาราง color.csv
?>

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

Netbeans Optimized เร็วขึ้นบน Win7


 การ Optimize ให้ Netbeans 7.4 ทำงานได้เร็วขึ้นบน Win 7 สามารถทำได้ดังนี้

1.ปรับค่าใน /etc/netbeans.conf ในส่วนของ netbeans_default_options
โดยกำหนดขนาดหน่วยความจำ(minimal and maximal Heap sizes) ให้มากกว่าเดิม
ตามความเหมาะสมกับเครื่องของเรา โดยมีวิธีกำหนด เช่น
     -J-Xms256m  ระดับที่เริ่มต้น
     -J-Xmx1024m ระดับสูงสุด

ตย.การกำหนดค่าสำหรับ win7 ดังนี้
   netbeans_default_options="-J-client -J-Xss2m -J-Xms128m -J-XX:PermSize=32m -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.zip.disableMemoryMapping=true -J-Xverify:none -J-Xmx512m -J-XX:CompileThreshold=100 -J-XX:+UseConcMarkSweepGC -J-XX:+CMSClassUnloadingEnabled -J-XX:+CMSPermGenSweepingEnabled "
 

2.Disable การ background scanning ในตอนเปิดโปรแกรม NB
ด้วยการเอาเครื่องหมายถูกออก(ไม่ติกถูก) ที่ Enable auto-scanning of source
จากเมนู Tools -> Options -> Miscellaneus -> Files



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

ที่อยู่แบบ Dropdown ด้วย jQuery

   
           การสร้าง Dropdownlist ที่อยู่ ภาค/จังหวัด/อำเภอ/ตำบล ด้วย jQuery จะดีตรงที่สามารถใช้ทั้งใน form เพิ่มใหม่ และ form การแก้ไข โดยที่ไม่ต้องเปลี่ยนแปลง code มากนัก ดังตัวอย่าง ( download ตัวอย่าง

1. form เพิ่มใหม่

<!DOCTYPE html>
<html lang="en">
  <head>
  <meta charset="utf-8">
  <script src="jquery.min.js"></script>
  <script type="text/javascript">
        //<![CDATA[
         var geo_id = <?php echo isset($_POST['geo_id'])
          ?intval($_POST['geo_id']):'0'; ?>;
        var province_id = <?php echo isset($_POST['province_id'])
         ?intval($_POST['province_id']):'0'; ?>; //default 76=นราธิวาส province_id
        var amphur_id = <?php echo isset($_POST['amphur_id'])
         ?intval($_POST['amphur_id']):'0'; ?>;  //default 987=บาเจาะ amphur_id
        var district_id = <?php echo isset($_POST['district_id'])
         ?intval($_POST['district_id']):'0'; ?>;

        function loadSelectBox(id,url,selected){
                $.get(
                    url,{},function(data){
                                   $(id).html(data);
                                   if (selected!=0){
                                        $(id+' option[value='+selected+']').attr('selected','selected');
                                   }
                               }
                 );
        }

        $(function(){
                loadSelectBox(
                           '#geo_id',
                            'geo_combo.php?load=geo',
                            geo_id
                         );
               loadSelectBox(
                           '#province_id',
                           'geo_combo.php?load=province&geo_id='+geo_id,
                           province_id
               );
               loadSelectBox(
                         '#amphur_id',
                         'geo_combo.php?load=amphur&province_id='+province_id,
                         amphur_id
               );
               loadSelectBox(
                         '#district_id',
                         'geo_combo.php?load=district&amphur_id='+amphur_id,
                         district_id
               );
               $('#geo_id').change(function(e){
                          var selected = e.target.value;
                          loadSelectBox(
                              '#province_id',
                              'geo_combo.php?load=province&geo_id='+selected,
                              0 );
                          $('#amphur_id :not(option:first)').remove(); //add
                           $('#district_id :not(option:first)').remove(); //add
                 });
               $('#province_id').change(function(e){
                        var selected = e.target.value;
                        loadSelectBox(
                             '#amphur_id',
                             'geo_combo.php?load=amphur&province_id='+selected,
                             0 );
                        $('#district_id :not(option:first)').remove(); //add
               });
               $('#amphur_id').change(function(e){
                          var selected = e.target.value;
                           loadSelectBox(
                           '#district_id',
                           'geo_combo.php?load=district&amphur_id='+selected,
                           0 );
               });
        });
        //]]>
</script>

</head>
<body>

    <div align="center">
      <b><font size="5">บันทึกข้อมูลรายใหม่</font></b>
    </div>
            <form name="form1" action="#" method="POST" >
              <table class="table table-bordered">
              <tr class="active"><td align=left>
                   <?= str_repeat('&nbsp;', 3);?>
                    ชื่อ <input type="text" size="30" name="fname" class="form-control" />
                    <?= str_repeat('&nbsp;', 3);?>
                    นามสกุล &nbsp; <input type="text" size="30" name="lname" class="form-control" />
                    <?= str_repeat('&nbsp;', 3);?>
                    <br><br>
                    <?= str_repeat('&nbsp;', 3);?>
                    บ้านเลขที่ <input type="text" size="10" name="ban_no" class="form-control"/>
                     <?= str_repeat('&nbsp;', 3);?>
                    บ้าน/ชุมชน <input type="text" size="20" name="ban_name" class="form-control"/>
                     <?= str_repeat('&nbsp;', 3);?>
                    หมู่ <input type="text" size="2" name="moo" class="form-control"/>
                    <br><br>
                      <?= str_repeat('&nbsp;', 3);?>
                     ภาค
                    <select id="geo_id" name="geo_id" class="form-control">
                        <option value="0">- เลือกภาค -</option>
                    </select>
                     <?= str_repeat('&nbsp;', 3);?>
                     จังหวัด <select id="province_id" name="province_id" class="form-control">
                                <option value="0">-- เลือกจังหวัด --</option>
                            </select>
                      <?= str_repeat('&nbsp;', 3);?>
                    อำเภอ <select id="amphur_id" name="amphur_id" class="form-control">
                                <option value="0">-- เลือกอำเภอ --</option>
                            </select>
                     <?= str_repeat('&nbsp;', 3);?>
                    ตำบล <select id="district_id" name="district_id" class="form-control">
                                <option value="0">-- เลือกตำบล --</option>
                            </select>
            <tr class="active"><td align=center>
                        <br>
                     <input TYPE="submit" value=" บันทึก " class="btn btn-success btn-lg" />
           </td></tr>
           </table>
      </form>
</body>
</html>


2. form แก้ไข
       การแก้ไขข้อมูลให้ใช้ไฟล์เดิม(form เพิ่มใหม่) โดยที่เปลียนแปลงcodeเฉพาะส่วน(แทนที่codeเดิม) ดังนี้

 <? include('db_inc.php');
        //ดึงค่าเดิมจาก table มาเป็นค่า deafult แทนค่า 0
        //เช่น เก็บเป็นตัวแปร $default_geo_id ,  $default_province_id, $default_amphur_id ,$default_district_id
        $default_geo_id='6';
        $default_province_id='76';
        $default_amphur_id='987';
        $default_district_id='8795';
         ?>

         var geo_id = <?php echo isset($_POST['geo_id'])
          ?intval($_POST['geo_id']):$default_geo_id; ?>;        //default 6=ภาคใต้ geo_id
        var province_id = <?php echo isset($_POST['province_id'])
         ?intval($_POST['province_id']):$default_province_id; ?>; //default 76=นราธิวาส province_id
        var amphur_id = <?php echo isset($_POST['amphur_id'])
         ?intval($_POST['amphur_id']):$default_amphur_id; ?>;  //default 987=บาเจาะ amphur_id
        var district_id = <?php echo isset($_POST['district_id'])
         ?intval($_POST['district_id']):$default_district_id; ?>;    //default 8795=บาเระเหนือ district_id



3. ไฟล์หลักสำหรับสร้างข้อมูลใน Dropdown ชื่อ geo_combo.php ดังนี้

<?php
 header('Content-type:text/html;charset=UTF-8');
 //require_once 'config.inc.php';
 require_once 'db_inc.php';

 if (!isset($_GET['load'])){
  $_GET['load'] = 'province';
 }

 switch($_GET['load']){
           case 'geo':
                         $r = mysql_query("SELECT * FROM `sys_geography`") or report();
                         echo '<option value="0">-- เลือกภาค --</option>';
                         while ($row = mysql_fetch_assoc($r)){
                              echo '<option value="',$row['GEO_ID'],'">', $row['GEO_NAME'], '</option>';
                         }
          break;
          case 'province':
                       $province_id = isset($_GET['geo_id'])?intval($_GET['geo_id']):0;
                       $r = mysql_query("SELECT * FROM `sys_province` WHERE `GEO_ID`=$geo_id") or report();
                       echo '<option value="0">-- เลือกจังหวัด --</option>';
                       while ($row = mysql_fetch_assoc($r)){
                             echo '<option value="',$row['PROVINCE_ID'],'">', $row['PROVINCE_NAME'], '</option>';
                       }
          break;
          case 'amphur':
                      $province_id = isset($_GET['province_id'])?intval($_GET['province_id']):0;
                       $r = mysql_query("SELECT * FROM `sys_amphur` WHERE `PROVINCE_ID`=$province_id") or report();
                       echo '<option value="0">-- เลือกอำเภอ --</option>';
                      while ($row = mysql_fetch_assoc($r)){
                                echo '<option value="',$row['AMPHUR_ID'],'">', $row['AMPHUR_NAME'], '</option>';
                      }
          break;
          case 'district':
                       $amphur_id = isset($_GET['amphur_id'])?intval($_GET['amphur_id']):0;
                      $r = mysql_query("SELECT * FROM `sys_district` WHERE `AMPHUR_ID`=$amphur_id") or report();
                       echo '<option value="0">-- เลือกตำบล --</option>';
                       while ($row = mysql_fetch_assoc($r)){
                            echo '<option value="',$row['DISTRICT_ID'],'">', $row['DISTRICT_NAME'],'</option>';
                       }
          break;
 }

 function report(){
     return die('<option>'.htmlspecialchars(mysql_error()).'</option>');
 }
?>


4. ไฟล์ db_inc.php ดังนี้
  mysql_connect("localhost","root","test"); 
  mysql_select_db("intervac_db");
  mysql_query("SET NAMES utf8");


--creadit : http://web-programming-bookmark.blogspot.com/2010/11/dropdown-listbox-jquery.html

--ดาวน์โหลดไฟล์ database ได้ที่ http://www.thaicreate.com/free-web-script/thailand-province-database.html