วันศุกร์ที่ 5 ธันวาคม พ.ศ. 2557

w2ui New JavaScript UI Library

The w2ui library is primarily a JavaScript library. You can use the library with any server side language (NodeJS, php, Java, .NET, perl, etc.). It can render data returned from the server or generated in the browser with JavaScript.

Modern Browsers

The library heavily uses HTML5 and CSS3 and yet supports all major modern browsers. Latest Chrome, FireFox 7+, Safari 5+ and IE 9+ are among supported browsers.



download link


data grid ที่น่าสนใจ

jqGrid is an Ajax-enabled JavaScript control that provides solutions for representing and manipulating tabular data on the web. Since the grid is a client-side solution loading data dynamically through Ajax callbacks, it can be integrated with any server-side technology, including PHP, ASP, Java Servlets, JSP, ColdFusion, and Perl.
jqGrid uses a jQuery JavaScript Library and is written as plugin for that package. For more information on jQuery, please see (jQuery.com).
jqGrid's Home page can be found at trirand.com.
Working examples of jqGrid, with explanations, can be found here.

download link

jQGrid PHP inline Editing example hear.

 

วันอาทิตย์ที่ 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


วันพุธที่ 13 สิงหาคม พ.ศ. 2557

ทำ Bootstrap 3 ให้รองรับ Internet Explorer 8 and 9

   Bootstrap 3 โดยปกติจะรองรับสำหรับ Browser สมัยใหม่เท่านั้น อย่างเช่น Firefox หรือ Chrome แต่จะไม่สามารถแสดงผลได้ด้วย Internet Explorer 8 และ 9
   ถ้าหากต้องการแสดงผลใน IE 8 & 9 จะมีขั้นตอนเพิ่มเติมดังนี้
1. Download ไฟล์ html5shiv.js และ Respond.min.js
ที่นี่  https://code.google.com/p/html5shiv 
  https://github.com/scottjehl/Respond

2.นำไปไว้ที่ /templates/your-template/js
3.เขียนคำสั่งต่อไปนี้ในส่วน head ของไฟล์

<!--[if lt IE 9]>
 <script src="/js/html5shiv.js" type="text/javascript"></script>
 <script src="/js/respond.min.js" type="text/javascript"></script>
<![endif]-->
 
------------------------------------------- 
Credited : http://www.joostrap.com/blog/bootstrap-3-supporting-internet-explorer-8-and-9 
 

วันอังคารที่ 12 สิงหาคม พ.ศ. 2557

สร้างกราฟ ด้วย Chart.js แบบที legend

      การสร้างกราฟด้วย Chart.js จะมีปัญหาที่ไม่สามารถสร้าง legent ได้ แต่มีวิธีแก้ไข
โดยใช้ Chart.js.legend  สามาร D/L ได้ที่ https://github.com/bebraw/Chart.js.legend
แล้วแก้ไข code ดังนี้

<?
$g_label="labels : ['1-01/01/56','2-01/02/56','3-01/032/56','4-01/04/56','5-01/05/56','6-01/06/56']";
$fbs_data="data : [100,125,120,128,100,130]";
$systolic_data="data : [120,150,110,180,100,120]";
$dyastolic_data="data : [80,110,70,120,60,80]";
?>
<!DOCTYPE html>
<html>
<head>
<link href="assets/chart_legent/demo.css" rel="stylesheet" type="text/css">
<script src="assets/chart_legent/Chart.js"></script>
<script src="assets/chart_legent/legend.js"></script>

<meta charset=utf-8 />
<meta name="viewport" content="width=device-width, user-scalable=no" />
<title></title>

<script>
        if(!!(window.addEventListener)) window.addEventListener('DOMContentLoaded', main);
        else window.attachEvent('onload', main);

        function main() {
            lineChart();
          }

        function lineChart() {
            var data = {
                <? echo $g_label;?>,
                datasets : [
                    {
                    fillColor : "rgba(220,220,220,0.5)",
                    //strokeColor : "rgba(220,220,220,1)",
                    //pointColor : "rgba(220,220,220,1)",
                    pointStrokeColor : "#fff",

                    pointColor : "rgba(255,128,0,1)",   //สีส้ม
                    strokeColor : "rgba(255,255,0,1)",  //สีเหลือง
                    pointHighlightFill : "#FF0000",     //สีแดง


                     <? echo $fbs_data;?>,
                    title : 'FBS'
                },
                {
                    fillColor : "rgba(151,187,205,0.5)",
                    strokeColor : "rgba(0,128,192,1)",  //ฟ้าเข้ม
                    //pointColor : "rgba(151,187,205,1)",
                    pointColor : "rgba(0,0,255,1)",             //blue
                    pointStrokeColor : "#fff",
                    <? echo $systolic_data;?>,
                    title : 'Systolic'
                },
                {
                    fillColor : "rgba(151,187,205,0.5)",
                    strokeColor : "rgba(151,187,205,1)",
                    pointColor : "rgba(151,187,205,1)",
                    pointStrokeColor : "#fff",
                    <? echo $dyastolic_data;?>,
                    title : 'Dyastolic'
                }
                ]
            };

            var ctx = document.getElementById("lineChart").getContext("2d");
            new Chart(ctx).Line(data);

            legend(document.getElementById("lineLegend"), data);

            // testing adding twice (should get same result)
            legend(document.getElementById("lineLegend"), data);
            showTooltips: true;
        }

</script>

</head>
<body>

<br><br>

<div align="center">
   กราฟแสดงแนวโน้มของค่าความดันโลหิตและระดับน้ำตาลในกระแสเลือด
   <div>
    <canvas id="lineChart" width="900" height="300"></canvas>
    <div id="lineLegend"></div>
   </div>
</div>


</body>
</html>



วันอาทิตย์ที่ 10 สิงหาคม พ.ศ. 2557

การแก้ปัญหา "headers already sent by" ของ php


Warning: Cannot modify header information - headers already sent by
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent 
ได้รับการแสดงข้อผิดพลาดนี้เนื่องจากข้อมูล headers ส่งไปแล้วจากโค๊ดในบรรทัดอื่นก่อนหน้าโค๊ดที่ทำให้เกิดปัญหานี้
วิีธีแก้ปัญหาทำได้อยู่ 2 วิธี
1. ให้แก้ไขไฟล์ php.ini แล้วตั้งค่า output_buffering = on
หรือ output_buffering = 4096 
แต่ิ วิธีนี้ไม่เหมาะสมในกรณีที่เราไม่ได้เป็นเจ้าของเซิร์ฟเวอร์  หรือเซิร์ฟเวอร์นั้นรันแอพพลิเคชั่นอื่น ซึ่งอาจจะได้รับผลกระทบจากการกำหนดค่าตัวแปรนี้
2. ให้ใส่โค๊ด  <? ob_start() ?> ไว้บรรทัดแรกสุด  และใส่โค๊ด <? ob_end_flush() ?> ไว้บรรทัดสุดท้ายสุด

credit : http://www.gotoknow.org/posts/61327

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

Form Validation ใน BootStrap



                การใช้ Form Validation ที่สะดวกและง่ายในการsetค่าต่างๆ สามารถดูรายละเอียดได้ที่ http://1000hz.github.io/bootstrap-validator/#validator-markup โดยจะต้อง download ไฟล์ validate.js มาและเรียกใช้ ดังนี้
      <script type="text/javascript" src="assets/js/validator.js"></script>

แล้วกำหนดการใช้งานใน form โดยการเพิ่มข้อความ data-toggle="validator"
และใน Object ของ Form สามารถกำหนดค่าต่างๆ ตามต้องการ ดังนี้ เช่น
    maxlength="13"
    data-minlength="13"

ตัวอย่าง

        <form action="" method="POST" class="form-inline" data-toggle="validator">
              <input type="text" size="15" name="pid" class="form-control"
                 maxlength="13" data-minlength="13" required />
               
                .....
        </form>


วันพุธที่ 25 มิถุนายน พ.ศ. 2557

DateTimePicker ใน BootStrap



                  การใช้ปฏิทิน(DataTimePicker)สำหรับ Bootstrap นั้น มี script หลากหลายรูปแบบมาก แต่ที่สามารถใช้งานได้ง่ายและสะดวก ทดลองใช้แล้ว work มาก คือเป็นของ Thiago de Arruda โดยสามารถดูได้ที่ http://tarruda.github.io/bootstrap-datetimepicker/  มีคำอธิบายวิธีการใช้โดยละเอียด

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

       ส่วน Obj.ของ Form

                <div class='input-group date' id='birth_date' >
                     <input data-format="DD/MM/YYYY" type='text' size="10" 
                        name="birthdate" class="form-control" required />
                           <span class="input-group-addon">
                              <span class="glyphicon glyphicon-calendar"></span>
                           </span>
                 </div>

       ส่วนของ JS

            <script type="text/javascript">
                $(function () {
                      $('#birth_date').datetimepicker({
                                    pickTime: false,
                                    maskInput: true,   //ทำให้ไม่แสดง keyboard .ใน smartphone
                                    language: 'en',
                                    pick12HourFormat: true,
                                    startDate: -Infinity,      // set a minimum date
                                    endDate: Infinity          // set a maximu
                        });
                 }

หมายเหตุ : สำหรับ วัน เดือน ภาษาไทย ให้แก้ไขจากไฟล์ moment.js


วันพุธที่ 28 พฤษภาคม พ.ศ. 2557

การลบ Adware Generic virus (อย่างง่าย)

         ปัจจุบัน Adware Generic เป็นปัญหาใหม่สำหรับคนITยุคปัจจุบัน อาจไม่ใช่ virus computer แต่ก็คล้ายๆกัน สร้างปัญหาการใช้งานเครื่อง computer มากพอสมควร จึงได้เสนอแนวทางการลบที่ได้ผลและเผยแพร่กันในอินเทอร์เน็ต สามารถอ่านเพิ่มเติมที่มีการอธิบายอย่างละเอียด ได้จาก
บทความ Remove Adaware Generic virus(in Easy steps) คลิกที่นี่

วันศุกร์ที่ 23 พฤษภาคม พ.ศ. 2557

วิธีทำสไลด์เป็น PDF แบบ Manual



         ปัญหาการใช้ Powerpoint ที่มีรูปภาพมากๆ ขนาดของไฟล์จะใหญ่มาก อาจถึง 10-20 MB. ซึ่งในการส่งต่อหรือแจกจ่ายผ่านอินเทอร์เน็ตจะทำให้ Upload ไม่ได้ หรือช้ามาก เพื่อเป็นการแก้ปัญหาดังกล่าว การแปลงไฟล์จาก powerpoint หรือ ppt ไปเป็นไฟล์แบบ pdf จึงเป็นสิ่งที่จำเป็น อีกทั้งไฟล์ pdf ที่ได้นอกจากมีขนาดที่เล็กลงมากแลั้ว ยังเป็นไฟล์ที่แก้ไขไม่ได้อีกด้วย สร้างความปลอดภันอีกระดับหนึ่งได้
 
PPT2PDF แบบ Manual มีขั้นตอนดังนี้
1.เปิดไฟล์ ppt ด้วย powerpoint
2.บันทึกเป็น เลือก png
3.เลือกตอบให้ทำ ทั้งหมดทุกสไลด์
4.เปิด MS-Word สร้างไฟล์ใหม่แนวนอน
5.นำเข้ารูกภาพทุกรูปจาก 2
ุ6.จัดเก็บกำหนดชื่อไฟล์ตามต้องการ เช่น slide.docx
7.เรียกโปรแกรม Weeny Free Word To PDF Converter(download จาก http://www.weenysoft.com/)
8.แปลงไฟล์จากข้อ 6 เป็น PDF ไฟล์(สามารถกำหนดลายน้ำ หรือ รหัสผ่านได้)
9.เรียกโปรแกรม ORPALIS PDF Reducer Free (download จาก http://www.orpalis.com/)
10.ลดขนาดไฟล์ PDF ที่ได้จากข้อ 8

หมายเหตุ : เน้นการใช้งานโปรแกรม free เท่านั้น

วันศุกร์ที่ 16 พฤษภาคม พ.ศ. 2557

หนังสือหลักการควบคุมยุงพาหะนำโรคไข้เลือดออก



             หนังสือ"หลักการควบคุมยุงพาหะนำโรคไข้เลือดออก "เป็นหนังสือที่ประกอบด้วยเนื้อหาและหลักการที่จะเป็นสำหรับการดำเนินงานควบคุมโรคไข้เลือดออก ภายใต้แนวคิดที่จะต้องดำเนินการอย่างรวดเร็วและมีประสิทธิภาพ ซึ่งได้สอดแทรกเนื้อหาที่เกี่ยวกับมาตรการ 3-3-1 (บทที่ 4) ที่จะช่วยเป็นกรอบให้การดำเนินงานควบคุมโรคที่รวดเร็ว วัดผลได้อย่างเป็นรูปธรรม ส่วนการดำเนินงานที่มีประสิทธิภาพในการตัดวงจรการแพร่เชื้อโดยกำจัดยุงตัวเต็มวัยนั้น จำเป็นอย่างยิ่งที่ผู้ปฏิบัติจะต้องมีวิธีปฏิบัติที่ถูกต้องตามหลักวิชา มีการใช้สารเคมีถูกต้องและใช้เครื่องพ่นสารเคมีที่เหมาะสม (บทที่ 2 และ 3)  จึงจะสามารถลดการแพร่ระบาดของโรคไข้เลือดออกได้ในที่สุด

ดาวน์โหลดหนังสือนี้ได้ที่นี่
ดาวน์โหลดSlideประกอบหนังสือได้ที่นี่
ดาวน์โหลดSlideอบรมทีมพ่นเคมีได้ที่นี่

 

วันพฤหัสบดีที่ 6 มีนาคม พ.ศ. 2557

การออกแบบหน้า web ด้วย BootStrap



              การออกแบบหน้า web ด้วย BootStrap ง่ายแบบ Drag-Drop ลากวางตามต้องการ เสร็จแล้วจะสามารถ download script พร้อมใช้งานได้เลย ได้ที่ http://www.layoutit.com
             และสามารถกำหนด color scheme ได้ง่ายๆด้วยการ download ชุดไฟล์ css จาก http://paintstrap.com/gallery/ โดยสามารถเลือเชดสีตามต้องการ มีตัวอย่างให้ดูก่อนด้วย เมื่อได้ script แล้วนำไปวางทับในโฟลเดอร์ css ของ bootstrap ได้เลย

วันพุธที่ 19 กุมภาพันธ์ พ.ศ. 2557

TutorialsPoint แหล่งเรียนรู้เทคโนโลยีคอมพิวเตอร์

   
www.tutorialspoint.com เป็นแหล่งเรียนรู้เทคโนโลยีคอมพิวเตอร์ ที่บริการฟรี มีเนื้อหามากมาย เกือบทุกๆเรื่องของเทคโนโลยีคอมพิวเตอร์ มีเอกสารให้ Download เป็น PDF ที่มีเนื้อหาดีมาก
นับเป็นอีกแหล่งที่มีเนื้อหาวิชาการต่างๆเกี่ยวกับคอมพิวเตอร์ และสามารถเก็บเป็นเอกสาร PDF ได้

วันจันทร์ที่ 17 กุมภาพันธ์ พ.ศ. 2557

DSV PHP Editor สุดยอด PHP IDE พร้อม MySQL




DSV PHP Editor เป็นเครื่องมือสำหรับเขียนโปรแกรมด้วย php และสามารแก้ไข debug ที่พร้อมด้วย HTML, CSS, Java Script และ SQL ของ MySQL  ใช้ได้สะดวกมากทดสอบและ run script ได้ทัน ไม่ต้องติดตั้งอะไรเพิ่มเติม ไม่เหมือนกับเครื่องมือฟรีอื่นๆ และสามารถรองรับ font ภาษาไทย ที่สำคัญสามารถใช้ได้ฟรี

ดาวนโหลดได้ที่นี่

การปรับใช้งานเบื้องต้น โดยแก้ไขค่าในเมนู Options->Perferences ดังนี้


วันจันทร์ที่ 3 กุมภาพันธ์ พ.ศ. 2557

LiveCode ทางเลือกใหม่สำหรับโปรแกรมเมอร์



LiveCode เป็นอีกภาษาหนึ่งที่ programmer น่าจะให้ความสนใจ
โดยเฉพาะการเขียนโปรแกรมที่สามารถเขียนเพียงครั้งเดียวแล้วจะนำไปใช้ได้กับทุก plateform ทั้ง Windows, Mac OS, Linux, iOS, Android หรือเซิร์ฟเวอร์ ซึ่งเป็นการเปิดแนวความคิดของการออกแบบในการใช้งานที่มีประสิทธิภาพสำหรับเดสก์ทอป มือถือ และเซิร์ฟเวอร์

LiveCode มี IDE ของตนเอง ใช้ง่ายและสะดวกในการออกแบบ UserInterface เป็นอย่างมาก
มีหลายรุ่นให้เลือก ดูได้จากที่นี่
มี tutorial ดีมาก เช่น ที่ livecodesupersite หรือ ที่ BRIGHAM YOUNG UNIVERSITY
หรือ official wesite ที่นี่