<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ajax - itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</title>
	<atom:link href="https://www.itoffside.com/tag/ajax-2/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.itoffside.com</link>
	<description>ข้อมูลข่าวสารและเรื่องราวบนโลกของไอทีที่ ล้ำหน้า พร้อมสาระการเขียนโปรแกรมคอมพิวเตอร์</description>
	<lastBuildDate>Mon, 16 Mar 2020 07:52:59 +0000</lastBuildDate>
	<language>th</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>

<image>
	<url>https://www.itoffside.com/wp-content/uploads/2020/04/cropped-favicon-96x96-1-32x32.png</url>
	<title>ajax - itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</title>
	<link>https://www.itoffside.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>การทำ Multiple Dropdown จังหวัด, อำเภอ, ตำบล แบบ 3 ชั้น ด้วย Ajax + PHP + MySQL</title>
		<link>https://www.itoffside.com/dropdown-dynamic-3-level-with-ajax/</link>
					<comments>https://www.itoffside.com/dropdown-dynamic-3-level-with-ajax/#comments</comments>
		
		<dc:creator><![CDATA[Onmobile]]></dc:creator>
		<pubDate>Tue, 21 Jan 2020 06:50:38 +0000</pubDate>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MySQLi]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php workshop]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[php7]]></category>
		<guid isPermaLink="false">https://www.itoffside.com/?p=3185</guid>

					<description><![CDATA[<p>บทความนี้เป็นการสอนการทำ Dropdown 3 ชั้น โดยใช้เทคนิค Ajax ในการช่วยเพื่อให้หน้าเว็บไปต้องรีเฟส โดยขั้นตอนการทำงานเริ่มจากเลือกจังหวัด เมื่อเลือกจังหวัดแล้ว Dropdown ชั้นที่ 2 จะมีรายชื่ออำเภอของจังหวัดที่เลือกเท่านั้น หลังจากนั้นเมื่อเราเลือกอำเภอ Dropdown ชั้นที่ 3 จะมีรายชื่อตำบลของอำเภอที่เราเลื...</p>
<p>The post <a href="https://www.itoffside.com/dropdown-dynamic-3-level-with-ajax/">การทำ Multiple Dropdown จังหวัด, อำเภอ, ตำบล แบบ 3 ชั้น ด้วย Ajax + PHP + MySQL</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>บทความนี้เป็นการสอนการทำ <strong>Dropdown 3 ชั้น</strong> โดยใช้เทคนิค <strong>Ajax</strong> ในการช่วยเพื่อให้หน้าเว็บไปต้องรีเฟส โดยขั้นตอนการทำงานเริ่มจากเลือกจังหวัด เมื่อเลือกจังหวัดแล้ว Dropdown ชั้นที่ 2 จะมีรายชื่ออำเภอของจังหวัดที่เลือกเท่านั้น หลังจากนั้นเมื่อเราเลือกอำเภอ Dropdown ชั้นที่ 3 จะมีรายชื่อตำบลของอำเภอที่เราเลือก จะเห็นได้ว่าทั้งหมดนี้เราใช้ ภาษา <strong>PHP + MySQL</strong> (เทคนิค Ajax) เท่านั้น ซึ่งทางผู้เขียนจะอธิบายขั้นตอนของ code เพื่อให้ผู้อ่านเข้าใจได้ง่ายขึ้น<span id="more-3185"></span></p>
<h3>เดโม่ตัวอย่าง</h3>
<p><img fetchpriority="high" decoding="async" class="alignnone size-full wp-image-3204" src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown.gif" alt="" width="726" height="294"></p>
<h3>เครื่องมือพัฒนา</h3>
<p>1. <strong>XAMPP</strong> สำหรับจำลองเครื่องเราเป็น SERVER ให้ใช้เวอร์ชั่นล่าสุด (ที่ใช้ php 7 ขึ้นไป)<br />
2. <strong>VSCODE</strong> ใช้ในการเขียนโปรแกรม</p>
<h3>ขั้นตอน</h3>
<p>1. ดาวน์โหลดฐานข้อมูลมาก่อน สามารถดาวน์โหลดได้ที่ <a href="https://raw.githubusercontent.com/ipball/multiple_dropdown/master/thailand.sql" target="_blank" rel="noopener noreferrer">Click to Download</a> อ้างอิงจาก https://github.com/parsilver/thailand-provinces<br />
2. หลังจากนั้นทำการสร้าง database ชื่อ thailand แล้วทำการ Import SQL โดยใช้ <span style="color: #ff00ff;"><strong>PHPMyAdmin</strong></span><br />
3 สร้างโปรเจค multiple_dropdown ไว้ใน c:\xampp\htdocs\<br />
4. สร้างไฟล์ <span style="color: #000080;">connect.php</span> เพื่อเชื่อมต่อฐานข้อมูล code ตัวอย่างด้านล่าง</p><pre class="crayon-plain-tag">&lt;?php
$info = array(
    'host' =&gt; 'localhost',
    'user' =&gt; 'root',
    'password' =&gt; '',
    'dbname' =&gt; 'thailand'
);
$conn = mysqli_connect($info['host'], $info['user'], $info['password'], $info['dbname']) or die('Error connection database!');
mysqli_set_charset($conn, 'utf8');</pre><p>5. สร้างไฟล์ <span style="color: #000080;">index.php</span> เพื่อสร้าง html และทำ multiple dropdown ดู code ตัวอย่างด้านล่าง</p><pre class="crayon-plain-tag">&lt;?php
include('connect.php');
$sql = "SELECT * FROM provinces";
$query = mysqli_query($conn, $sql);
?&gt;
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
    &lt;meta charset="UTF-8"&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="ie=edge"&gt;
    &lt;title&gt;Multiple Dropdown - itoffside.com&lt;/title&gt;

    &lt;link href="assets/bootstrap.min.css" rel="stylesheet"&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class="container my-5"&gt;
    &lt;div class="card"&gt;
        &lt;div class="card-body"&gt;
            &lt;h3&gt;การทำ Multiple Dropdown ด้วย Ajax เลือก 3 ขั้น&lt;/h3&gt;
            &lt;form&gt;
                &lt;div class="form-row"&gt;
                    &lt;div class="form-group col-md-4"&gt;
                        &lt;label for="province"&gt;จังหวัด&lt;/label&gt;
                        &lt;select name="province_id" id="province" class="form-control"&gt;
                            &lt;option value=""&gt;เลือกจังหวัด&lt;/option&gt;
                            &lt;?php while($result = mysqli_fetch_assoc($query)): ?&gt;
                                &lt;option value="&lt;?=$result['id']?&gt;"&gt;&lt;?=$result['name_th']?&gt;&lt;/option&gt;
                            &lt;?php endwhile; ?&gt;
                        &lt;/select&gt;
                    &lt;/div&gt;
                    &lt;div class="form-group col-md-4"&gt;
                        &lt;label for="amphure"&gt;อำเภอ&lt;/label&gt;
                        &lt;select name="amphure_id" id="amphure" class="form-control"&gt;
                            &lt;option value=""&gt;เลือกอำเภอ&lt;/option&gt;
                        &lt;/select&gt;
                    &lt;/div&gt;
                    &lt;div class="form-group col-md-4"&gt;
                        &lt;label for="district"&gt;ตำบล&lt;/label&gt;
                        &lt;select name="district_id" id="district" class="form-control"&gt;
                            &lt;option value=""&gt;เลือกตำบล&lt;/option&gt;
                        &lt;/select&gt;
                    &lt;/div&gt;
                &lt;/div&gt;                
            &lt;/form&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;

&lt;script src="assets/jquery.min.js"&gt;&lt;/script&gt;
&lt;script src="assets/script.js"&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
&lt;?php
mysqli_close($conn);</pre><p><strong>คำอธิบาย Code</strong><br />
<img decoding="async" class="alignnone size-full wp-image-3191" src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-01.png" alt="" width="309" height="102" srcset="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-01.png 309w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-01-300x99.png 300w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-01-80x26.png 80w" sizes="(max-width: 309px) 100vw, 309px" /></p>
<p><span style="text-decoration: underline;">บรรทัด 1-5</span> เป็นการเชื่อต่อฐานข้อมูลและดึงข้อมูลจังหวัดมา (province)</p>
<p><img decoding="async" class="alignnone wp-image-3192 " src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-02.png" alt="" width="526" height="151" srcset="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-02.png 766w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-02-300x86.png 300w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-02-80x23.png 80w" sizes="(max-width: 526px) 100vw, 526px" /><br />
<span style="text-decoration: underline;">บรรทัด 22-31</span> เป็นการนำข้อมูลจังหวัดที่ได้ จากบรรทัด 1-5 มาแสดงในหน้าจอ</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3193" src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-03.png" alt="" width="641" height="246" srcset="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-03.png 641w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-03-300x115.png 300w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-03-80x31.png 80w" sizes="auto, (max-width: 641px) 100vw, 641px" /><br />
<span style="text-decoration: underline;">บรรทัด 32-43</span> เป็นการใส่ dropdown อำเภอ, ตำบล แต่ยังไม่มีข้อมูล จนกว่า เราจะเลือกจังหวัด ซึ่งเราจะนำ javascript มาจับ Event หน้าจอ เพื่อเรียกใช้งาน ajax แล้วนำข้อมูล อำเภอ, ตำบล มาใส่ตามลำดับ</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3194" src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-04.png" alt="" width="391" height="78" srcset="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-04.png 391w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-04-300x60.png 300w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-04-80x16.png 80w" sizes="auto, (max-width: 391px) 100vw, 391px" /><br />
<span style="text-decoration: underline;">บรรทัด 51</span> เป็นการเรียกใช้ไฟล์ <span style="color: #000080;">script.js</span> โดย file นี้มีความสำคัญในการ จัดการ <strong>AJAX</strong></p>
<p>6. สร้างไฟล์ <span style="color: #000080;">script.js</span> ไว้ที่โฟล์เดอร์ assets เพื่อใช้สำหรับ เวลาเราเปลี่ยนแปลง จังหวัดหรืออำเภอ ให้ทำการ ดึงข้อมูล มาใหม่</p><pre class="crayon-plain-tag">$(function(){
    var provinceObject = $('#province');
    var amphureObject = $('#amphure');
    var districtObject = $('#district');

    // on change province
    provinceObject.on('change', function(){
        var provinceId = $(this).val();

        amphureObject.html('&lt;option value=""&gt;เลือกอำเภอ&lt;/option&gt;');
        districtObject.html('&lt;option value=""&gt;เลือกตำบล&lt;/option&gt;');

        $.get('get_amphure.php?province_id=' + provinceId, function(data){
            var result = JSON.parse(data);
            $.each(result, function(index, item){
                amphureObject.append(
                    $('&lt;option&gt;&lt;/option&gt;').val(item.id).html(item.name_th)
                );
            });
        });
    });

    // on change amphure
    amphureObject.on('change', function(){
        var amphureId = $(this).val();

        districtObject.html('&lt;option value=""&gt;เลือกตำบล&lt;/option&gt;');
        
        $.get('get_district.php?amphure_id=' + amphureId, function(data){
            var result = JSON.parse(data);
            $.each(result, function(index, item){
                districtObject.append(
                    $('&lt;option&gt;&lt;/option&gt;').val(item.id).html(item.name_th)
                );
            });
        });
    });
});</pre><p><strong>อธิบาย Code</strong><br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3195" src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-05.png" alt="" width="320" height="61" srcset="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-05.png 320w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-05-300x57.png 300w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-05-80x15.png 80w" sizes="auto, (max-width: 320px) 100vw, 320px" /><br />
<span style="text-decoration: underline;">บรรทัด 2-4</span> สร้างตัวแปรเพื่อเก็บ Element Selector ของ <strong>Dropdown จังหวัด, อำเภอ, ตำบล</strong></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3196" src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-06.png" alt="" width="555" height="321" srcset="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-06.png 555w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-06-300x174.png 300w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-06-80x46.png 80w" sizes="auto, (max-width: 555px) 100vw, 555px" /><br />
<span style="text-decoration: underline;">บรรทัด 7-21</span><br />
&#8211; เมื่อมีการเปลี่ยนแปลง <strong>Dropdown (เลือกจังหวัด)</strong> จะทำการ Clear ข้อมูล อำเภอ, ตำบล ตามบรรทัด 10-11<br />
&#8211; หลังจากนั้น จะทำการใช้ GET ของ jQuery ยิง Request ไปที่ <span style="color: #000080;">get_amphure.php</span> เพื่อดึงข้อมูลอำเภอมา โดยใส่ข้อมูลตัวแปร จังหวัดที่เลือกไปด้วยเพื่อดึงอำเภอเฉพาะจังหวัดที่เลือกเท่านั้น ตัวแปรชื่อ provicne_id ตามบรรทัดที่ 13<br />
&#8211; หลังจากยิง Request ไปที่ server แล้ว Server จะตอบกลับมาเป็นข้อมูลรายการของอำเภอจากจังหวัดที่เลือกใน Dropdown รูปแบบของการตอบกลับเป็น <strong>JSON</strong> ดังนั้นเราต้องทำการ parse data ก่อน ตามบรรทัด 14<br />
&#8211; เมื่อ parse data แล้วข้อมูลจะอยู่ในรูปแบบนี้</p><pre class="crayon-plain-tag">[
  {
    "id":1,
    "name_th": "ห้างฉัตร",
    "province_id": 324
  },
  {},
  ...
]</pre><p>&#8211; ให้เราใช้คำสั่ง <strong>jQuery Append</strong> ข้อมูลลงใน HTML โดยข้อมูลมาเป็น Array ให้ทำการวนข้อมูล โดยใส่ value คือ item.id และ name คือ item.name_th ตามบรรทัด 17&nbsp;</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3197" src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-07.png" alt="" width="537" height="296" srcset="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-07.png 537w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-07-300x165.png 300w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-07-80x44.png 80w" sizes="auto, (max-width: 537px) 100vw, 537px" /><br />
<span style="text-decoration: underline;">บรรทัด 24-37</span> เป็นการดึงข้อมูลตำบลของอำเภอที่เราเลือกมาแสดงบน HTML โดย Event จะทำงานเมื่อคลิกเปลี่ยนอำเภอใน Dropdown การทำงานจะคล้ายกับ การเปลี่ยนจังหวัด แต่แตกต่างที่ ไฟล์ที่ดึงข้อมูลต้องเปลี่ยนเป็น <span style="color: #000080;">get_district.php</span> และ ตัวแปรที่ส่งไปเป็นตัวแปรของอำเภอที่ถูกเลือก และสุดท้าย ตอนได้รับข้อมูลจาก Server มาก็นำมาวนใส่ ใน Dropdown ตำบล ก็เป็นอันจบการทำงาน</p>
<p>7. สร้างไฟล์ <span style="color: #000080;">get_amphure.php</span> เพื่อดึงข้อมูล อำเภอ จากจังหวัดที่เลือกมา ดู code ตัวอย่างด้านล่าง</p><pre class="crayon-plain-tag">&lt;?php
include('connect.php');
$sql = "SELECT * FROM amphures WHERE province_id={$_GET['province_id']}";
$query = mysqli_query($conn, $sql);

$json = array();
while($result = mysqli_fetch_assoc($query)) {    
    array_push($json, $result);
}
echo json_encode($json);</pre><p><strong>อธิบาย Code</strong><br />
เมื่อ ไฟล์ script.js request ขอข้อมูลจาก server โดยเรียกใช้ไฟล์ <span style="color: #000080;">get_amphure.php</span> และส่งตัวแปร province_id มาด้วย เป็นตัวแปร ได้จากการเลือกจังหวัด<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-3198" src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-08.png" alt="" width="518" height="196" srcset="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-08.png 518w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-08-300x114.png 300w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-08-80x30.png 80w" sizes="auto, (max-width: 518px) 100vw, 518px" /><br />
<span style="text-decoration: underline;">บรรทัด 1</span> เชื่อมต่อฐานข้อมูล<br />
<span style="text-decoration: underline;">บรรทัด 2-3</span> ดึงข้อมูลเอารายการอำเภอ จากจังหวัดที่เลือก โดย where province_id<br />
<span style="text-decoration: underline;">บรรทัด 6-9</span> ดึงข้อมูลแล้วทำการ วนเก็บข้อมูลอำเภอ ไว้ใน $json ในรูปแบบ Array<br />
<span style="text-decoration: underline;">บรรทัด 10</span> ทำการแปลงข้อมูล Array ไปเป็น JSON เพิ่มเตรียมส่งกลับไปให้กลับ Client ที่เรียกใช้(<span style="color: #000080;">script.js</span>)</p>
<p>8. สร้างไฟล์ get_district.php เพื่อดึงข้อมูล ตำบล จากอำเภอที่เลือกมา ดู code ตัวอย่างด้านล่าง</p><pre class="crayon-plain-tag">&lt;?php
include('connect.php');
$sql = "SELECT * FROM districts WHERE amphure_id={$_GET['amphure_id']}";
$query = mysqli_query($conn, $sql);

$json = array();
while($result = mysqli_fetch_assoc($query)) {    
    array_push($json, $result);
}
echo json_encode($json);</pre><p><strong>อธิบาย Code</strong><br />
การทำงานคล้ายกับไฟล์ get_amphure.php แตกต่างกันในเรื่องของการดึงข้อมูลคนละตารางเท่านั้น และตัวแปรที่ใช้การ where เป็น amphure_id</p>
<h3>ผลลัพท์</h3>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-3200" src="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-f.png" alt="" width="1135" height="610" srcset="https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-f.png 1135w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-f-300x161.png 300w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-f-1024x550.png 1024w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-f-768x413.png 768w, https://www.itoffside.com/wp-content/uploads/2020/01/multiple-dropdown-f-80x43.png 80w" sizes="auto, (max-width: 1135px) 100vw, 1135px" /></p>
<h3>ดาวน์โหลด</h3>
<p>สามารถดาวน์โหลด Code เต็มๆ หรือ clone code มาดูได้ที่ลิงค์ <a href="https://github.com/ipball/multiple_dropdown" target="_blank" rel="noopener noreferrer">https://github.com/ipball/multiple_dropdown</a></p>
<h3>สรุป</h3>
<p>สำหรับบทความนี้ ผู้เขียนคิดว่า หลายๆคนน่าจะเข้าใจหลักการทำงาน ของ Client &#8211; Server มองเห็นภาพการทำงานชัดเจนในทำงานของโปรแกรม ซึ่งในปี 2020 อาจจะหลายๆคนบอกว่า ยังใช้ jQuery อยู่อีกเหรอ ยังใช้ PHP อยู่อีกเหรอ?</p>
<p>จริงๆแล้วไม่ว่าเราจะใช้ภาษาอะไรหรือเทคโนโลยีอะไรก็ตามแต่ เราจงหาสิ่งที่เราถนัดและเหมาะสมกับงาน แต่ไม่ได้หมายความว่าจะให้ทุกคนจะต้องใช้ PHP ตลอด เราก็ควรศึกษาเรียนรู้ภาษา เทคโนโลยีใหม่ด้วย เช่นกัน เหมือนกับผู้เขียนที่ยังต้องเขียน Node.js, ExpressJS, MongoDB, Angular อยู่เลย เราเป็นนักพัฒนา เราก็ต้องศึกษาพัฒนาตัวเองอยู่สม่ำเสมอ</p><p>The post <a href="https://www.itoffside.com/dropdown-dynamic-3-level-with-ajax/">การทำ Multiple Dropdown จังหวัด, อำเภอ, ตำบล แบบ 3 ชั้น ด้วย Ajax + PHP + MySQL</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.itoffside.com/dropdown-dynamic-3-level-with-ajax/feed/</wfw:commentRss>
			<slash:comments>23</slash:comments>
		
		
			</item>
		<item>
		<title>ใช้ Datatables กับ Codeigniter แบบ Server-Side (Ajax)</title>
		<link>https://www.itoffside.com/use-datatables-with-codeigniter-server-side-ajax/</link>
					<comments>https://www.itoffside.com/use-datatables-with-codeigniter-server-side-ajax/#comments</comments>
		
		<dc:creator><![CDATA[Onmobile]]></dc:creator>
		<pubDate>Sat, 06 Jan 2018 18:26:12 +0000</pubDate>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Codeigniter]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[DataTables]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[MySQLi]]></category>
		<category><![CDATA[PHP Framework]]></category>
		<category><![CDATA[php workshop]]></category>
		<guid isPermaLink="false">https://www.itoffside.com/?p=2784</guid>

					<description><![CDATA[<p>สวัสดีครับคุณผู้อ่านทุกท่าน เมื่อคราวที่แล้ว ผมได้มีการลงบทความ การใช้งาน Datatables แบบบ้านๆ โดยใช้ PHP ธรรมดาในการ ทำงาน ซึ่งทางผมเองคาดว่าผู้อ่าน จะได้รับประโยนช์จากบทความ ไม่มากก็น้อยครับ ดังนั้นในบทความนี้ ผมก็เลยมาสอนการใช้ Datatables กับ Codeigniter ว่าต้องทำอย่างไรบ้าง เริ่มจากตรงไหนบ้าง ซึ่...</p>
<p>The post <a href="https://www.itoffside.com/use-datatables-with-codeigniter-server-side-ajax/">ใช้ Datatables กับ Codeigniter แบบ Server-Side (Ajax)</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></description>
										<content:encoded><![CDATA[<p><em>สวัสดีครับคุณผู้อ่านทุกท่าน</em> เมื่อคราวที่แล้ว ผมได้มีการลงบทความ การใช้งาน Datatables แบบบ้านๆ โดยใช้ <strong>PHP</strong> ธรรมดาในการ ทำงาน ซึ่งทางผมเองคาดว่าผู้อ่าน จะได้รับประโยนช์จากบทความ ไม่มากก็น้อยครับ</p>
<p>ดังนั้นในบทความนี้ ผมก็เลยมาสอนการใช้ <strong>Datatables</strong> กับ <strong>Codeigniter</strong> ว่าต้องทำอย่างไรบ้าง เริ่มจากตรงไหนบ้าง ซึ่งบทความนี้เหมาะกับคนที่เคยเขียน Codeigniter และเขียน <strong>javascript</strong> พอได้ ครับ<span id="more-2784"></span></p>
<p><span style="color: #ff00ff;">Demo</span><br />
<a href="http://sysapp.itoffside.com/datatables_ci/" target="_blank" rel="noopener">http://sysapp.itoffside.com/datatables_ci/</a></p>
<p><span style="color: #ff00ff;">Download</span><br />
<a href="https://github.com/ipball/datatables_ci/archive/master.zip" target="_blank" rel="noopener">https://github.com/ipball/datatables_ci/archive/master.zip<br />
</a></p>
<p><span style="color: #ff00ff;">Clone git</span><br />
<a href="https://github.com/ipball/datatables_ci.git" target="_blank" rel="noopener">https://github.com/ipball/datatables_ci.git</a></p>
<p><span style="color: #000080;"><strong>สิ่งที่ต้องเตรียม</strong></span><br />
1. ไฟล์ <a href="https://datatables.net/download" target="_blank" rel="noopener">plugins Datatables</a><br />
2. ไฟล์ <a href="https://jquery.com/download/" target="_blank" rel="noopener">jQuery</a><br />
3. <a href="http://getbootstrap.com/docs/3.3/" target="_blank" rel="noopener">Bootstrap framework</a><br />
4. <a href="https://www.codeigniter.com/" target="_blank" rel="noopener">Codeiniter framework</a><br />
5. <a href="https://raw.githubusercontent.com/ipball/datatables_ci/master/datatables.sql" target="_blank" rel="noopener">ฐานข้อมูล</a></p>
<p><em>เริ่มต้นกันเลยครับ</em></p>
<p>สร้างฐานข้อมูลชื่อ datatables แล้ว import ไฟล์ sql (ในข้อ 5)<br />
กำหนด application/config/config.php<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2810" src="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-10.jpg" alt="datatables-with-codeigniter-10" width="560" height="94" srcset="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-10.jpg 560w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-10-300x50.jpg 300w" sizes="auto, (max-width: 560px) 100vw, 560px" /></p>
<p>กำหนด application/config/database.php ให้ตรงตามค่าเซฟเวอร์<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2811" src="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-09.jpg" alt="datatables-with-codeigniter-09" width="481" height="422" srcset="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-09.jpg 481w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-09-300x263.jpg 300w" sizes="auto, (max-width: 481px) 100vw, 481px" /></p>
<p>ให้เราสร้างไฟล์ <strong>index.php</strong> ไว้ในไฟล์ <span style="color: #000080;">Application/view/</span><br />
จะได้เป็น <span style="color: #000080;">Application/view/index.php</span></p>
<p><em>ต่อมาให้เรา</em>ทำการ Include ไฟล์ jquery, bootstrap, dataTables ไว้ &lt;body&gt; นะครับ จากตัวอย่างไว้ ล่างสุดของ body<br />
โดยไฟล์ที่เพิ่มจะมีด้วยกัน 4 ไฟล์นะครับ ซึ่งมี jquery, bootstrap, datatables(2 ไฟล์)<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2798" src="https://www.itoffside.com/wp-content/uploads/2017/12/datatables-with-codeigniter-01.jpg" alt="datatables-with-codeigniter-01" width="963" height="278" srcset="https://www.itoffside.com/wp-content/uploads/2017/12/datatables-with-codeigniter-01.jpg 963w, https://www.itoffside.com/wp-content/uploads/2017/12/datatables-with-codeigniter-01-300x87.jpg 300w, https://www.itoffside.com/wp-content/uploads/2017/12/datatables-with-codeigniter-01-768x222.jpg 768w" sizes="auto, (max-width: 963px) 100vw, 963px" /></p>
<p>จากนั้น เพิ่ม css ไฟล์ไว้ใน &lt;header&gt; ตามรูปภาพด้านล่าง<br />
โดยมีด้วยกัน 2 ไฟล์คือ ไฟล์ bootstrap, datatables สำหรับ bootstrap<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2799" src="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-02.jpg" alt="datatables-with-codeigniter-02" width="941" height="192" srcset="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-02.jpg 941w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-02-300x61.jpg 300w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-02-768x157.jpg 768w" sizes="auto, (max-width: 941px) 100vw, 941px" /></p>
<p>เมื่อเรา include ไฟล์ js, css มาครบแล้วที่นี้เราก็พร้อมที่จะใช้งานแล้วครับ แต่เราต้องสร้างตาราง ไว้ใน &lt;body&gt; กันก่อน สร้างตารางตามรูปภาพด้านล่างนี้เลยนะครับ<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2800" src="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-03.jpg" alt="datatables-with-codeigniter-03" width="744" height="362" srcset="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-03.jpg 744w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-03-300x146.jpg 300w" sizes="auto, (max-width: 744px) 100vw, 744px" /></p>
<p>จากนี้จะเป็นการเรียกใช้งาน datatables โดยใช้ jQuery นะครับ โดยผมจะนำโค้ดไว้ล่างสุด ก่อน &lt;/body&gt; ลองดูตัวอย่างโค้ดครับ</p><pre class="crayon-plain-tag">&lt;script type="text/javascript"&gt;
    $(document).ready(function () {
      var table = $('#table_id').DataTable({
        pageLength: 10,
        serverSide: true,
        processing: true,
        ajax: {
          url:'&lt;?php echo site_url('customer/find_with_page'); ?&gt;'
        },
        'columns':[
        {
          data:'name',
          render: function(data, type, row){
            return '&lt;a href="&lt;?php echo site_url('customer/edit/'); ?&gt;'+row['id']+'"&gt;'+data+'&lt;/a&gt; ';
          }
        },
        {
          data:'phone'
        },
        {
          data:'fax'
        },
        {
          data:'state',
          render: function (data,type,row){
            var active = '&lt;span class="label label-success"&gt;ใช้งาน&lt;/span&gt;';
            var inactive = '&lt;span class="label label-danger"&gt;ยกเลิก&lt;/span&gt;';
            var status = (data==true) ? active : inactive;
            return status;
          }
        },
        {
          data:'id',
          render:function(data,type,row){
            var dataName = row['name'];
            var btnDelete = '&lt;a href="#" data-href="&lt;?php echo site_url('customer/delete'); ?&gt;" data-id="'+data+'" data-name="'+dataName+'" role="button" class="btn btn-danger btn-xs"&gt;&lt;i class="glyphicon glyphicon-trash"&gt;&lt;/i&gt; ลบ&lt;/a&gt;';
            return btnDelete;
          },
          orderable: false
        }
        ]
      });
    })
  &lt;/script&gt;</pre><p>ภาพตัวอย่าง<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2801" src="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-04.jpg" alt="datatables-with-codeigniter-04" width="921" height="636" srcset="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-04.jpg 921w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-04-300x207.jpg 300w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-04-768x530.jpg 768w" sizes="auto, (max-width: 921px) 100vw, 921px" /></p>
<p><strong><span style="color: #000080;">อธิบายโค้ดคำสั่ง</span></strong><br />
โดยสังเกตุ นะครับ ว่าโค้ด jQueryส่วนของ var table = <strong><em>$(&#8216;#table_id&#8217;)</em></strong> จะต้องตรงกับ &lt;table id=&#8221;<em><strong>table_id</strong></em>&#8220;&gt; เพื่อใช้ในการอ้างอิงการทำงาน<br />
&#8211; <span style="color: #000080;">pageLength</span> หมายถึงจำนวนต่อหน้าที่แสดงผล<br />
&#8211; <span style="color: #000080;">serverSide</span> หมายถึง เปิดใช้งานโหมด server-side<br />
&#8211; <span style="color: #000080;">processing</span> หมายถึง เวลามีการเปลี่ยนแปลงข้อมูลให้แสดง label loading ขึ้นมา<br />
&#8211;  <span style="color: #000080;">ajax</span> { url:&#8230;} หมายถึงการเรียกดึงข้อมูลจาก server ในตัวอย่างดึงข้อมูลจาก site_url(&#8216;customer/find_with_page&#8217;) นั้นหมายถึง ว่าเราต้องมี controller ชื่อ Customer และ Method ชื่อ find_with_page เดี่ยวเราจะมาสร้าง Controller กันต่อครับ<br />
&#8211; &#8216;<span style="color: #000080;">columns</span>&#8216;:[] หมายถึง คอลัมน์ใน datatables มีอะไรบ้างเราสามารถกำหนดได้ที่นี้โดยอ้างอิงจากฟิล์ดข้อมูลที่เราดึงมาจาก server ด้วยครับ เช่นเราดึงข้อมูลมีฟิล์ด id, name, age ดังนั้นจะได้ &#8216;columns&#8217;:[data:&#8217;name&#8217;, data:&#8217;age&#8217;] โดยโค้ดนี้จะแสดง คอลัมน์ name, age ครับ กรณีถ้าเราต้องการ style column เราก็ใช้คำสั่ง render เช่น</p><pre class="crayon-plain-tag">'columns':[
        {
          data:'name',
          render: function(data, type, row){
            return '&lt;a href="&lt;?php echo site_url('customer/edit/'); ?&gt;'+row['id']+'"&gt;'+data+'&lt;/a&gt; ';
          }
        },</pre><p>สำหรับ <span style="color: #000080;">view/index.php</span> ก็มีเพียงเท่านี้นะครับ ต่อไปเราจะมาเขียนโค้ดในส่วนของ Controller และ Model กันต่อ</p>
<p>สร้างไฟล์ <strong>Customer.php</strong> ในโฟล์เดอร์<span style="color: #000080;"> application/controllers</span><br />
จะได้เป็น <span style="color: #000080;">application/controllers/Customer.php</span><br />
แล้วให้นำโค้ดนี้ไปวางไว้ใน ไฟล์ครับ</p><pre class="crayon-plain-tag">&lt;?php
defined('BASEPATH') or exit('No direct script access allowed');

class Customer extends CI_Controller
{
    public function __construct()
    {
        parent::__construct();
        $this-&gt;load-&gt;model('Customer_model');
    }

    public function index()
    {
        $this-&gt;load-&gt;view('customer/index');
    }

    public function find_with_page()
    {
        $order_index = $this-&gt;input-&gt;get('order[0][column]');
        $param['page_size'] = $this-&gt;input-&gt;get('length');
        $param['start'] = $this-&gt;input-&gt;get('start');
        $param['draw'] = $this-&gt;input-&gt;get('draw');
        $param['keyword'] = trim($this-&gt;input-&gt;get('search[value]'));
        $param['column'] = $this-&gt;input-&gt;get("columns[{$order_index}][data]");
        $param['dir'] = $this-&gt;input-&gt;get('order[0][dir]');

        $results = $this-&gt;Customer_model-&gt;find_with_page($param);

        $data['draw'] = $param['draw'];
        $data['recordsTotal'] = $results['count'];
        $data['recordsFiltered'] = $results['count_condition'];
        $data['data'] = $results['data'];
        $data['error'] = $results['error_message'];

        $this-&gt;output-&gt;set_content_type('application/json')-&gt;set_output(json_encode($data));
    }
}</pre><p><span style="color: #000080;"><strong>อธิบายโค้ด</strong></span><br />
Method <strong>find_with_page</strong><br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2803" src="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-05.jpg" alt="datatables-with-codeigniter-05" width="678" height="237" srcset="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-05.jpg 678w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-05-300x105.jpg 300w" sizes="auto, (max-width: 678px) 100vw, 678px" /></p>
<p><em>จากรูปภาพด้านบน</em> ตัวแปรอาเรย์ $param รับค่าจาก datatables มา แล้วเรานำค่านี้ส่งไปยัง model เพื่อ query ข้อมูลตามเงื่อนไขของ datatables เช่น ต้องการแสดงหน้า 2 หรือต้องการ sort ตารางนะครับ</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-2805" src="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-06-1.jpg" alt="datatables-with-codeigniter-06" width="854" height="244" srcset="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-06-1.jpg 854w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-06-1-300x86.jpg 300w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-06-1-768x219.jpg 768w" sizes="auto, (max-width: 854px) 100vw, 854px" /></p>
<p><em>จากรูปภาพด้านบน</em> บรรทัดที่ 27 เราใช้ model ในการ get ค่าจากฐานข้อมูลมาแล้วไว้ใน $results แล้ว ก็ส่งตอบกลับไปที่ datatables ในแบบ JSON ครับโดยจำเป็นต้องส่งไปคือข้อมูล<br />
&#8211; <span style="color: #000080;">draw</span><br />
&#8211; <span style="color: #000080;">recordsTotal</span> หมายถึงจำนวนทั้งหมดของข้อมูล<br />
&#8211; <span style="color: #000080;">recordsFiltered</span> หมายถึงจำนวนทั้งหมดของข้อมูลที่ กรองมาแล้ว<br />
&#8211; <span style="color: #000080;">data</span> หมายถึงข้อมูล เช่น name, email, phone<br />
&#8211; <span style="color: #000080;">error</span> หมายถึง error ข้อผิดพลาดจากการเรียกข้อมูล ถ้าไม่มีให้ใส่เป็นค่าว่าง</p>
<p>สำหรับ Controller มีเพียงเท่านี้ครับ แล้วเรามาเขียนส่วนของ Model ว่าทำอย่างไรถึงจะโยนข้อมูลในรูปแบบนี้มาให้ Controller</p>
<p>สำหรับ Model ให้เราสร้างไฟล์ <strong>Customer_model.php</strong> ไว้ในโฟล์เดอร์ <span style="color: #000080;">application/models</span><br />
ได้เป็น <span style="color: #000080;">application/models/Customer_model.php</span><br />
จากนั้นให้เรานำโค้ดนี้ไปใส่ในไฟล์</p><pre class="crayon-plain-tag">&lt;?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Customer_model extends CI_Model {
	public function __construct(){
		parent::__construct();
	}

	public function find_with_page($param){
		$keyword = $param['keyword'];
		$this-&gt;db-&gt;select('*');

		$condition = "1=1";
		if(!empty($keyword)){
			$condition .= " and (name like '%{$keyword}%' or phone like '%{$keyword}%')";
		}

		$this-&gt;db-&gt;where($condition);
		$this-&gt;db-&gt;limit($param['page_size'], $param['start']);
		$this-&gt;db-&gt;order_by($param['column'], $param['dir']);

		$query = $this-&gt;db-&gt;get('customer');
		$data = [];
		if($query-&gt;num_rows() &gt; 0){
			foreach($query-&gt;result() as $row){
				$data[] = $row;
			}
		}

		$count_condition = $this-&gt;db-&gt;from('customer')-&gt;where($condition)-&gt;count_all_results();
		$count = $this-&gt;db-&gt;from('customer')-&gt;count_all_results();
		$result = array('count'=&gt;$count,'count_condition'=&gt;$count_condition,'data'=&gt;$data,'error_message'=&gt;'');
		return $result;
	}
}</pre><p><span style="color: #000080;"><strong>อธิบายโค้ด</strong></span><br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2807" src="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-07.jpg" alt="datatables-with-codeigniter-07" width="954" height="504" srcset="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-07.jpg 954w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-07-300x158.jpg 300w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-07-768x406.jpg 768w" sizes="auto, (max-width: 954px) 100vw, 954px" /></p>
<p><em>จากรูปภาพด้านบน</em><br />
<strong>บรรทัด 9 &#8211; 27</strong> เป็นการ get ข้อมูลจากฐานข้อมูลโดยมีเงื่อนไขต่างๆที่รับตัวแปรมาจาก controller ครับ<br />
<strong>บรรทัดที่ 29</strong> คือ จำนวนทั้งหมดของข้อมูลแบบที่กรองข้อมูลมาแล้ว<br />
<strong>บรรทัดที่ 30</strong> คือ จำนวนข้อมูลทั้งหมด<br />
<strong>บรรทัดที่ 31</strong> คือ $result คืนค่าข้อมูลแบบ array มาโดยมี count, count_condition, data ,error_message</p>
<p>เสร็จแล้วครับ ผลลัพท์ได้เป็นดังนี้<br />
<img loading="lazy" decoding="async" class="alignnone size-large wp-image-2808" src="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-08-1024x520.jpg" alt="datatables-with-codeigniter-08" width="660" height="335" srcset="https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-08-1024x520.jpg 1024w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-08-300x152.jpg 300w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-08-768x390.jpg 768w, https://www.itoffside.com/wp-content/uploads/2018/01/datatables-with-codeigniter-08.jpg 1185w" sizes="auto, (max-width: 660px) 100vw, 660px" /></p>
<p>เราสามารถ sort column ได้ ค้นหาชื่อลูกค้าได้ สามารถกำหนด style ใน column ได้ สามารถกำหนดว่าจะแสดงกี่แถวในหนึ่งหน้าได้ ซึ่งผมว่า datatables เหมาะนำไปใช้งานเกือบทุกๆงาน ครับ<br />
จบแล้วครับสำหรับการใช้ <strong>dataTables</strong> กับ <strong>Codeigniter</strong> หากใครมีคำถามข้อสงสัยเพิ่มเติมสามารถเขียนความเห็นด้านล่างไว้เลยนะครับ</p><p>The post <a href="https://www.itoffside.com/use-datatables-with-codeigniter-server-side-ajax/">ใช้ Datatables กับ Codeigniter แบบ Server-Side (Ajax)</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.itoffside.com/use-datatables-with-codeigniter-server-side-ajax/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>เขียน PHP ด้วยการค้นหาข้อมูล MySQL โดยใช้เทคนิค Ajax</title>
		<link>https://www.itoffside.com/php-search-mysql-by-ajax/</link>
					<comments>https://www.itoffside.com/php-search-mysql-by-ajax/#comments</comments>
		
		<dc:creator><![CDATA[Onmobile]]></dc:creator>
		<pubDate>Wed, 01 Apr 2015 17:43:57 +0000</pubDate>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php workshop]]></category>
		<category><![CDATA[php5]]></category>
		<guid isPermaLink="false">https://www.itoffside.com/?p=2458</guid>

					<description><![CDATA[<p>บทความนี้แนะนำเกี่ยวกับการค้นหาข้อมูล MySQL แล้วดึงข้อมูลออกมาโชว์ไม่ต้อง Refresh โดยใช้เทคนิค AJAX ในการทำงาน โดยตัวอย่าง source code เป็นตัวอย่างแบบง่ายๆ สามารถเข้าใจได้ไม่ยาก และนำไปประยุกต์ใช้ได้ทันที demo ทดสอบคลิกที่นี้ ดาวน์โหลดไฟล์ทั้งหมด ที่นี้ 1. สร้างตารางและ import ข้อมูล [crayon-69c46e9...</p>
<p>The post <a href="https://www.itoffside.com/php-search-mysql-by-ajax/">เขียน PHP ด้วยการค้นหาข้อมูล MySQL โดยใช้เทคนิค Ajax</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>บทความนี้แนะนำเกี่ยวกับการค้นหาข้อมูล MySQL แล้วดึงข้อมูลออกมาโชว์ไม่ต้อง Refresh โดยใช้เทคนิค AJAX ในการทำงาน โดยตัวอย่าง source code เป็นตัวอย่างแบบง่ายๆ สามารถเข้าใจได้ไม่ยาก และนำไปประยุกต์ใช้ได้ทันที<span id="more-2458"></span></p>
<p><a href="http://sysapp.itoffside.com/databind/" target="_blank">demo ทดสอบคลิกที่นี้</a></p>
<p><a href="http://www.mediafire.com/download/xrvegxmv5e7jq5j/databind.rar" target="_blank">ดาวน์โหลดไฟล์ทั้งหมด ที่นี้</a></p>
<p>1. สร้างตารางและ import ข้อมูล</p><pre class="crayon-plain-tag">CREATE TABLE IF NOT EXISTS `items` (
`id` int(11) NOT NULL,
  `codename` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `itemname` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `detail` text COLLATE utf8_unicode_ci NOT NULL,
  `unit` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `price` decimal(10,2) NOT NULL,
  `img` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'noimage.jpg',
  `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  `created_by` int(11) NOT NULL,
  `modified_by` int(11) NOT NULL,
  `status` tinyint(1) NOT NULL DEFAULT '1',
  `item_type_id` int(11) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



INSERT INTO `items` (`id`, `codename`, `itemname`, `detail`, `unit`, `price`, `img`, `created`, `modified`, `created_by`, `modified_by`, `status`, `item_type_id`) VALUES
(2, 'CM00002', 'iPhone 6 Plus', '', 'เครื่อง', '25000.00', 'ecimage.jpg', '2015-03-30 18:38:43', '2015-03-30 18:38:43', 1, 1, 1, 6),
(3, 'CM00003', 'Macbook Pro mini', '', 'เครื่อง', '45000.00', 'ecimage.jpg', '2015-03-30 18:39:53', '2015-03-30 18:39:53', 1, 1, 1, 1),
(4, 'CM00004', 'Macbook Pro 4', '', 'เครื่อง', '60400.00', 'ecimage.jpg', '2015-03-30 18:40:33', '2015-03-30 18:40:33', 1, 1, 1, 1),
(5, 'CM00005', 'กระดาษ A4', '', 'รีม', '120.00', 'ecimage.jpg', '2015-03-30 18:41:14', '2015-03-30 18:41:14', 1, 1, 1, 2),
(6, 'CM00006', 'ปากกา', '', 'แท่ง', '5.00', 'ecimage.jpg', '2015-03-30 18:41:47', '2015-03-30 18:41:47', 1, 1, 1, 2),
(7, 'CM00007', 'ดินสอ', '', 'แท่ง', '1.00', 'ecimage.jpg', '2015-03-30 18:42:28', '2015-03-30 18:42:28', 1, 1, 1, 2),
(8, 'CM00008', 'ยางลบ', '', 'ก้อน', '2.00', 'ecimage.jpg', '2015-03-30 18:43:04', '2015-03-30 18:43:04', 1, 1, 1, 2),
(9, 'CM00009', 'Epson T320 Printer Laser', '', 'เครื่อง', '2300.00', 'ecimage.jpg', '2015-03-30 18:45:48', '2015-03-30 18:45:48', 1, 1, 1, 1),
(10, 'CM00001', 'Lenovo ThinkPad E203', '', 'เครื่อง', '21000.00', 'ecimage.jpg', '2015-03-30 18:47:38', '2015-03-30 18:47:38', 1, 1, 1, 1),
(11, 'CM00010', 'Microsoft Lumia 1043', '', 'เครื่อง', '23000.00', 'ecimage.jpg', '2015-03-30 18:49:22', '2015-03-30 18:49:22', 1, 1, 1, 6);

ALTER TABLE `items`
 ADD PRIMARY KEY (`id`);
ALTER TABLE `items`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=12;</pre><p>2. สร้างไฟล์ connect.php แล้วนำ code ด้านล่างนี้ใส่ลงไป</p><pre class="crayon-plain-tag">&lt;?php
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'equipment';

mysql_connect($host, $user, $password);
mysql_select_db($database);
mysql_query("SET NAMES UTF8");</pre><p>3. สร้างไฟล์ index.php แล้วนำ code? ด้านล่างใส่</p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
&lt;?php
include 'connect.php';
?&gt;
&lt;html lang="en"&gt;
 &lt;head&gt;
 &lt;meta charset="UTF-8"&gt;
 &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
 &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
 &lt;title&gt;ค้นหาข้อมูล : itoffside.com&lt;/title&gt;
 &lt;link href="css/bootstrap.min.css" rel="stylesheet"&gt;
 &lt;link href="css/bootstrap-theme.min.css" rel="stylesheet"&gt;
 &lt;style&gt;
 body{
 margin-top: 20px;
 }
 .loading{
 background-image: url("ajax-loader.gif");
 background-repeat: no-repeat;
 display: none;
 height: 100px;
 width: 100px;
 }
 &lt;/style&gt;
 &lt;/head&gt;
 &lt;body&gt;
 &lt;div class="container"&gt;
 &lt;div class="row"&gt;
 &lt;div class="col-md-12"&gt;
 &lt;form class="form-inline" name="searchform" id="searchform"&gt;
 &lt;div class="form-group"&gt;
 &lt;label for="textsearch" &gt;ชื่อสินค้า&lt;/label&gt;
 &lt;input type="text" name="itemname" id="itemname" class="form-control" placeholder="ข้อความ คำค้นหา!" autocomplete="off"&gt;
 &lt;/div&gt;
 &lt;button type="button" class="btn btn-primary" id="btnSearch"&gt;
 &lt;span class="glyphicon glyphicon-search"&gt;&lt;/span&gt;
 ค้นหา
 &lt;/button&gt;
 &lt;/form&gt;
 &lt;/div&gt;
 &lt;/div&gt;
 &lt;div class="loading"&gt;&lt;/div&gt;
 &lt;div class="row" id="list-data" style="margin-top: 10px;"&gt;

 &lt;/div&gt;
 &lt;/div&gt;
 &lt;script type="text/javascript" src="jquery-1.11.2.min.js"&gt;&lt;/script&gt;
 &lt;script type="text/javascript"&gt;
 $(function () {
 $("#btnSearch").click(function () {
 $.ajax({
 url: "search.php",
 type: "post",
 data: {itemname: $("#itemname").val()},
 beforeSend: function () {
 $(".loading").show();
 },
 complete: function () {
 $(".loading").hide();
 },
 success: function (data) {
 $("#list-data").html(data);
 }
 });
 });
 $("#searchform").on("keyup keypress",function(e){
 var code = e.keycode || e.which;
 if(code==13){
 $("#btnSearch").click();
 return false;
 }
 });
 });
 &lt;/script&gt;
 &lt;/body&gt;
&lt;/html&gt;</pre><p>การทำงานของไฟล์ index.php คือแสดงหน้าจอการกรอกคำค้นหา เมื่อมีการใส่ข้อมูลค้นหา ระบบจะดึกข้อมูลจาก serach.php มาแสดงโดยใช้เทคนิคของ AJAX นั้นเอง ซึ่งเมื่อมีการคลิกปุ่มค้นหา javascript ทำงานโดยเรียกไฟล์ search.php ซึ่งไฟล์ search.php เป็นไฟล์ที่ดึงข้อมูลจากฐานข้อมูล เมื่อไฟล์ search.php ดึงข้อมูลมาเรียบร้อยแล้วจะส่งค่าข้อมูลกลับไปให้กับไฟล์ index.php โดยใช้ $.ajax</p>
<p>4. สร้างไฟล์ search.php</p><pre class="crayon-plain-tag">&lt;?php
include 'connect.php';
$sql = "select * from items where itemname like '%{$_POST['itemname']}%'";
$query = mysql_query($sql);
?&gt;
&lt;div class="col-md-12"&gt;
 &lt;table class="table table-bordered"&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ลำดับ&lt;/th&gt;
 &lt;th&gt;รหัสสินค้า&lt;/th&gt;
 &lt;th&gt;ชื่อสินค้า&lt;/th&gt;
 &lt;th&gt;ราคาสินค้า&lt;/th&gt;
 &lt;th&gt;หน่วยนับ&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;?php $i=1; while ($result = mysql_fetch_assoc($query)) { ?&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;?php echo $i;?&gt;&lt;/td&gt;
 &lt;td&gt;&lt;?php echo $result['codename'];?&gt;&lt;/td&gt;
 &lt;td&gt;&lt;?php echo $result['itemname'];?&gt;&lt;/td&gt;
 &lt;td&gt;&lt;?php echo number_format($result['price']);?&gt;&lt;/td&gt;
 &lt;td&gt;&lt;?php echo $result['unit'];?&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;?php $i++; } ?&gt;
 &lt;/tbody&gt;
 &lt;/table&gt;
&lt;/div&gt;</pre><p>5. ผลลัพธ์<br />
<a href="https://www.itoffside.com/wp-content/uploads/2015/04/ajax-php.jpg"><img loading="lazy" decoding="async" class="alignnone wp-image-2464" src="https://www.itoffside.com/wp-content/uploads/2015/04/ajax-php-300x129.jpg" alt="ajax-php" width="600" height="258" srcset="https://www.itoffside.com/wp-content/uploads/2015/04/ajax-php-300x129.jpg 300w, https://www.itoffside.com/wp-content/uploads/2015/04/ajax-php-1024x441.jpg 1024w, https://www.itoffside.com/wp-content/uploads/2015/04/ajax-php.jpg 1189w" sizes="auto, (max-width: 600px) 100vw, 600px" /></a></p>
<p>จบแล้วสำหรับบทความนี้หากผู้อ่านมีคำถามสามารถเขียนคำถามไว้ใต้ Comment เลยครับ</p><p>The post <a href="https://www.itoffside.com/php-search-mysql-by-ajax/">เขียน PHP ด้วยการค้นหาข้อมูล MySQL โดยใช้เทคนิค Ajax</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.itoffside.com/php-search-mysql-by-ajax/feed/</wfw:commentRss>
			<slash:comments>32</slash:comments>
		
		
			</item>
		<item>
		<title>PHP Workshop ตรวจสอบอีเมล์ซ้ำแบบ Ajax</title>
		<link>https://www.itoffside.com/php-workshop-available-email-or-username-ajax/</link>
					<comments>https://www.itoffside.com/php-workshop-available-email-or-username-ajax/#comments</comments>
		
		<dc:creator><![CDATA[Onmobile]]></dc:creator>
		<pubDate>Tue, 15 Jul 2014 13:56:49 +0000</pubDate>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[sql]]></category>
		<guid isPermaLink="false">https://www.itoffside.com/?p=249</guid>

					<description><![CDATA[<p>บ่อยครั้งที่มีการสมัครสมาชิกในเว็บไซต์ต่างๆ คุณจะได้รับการแจ้งเสมอๆ ตอนที่คุณกรอกข้อมูล Username หรือ Email ที่ไปซ้ำกับคนอื่นที่มีอยู่แล้ว จึงทำให้เว็บไซต์ต่างๆมีการตรวจสอบข้อมูล Username หรือ Email ก่อนที่จะบันทึกข้อมูลลงไป ทำให้มั่นใจได้ว่าข้อมูล Username หรือ Email ไม่มีทางที่ซ้ำกันได้อย่างแน่นอน...</p>
<p>The post <a href="https://www.itoffside.com/php-workshop-available-email-or-username-ajax/">PHP Workshop ตรวจสอบอีเมล์ซ้ำแบบ Ajax</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>บ่อยครั้งที่มีการสมัครสมาชิกในเว็บไซต์ต่างๆ คุณจะได้รับการแจ้งเสมอๆ ตอนที่คุณกรอกข้อมูล <strong>Username</strong> หรือ <em><strong>Email</strong> </em>ที่ไปซ้ำกับคนอื่นที่มีอยู่แล้ว จึงทำให้เว็บไซต์ต่างๆมีการตรวจสอบข้อมูล Username หรือ Email ก่อนที่จะบันทึกข้อมูลลงไป ทำให้มั่นใจได้ว่าข้อมูล Username หรือ Email ไม่มีทางที่ซ้ำกันได้อย่างแน่นอน แล้วส่วนวิธีการตรวจสอบนั้นบางเว็บไซต์ใช้วิธีการผู้ใช้กรอกข้อมูลรายละเอียดต่างๆ ทั้งหมดใน Form แล้วกดปุ่ม Submit Form ถึงจะได้ตรวจสอบว่า Username หรือ Email ซ้ำกันหรือไม่ และในขณะที่เว็บไซต์บางเว็บไซต์เลือกใช้วิธีการตรวจสอบ Username หรือ Email ตอนผู้ใช้กรอก Username หรือ Email แล้ว Focus ไปที่อื่น โดยส่วนตัวของผมแล้วต้องการใช้วิธีที่ให้ผู้ใช้งานรู้ได้ทันทีหลังจากกรอก Username หรือ Email เสร็จ มากกว่าตอนที่กรอกรายละเอียดใน Form ทั้งหมดแล้วกด Submit Form ซึ่งเป็นวิธีที่เปลืองพลังงาน Server<span id="more-249"></span></p>
<p><strong>ขั้นตอนการทำงานของการตรวจสอบ Username หรือ Email (WorkShop)</strong><br />
1. หน้า Form สมัครสมาชิกเมื่อผู้ใช้กรอก Email ลงไปแล้วเปลี่ยนไปกรอก Name จังหวะนี้จะเข้าเงื้อนไข Lost Focus แล้วสั่งให้ทำการตรวจสอบทันที<br />
2. การตรวจสอบโดยใช้ <strong>Ajax</strong> โดยทางฝั่ง Client ร้องขอข้อมูลจาก Server จากไฟล์ <strong>check_email</strong>.php<br />
3. เมื่อ Server ถูกร้องขอข้อมูล ไฟล์ check_email.php ผมทำการเขียนโปรแกรม PHP ติดต่อฐานข้อมูลแล้วตรวจสอบว่า Email ที่ผู้ใช้กรอกในหน้า Form เมื่อโปรแกรมทำงานเสร็จก็ส่งค่าตอบกลับไปยัง Client ต่อ<br />
4. Client รับค่าข้อมูลแล้วทำการแจ้งเตือนกลับไปยังผู้ใช้งานหากข้อมูล Email ซ้ำ</p>
<p><strong><span style="text-decoration: underline;">สร้าง Workshop &#8211; Check email Avaliable กันเลย!</span></strong></p>
<p>1. สร้างไฟล์ index.php ในการทำฟอร์มสมัครสมาชิก<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2353" src="https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-01.jpg" alt="php-workshop-available-email-or-username-ajax" width="422" height="294" srcset="https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-01.jpg 422w, https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-01-300x209.jpg 300w" sizes="auto, (max-width: 422px) 100vw, 422px" /><br />
ให้นำ Code ด้านล่างไปใส่ในไฟล์ index.php</p><pre class="crayon-plain-tag">&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset="UTF-8"&gt;
        &lt;title&gt;itOffside.com - check email&lt;/title&gt;
        &lt;script type="text/javascript"&gt;
            $(document).ready(function() {
                $('#btnSubmit').click(function() {
                    var check = check_email();
                    check.success(function(data) {
                        if (data != 1){
                            $('#register').submit();
                            return false;
                        }
                    });
                    
                });
                $('#email').focusout(function() {
                    var check = check_email();
                    check.success(function(data) {
                        if (data == 1) {
                            $('.message').html('ชื่ออีเมล์นี้มีคนใช้แล้ว กรุณาเปลี่ยนชื่ออีเมล์ใหม่');
                        }
                    });
                });
            });
            function check_email() {
                return $.ajax({
                    type: 'POST',
                    data: {email: $('#email').val()},
                    url: 'check_email.php'
                });
            }
        &lt;/script&gt;
        &lt;style&gt;
            .message{
                font-size: 12px;
                color: red;
            }
        &lt;/style&gt;
    &lt;/head&gt;
    &lt;body style="padding-top: 50px;"&gt;
        &lt;h3 style="text-align:center;"&gt;สมัครสมาชิกกัน!&lt;/h3&gt;
        &lt;form name="register" id="register" method="POST" action="register.php"&gt;
            &lt;table border="0" width="700" cellpadding="5" style="margin: 0 auto;"&gt;
                &lt;tr&gt;
                    &lt;td style="text-align: right; width: 200px;"&gt;E-Mail&lt;/td&gt;
                    &lt;td&gt;
                        &lt;input type="text" id="email" name="email" value=""&gt;
                        &lt;span class="message"&gt;&lt;/span&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;                
                &lt;tr&gt;
                    &lt;td style="text-align: right;"&gt;Name&lt;/td&gt;
                    &lt;td&gt;&lt;input type="text" id="Name" name="Name" value=""&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td style="text-align: right;"&gt;&amp;nbsp;&lt;/td&gt;
                    &lt;td&gt;&lt;button type="button" id="btnSubmit"&gt;ตกลง&lt;/button&gt;&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/table&gt;
        &lt;/form&gt;     
    &lt;/body&gt;
&lt;/html&gt;</pre><p>&nbsp;</p>
<p>2. สร้างฐานข้อมูลชื่อ itoffsideapp หลังจากนั้นทำการสร้างตารางข้อมูล สามารถสร้างโดยใช้ Script SQL ด้านล่างนี้ได้เลย</p><pre class="crayon-plain-tag">SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


CREATE TABLE IF NOT EXISTS `member` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
  `email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;

--
-- Dumping data for table `member`
--

INSERT INTO `member` (`id`, `name`, `email`) VALUES
(1, 'tawatsak', 'tawatsak@itoffside.com'),
(2, 'wishada', 'wishada@itoffside.com'),
(3, 'somchai', 'somchai@itoffside.com');</pre><p>&nbsp;</p>
<p>3. include ไฟล์ jquery ในไฟล์ index.php ส่วนของ &lt;head&gt; และไฟล์ jquery สามารถดาวน์โหลดได้ที่เว็บหลัก ซึ่งตอนนี้เวอร์ชั่น 1.11.1 (<a title="Jquery Download" href="http://code.jquery.com/jquery-1.11.1.min.js" target="_blank">ดาวน์โหลดไฟล์</a>)</p><pre class="crayon-plain-tag">&lt;script src="jquery-1.11.1.min.js" type="text/javascript"&gt;&lt;/script&gt;</pre><p>&nbsp;</p>
<p>4. สร้างไฟล์ check_email.php โดยนำ Code ด้านล่างไปวาง</p><pre class="crayon-plain-tag">&lt;?php
/*
 * connection database
 */
$Connect = mysql_connect('localhost', 'root', '') or die('Error connecting to MySQL');
mysql_select_db('itoffsideapp', $Connect) or die('Database sysapp does not exist!');
mysql_query('SET NAMES UTF8');

$email = isset($_POST['email']) ? trim($_POST['email']) : "";
$Query = mysql_query("SELECT * FROM member WHERE email='{$email}'");
$Rows = mysql_num_rows($Query);
if($Rows == 1){
    echo "1";
}
?&gt;</pre><p>&nbsp;</p>
<p>5. สร้างไฟล์ register.php โดยนำ Code ด้านล่างไปวาง</p><pre class="crayon-plain-tag">&lt;h3&gt;Success!&lt;/h3&gt;</pre><p>&nbsp;</p>
<p>หลังจากที่เราสร้างไฟล์เสร็จหมดแล้ว ลองทดสอบกรอกชื่ออีเมล์ tawatsak@itoffside.com (Email นี้มีอยู่ในฐานข้อมูล) หลังจากกรอกเสร็จก็คลิกไปที่ช่อง Name เพื่อกรอกชื่อต่อ แล้วหน้าเว็บไซต์จะแจ้งว่า มีคนใช้อีเมล์แล้ว ตามตัวอย่างรูปภาพด้านล่าง<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2354" src="https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-02.jpg" alt="php-workshop-available-email-or-username-ajax" width="605" height="271" srcset="https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-02.jpg 605w, https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-02-300x134.jpg 300w" sizes="auto, (max-width: 605px) 100vw, 605px" /></p>
<p>เราลองมาดูฐานข้อมูล ซึ่งมีชื่อ tawatsak@itoffside.com จริงๆ<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2355" src="https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-03.jpg" alt="php-workshop-available-email-or-username-ajax" width="457" height="118" srcset="https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-03.jpg 457w, https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-03-300x77.jpg 300w" sizes="auto, (max-width: 457px) 100vw, 457px" /></p>
<p>ที่นี้เราลองเปลี่ยน Email ที่ไม่มีอยู่ในฐานข้อมูลก็จะสามารถบันทึกข้อมูลได้ (ในตัวอย่างบทความนี้ไม่ได้มีการบันทึกจริงๆ เป็นเพียงการทำขึ้นมาเสมือนเท่านั้น)<br />
<img loading="lazy" decoding="async" class="alignnone size-full wp-image-2356" src="https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-04.jpg" alt="php-workshop-available-email-or-username-ajax" width="379" height="180" srcset="https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-04.jpg 379w, https://www.itoffside.com/wp-content/uploads/2014/07/php-workshop-available-email-or-username-ajax-04-300x142.jpg 300w" sizes="auto, (max-width: 379px) 100vw, 379px" /></p>
<p>สำหรับบทความนี้เป็นเพียง Workshop เล็กๆ เท่านั้น หากมีข้อสงสัยหรือปัญหา สามารถสอบถามได้ที่ comment ด้านล่างได้เลยครับ</p><p>The post <a href="https://www.itoffside.com/php-workshop-available-email-or-username-ajax/">PHP Workshop ตรวจสอบอีเมล์ซ้ำแบบ Ajax</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.itoffside.com/php-workshop-available-email-or-username-ajax/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
			</item>
		<item>
		<title>กำหนดรายการ Listbox ที่ 2 จากเงื่อนไขในการเลือก Listbox ที่ 1 ด้วย Ajax กับ jQuery</title>
		<link>https://www.itoffside.com/select-multi-listbox-ajax-jquery-php/</link>
					<comments>https://www.itoffside.com/select-multi-listbox-ajax-jquery-php/#comments</comments>
		
		<dc:creator><![CDATA[Onmobile]]></dc:creator>
		<pubDate>Sun, 13 Jul 2014 09:17:53 +0000</pubDate>
				<category><![CDATA[Ajax]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[listbox]]></category>
		<category><![CDATA[multi listbox]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[select listbox]]></category>
		<guid isPermaLink="false">https://www.itoffside.com/?p=235</guid>

					<description><![CDATA[<p>การกำหนดรายการ Listbox ที่ 2 โดยเงื้อนไขจากการเลือก Listbox ที่ 1 หรือ Dropdown สามารถนำไปประยุกต์ใช้งานได้อย่างหลากหลายเช่น การทำ Listbox (Dropdown) จังหวัด &#8211; อำเภอ โดยเมื่อมีการเลือก Listbox (Dropdown) จังหวัด แล้ว Listbox (Dropdown) อำเภอ จะแสดงรายการอำเภอเฉพาะจังหวัดที่เลือกเท่านั้น โดยบทค...</p>
<p>The post <a href="https://www.itoffside.com/select-multi-listbox-ajax-jquery-php/">กำหนดรายการ Listbox ที่ 2 จากเงื่อนไขในการเลือก Listbox ที่ 1 ด้วย Ajax กับ jQuery</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>การกำหนดรายการ <strong>Listbox</strong> ที่ 2 โดยเงื้อนไขจากการเลือก <strong>Listbox</strong> ที่ 1 หรือ <strong>Dropdown</strong> สามารถนำไปประยุกต์ใช้งานได้อย่างหลากหลายเช่น การทำ <strong>Listbox</strong> (<strong>Dropdown</strong>) จังหวัด &#8211; อำเภอ โดยเมื่อมีการเลือก Listbox (<strong>Dropdown</strong>) จังหวัด แล้ว Listbox (<strong>Dropdown</strong>) อำเภอ จะแสดงรายการอำเภอเฉพาะจังหวัดที่เลือกเท่านั้น โดยบทความนี้จะใช้ <strong>PHP</strong>, <strong>Javascript</strong> (<strong>jQuery</strong>) โดยใช้เทคโนโลยีของ <strong>Ajax</strong> เป็นตัวอย่าง และใช้ฐานข้อมูล <strong>MySQL</strong><span id="more-235"></span></p>
<h1>update บทความที่เกี่ยวข้องและปรับปรุงใหม่</h1>
<p><span style="font-size: 20px;"><span style="color: #ff00ff;">ตอนนี้มีบทความ การทำ listbox/dropdown แบบ 3 ชั้นแล้ว ละเอียดกว่าเดิม</span></span> <span style="text-decoration: underline; font-size: 20px;"><a href="https://www.itoffside.com/dropdown-dynamic-3-level-with-ajax/">คลิกเพื่อดู</a></span></p>
<p>เพื่อให้เห็นภาพลองดูตัวอย่าง <a title="ตัวอย่าง multi Dropdown/listbox" href="http://sysapp.itoffside.com/multi_listbox/show.php" target="_blank" rel="noopener noreferrer">ได้ที่นี้ Demo</a></p>
<p>1. นำ script sql ด้านล่างนี้ไป run ใน <em><span style="color: #000000;">phpmyadmin</span></em></p><pre class="crayon-plain-tag">SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

CREATE TABLE IF NOT EXISTS `ml_categories` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'รหัส',
  `categorie_name` varchar(100) COLLATE utf8_unicode_ci NOT NULL COMMENT 'ชื่อกลุ่ม',
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ;

--
-- Dumping data for table `ml_categories`
--

INSERT INTO `ml_categories` (`id`, `categorie_name`) VALUES
(1, 'เครื่องใช้ไฟฟ้า'),
(2, 'กีฬา'),
(3, 'อสังหาริมทรัพย์');

-- --------------------------------------------------------

--
-- Table structure for table `ml_products`
--

CREATE TABLE IF NOT EXISTS `ml_products` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `product_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `categories_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `categories_id` (`categories_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=16 ;

--
-- Dumping data for table `ml_products`
--

INSERT INTO `ml_products` (`id`, `product_name`, `categories_id`) VALUES
(1, 'โทรทัศน์', 1),
(2, 'โปรเจ็กเตอร์', 1),
(3, 'เครื่องเล่นและบันทึก DVD', 1),
(4, 'เครื่องเสียง', 1),
(5, 'อุปกรณ์ซักผ้า', 1),
(6, 'กอลฟ์', 2),
(7, 'เทนนิส', 2),
(8, 'บาสเก็ตบอล', 2),
(9, 'วิ่ง', 2),
(10, 'เบสบอล &amp; ซอฟท์บอล', 2),
(11, 'แบดมินตัน', 2),
(12, 'บ้าน', 3),
(13, 'ทาวน์เฮ้าส์', 3),
(14, 'คอนโดมีเนี่ยม', 3),
(15, 'ตึกแถว', 3);

--
-- Constraints for dumped tables
--

--
-- Constraints for table `ml_products`
--
ALTER TABLE `ml_products`
  ADD CONSTRAINT `ml_products_ibfk_1` FOREIGN KEY (`categories_id`) REFERENCES `ml_categories` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;</pre><p>ในฐานข้อมูลนี้มี 2 ตารางคือ ตารางหมวดหมู่(<strong>ml_categories</strong>) และตารางสินค้า(<strong>ml_products</strong>)</p>
<p>2. หลักจากที่ Run script ในการสร้างตาราง categorie และ product มาแล้วต่อไปจะเป็นการเขียนไฟล์ <span style="text-decoration: underline; color: #ff0000;">show.php</span> กันครับ ดู Code ด้านล่างได้เลยครับ</p><pre class="crayon-plain-tag">&lt;?php
/*
 * connection database
 */
$Connect = mysql_connect('localhost', 'root', '') or die('Error connecting to MySQL');
mysql_select_db('sysapp', $Connect) or die('Database sysapp does not exist!');
mysql_query('SET NAMES UTF8');

/*
 * select data
 */
$Query = mysql_query('SELECT * FROM ml_categories') or die('Error query #12');
?&gt;
&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset="UTF-8"&gt;
        &lt;title&gt;itOffside.com&lt;/title&gt;
        &lt;script src="jquery-1.11.1.min.js" type="text/javascript"&gt;&lt;/script&gt;
        &lt;script type="text/javascript"&gt;
            $(document).ready(function() {
                $('#categories').change(function() {
                    $.ajax({
                        type: 'POST',
                        data: {categories: $(this).val()},
                        url: 'select_product.php',
                        success: function(data) {
                            $('#products').html(data);
                        }
                    });
                    return false;
                });
            });
        &lt;/script&gt;
    &lt;/head&gt;
    &lt;body style="width: 100%;padding-top: 50px;"&gt;
        &lt;form name="multilistbox" method="POST"&gt;
            &lt;table border="0" width="500" cellpadding="5" style="margin: 0 auto;"&gt;
                &lt;tr&gt;
                    &lt;td style="text-align: right; width: 200px;"&gt;หมวดหมู่&lt;/td&gt;
                    &lt;td&gt;
                        &lt;select name="categories" id="categories"&gt;
                            &lt;option value=""&gt;เลือกข้อมูลหมวดหมู่&lt;/option&gt;
                            &lt;?php
                            while ($Result = mysql_fetch_array($Query)) {
                                ?&gt;
                                &lt;option value="&lt;?php echo $Result['id']; ?&gt;"&gt;
                                    &lt;?php echo $Result['categorie_name']; ?&gt;
                                &lt;/option&gt;
                                &lt;?php
                            }
                            ?&gt;
                        &lt;/select&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td style="text-align: right;"&gt;สินค้า&lt;/td&gt;
                    &lt;td&gt;
                        &lt;select name="products" id="products"&gt;&lt;/select&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;
            &lt;/table&gt;
        &lt;/form&gt;     
    &lt;/body&gt;
&lt;/html&gt;</pre><p>เพิ่มเติมไฟล์ jquery สามารถ <a title="jquery-1.11.1.min.js" href="http://sysapp.itoffside.com/multi_listbox/jquery-1.11.1.min.js" target="_blank" rel="noopener noreferrer">ดาวน์โหลดได้ที่นี้ jquery</a></p>
<p>จาก code ด้านบนผมอธิบายไล่ตามบรรทัดดังนี้ครับ<br />
<span style="color: #ff00ff;">บรรทัดที่ 5-7</span> : เป็นใช้ฟังก์ชั่นการเชื่อมต่อฐานข้อมูล MySQL พร้อมกำหนดอักขระ UTF8<br />
<span style="color: #ff00ff;">บรรทัดที่ 12</span> : ฟังก์ชั่น Query? SELECT ข้อมูลหมวดหมู่สินค้าหรือตาราง categories นั้นเอง<br />
<span style="color: #ff00ff;">บรรทัดที่ 19</span> : include ไฟล์ jquery เวอร์ชั่น 1.11.1<br />
<span style="color: #ff00ff;">บรรทัดที่ 20-34</span> : เป็นการเขียน jquery เพื่อร้องขอ(<strong><span style="text-decoration: underline;">Request</span></strong>)ข้อมูล <strong><span style="text-decoration: underline;">SERVER</span> </strong>ผ่าน <strong>AJAX</strong> โดยถ้ามีการเกิดเหตุการณ์(event) ของการเปลี่ยนแปลง <strong>Listbox</strong> หรือ Dropdown ของหมวดหมู่จะทำให้มีการส่งข้อมูล categorie_id แบบ POST? ไปยังไฟล์ select_product.php ซึ่งไฟล์ select_product.php นี้เองที่ทำหน้าในการ Select ข้อมูลสินค้า (products) ตามหมวดหมู่ แล้วตอบกลับ(<strong><span style="text-decoration: underline;">R</span>esponse</strong>)โดยการส่งข้อมูลที่ได้จากการ Select กลับไปยังไฟล์ <span style="color: #ff0000;">show.php</span><br />
<span style="color: #ff00ff;">บรรทัดที่ 37-63</span> : เป็นฟอร์ม Listbox หรือ <strong>Dropdown</strong><br />
สรุป ส่วนสำคัญของไฟล์นี้คือการ include ไฟล์ jquery การใช้งาน jquery ajax ให้ติดต่อไปยัง <span style="text-decoration: underline;"><strong>SERVER</strong> </span>และ การอ้างอิง Element ID ให้เชื่อมโยงกัน</p>
<p>&nbsp;</p>
<p>3. เขียนไฟล์ <span style="color: #ff0000;">select_product.php</span> ในการ Select ข้อมูลสินค้าตามการเลือก <strong>Listbox</strong> หรือ <strong>Dropdown</strong></p><pre class="crayon-plain-tag">&lt;?php

/*
 * connection database
 */
$Connect = mysql_connect('localhost', 'root', '') or die('Error connecting to MySQL');
mysql_select_db('sysapp', $Connect) or die('Database sysapp does not exist!');
mysql_query('SET NAMES UTF8');
/*
 * check POST
 */
$categorie_id = isset($_POST['categories']) ? $_POST['categories'] : "";
$Query = mysql_query("SELECT * FROM ml_products WHERE categories_id='{$categorie_id}'");
$Rows = mysql_num_rows($Query);
if ($Rows &gt; 0) {
    while ($Result = mysql_fetch_array($Query)) {
        echo "&lt;option value=\"" . $Result['id'] . "\"&gt;" . $Result['product_name'] . "&lt;/option&gt;";
    }
}else{
    echo "&lt;option value=\"\"&gt;ไม่มีสินค้าในหมวดหมู่ที่เลือก&lt;/option&gt;";
}</pre><p>อธิบาย Code ของไฟล์ <span style="color: #ff0000;">select_product.php</span><br />
บรรทัดที่ 12 : <span class="crayon-v">เช็คค่าตัวแปร <span class="crayon-v">$_POST[&#8216;categories&#8217;] ซึ่งตัวแปรที่ส่งมาจากไฟล์ show.php นั้นเองโดยตัวแปรเป็น TYPE POST โดยเก็บค่าไว้ในตัวแปร <span class="crayon-v">$categorie_id</span></span></span><br />
สรุป มีการ Select ข้อมูลจากตาราง ml_product โดยใช้เงื้อนไข categories_id=&#8217;<span class="crayon-v">$categorie_id</span>&#8216; หมายถึงดึงเฉพาะข้อมูลตามหมวดหมู่ที่เลือกในหน้า show.php นั้นเอง</p>
<p>ผลลัพธ์ที่ได้</p>
<figure id="attachment_243" aria-describedby="caption-attachment-243" style="width: 324px" class="wp-caption alignnone"><img loading="lazy" decoding="async" class="size-full wp-image-243" src="https://www.itoffside.com/wp-content/uploads/2014/07/select-multi-listbox-ajax-jquery-php-02.jpg" alt="กำหนดรายการ Listbox ที่ 2 จากเงื่อนไขในการเลือก Listbox ที่ 1 ด้วย Ajax กับ jQuery" width="324" height="187" srcset="https://www.itoffside.com/wp-content/uploads/2014/07/select-multi-listbox-ajax-jquery-php-02.jpg 324w, https://www.itoffside.com/wp-content/uploads/2014/07/select-multi-listbox-ajax-jquery-php-02-300x173.jpg 300w" sizes="auto, (max-width: 324px) 100vw, 324px" /><figcaption id="caption-attachment-243" class="wp-caption-text">รูปภาพก่อนเปลี่ยนหมวดหมู่</figcaption></figure>
<figure id="attachment_242" aria-describedby="caption-attachment-242" style="width: 335px" class="wp-caption alignnone"><a href="https://www.itoffside.com/wp-content/uploads/2014/07/select-multi-listbox-ajax-jquery-php-01.jpg"><img loading="lazy" decoding="async" class=" wp-image-242" src="https://www.itoffside.com/wp-content/uploads/2014/07/select-multi-listbox-ajax-jquery-php-01.jpg" alt="รูปภาพหลังเปลี่ยนหมวดหมู่" width="335" height="176" srcset="https://www.itoffside.com/wp-content/uploads/2014/07/select-multi-listbox-ajax-jquery-php-01.jpg 345w, https://www.itoffside.com/wp-content/uploads/2014/07/select-multi-listbox-ajax-jquery-php-01-300x157.jpg 300w" sizes="auto, (max-width: 335px) 100vw, 335px" /></a><figcaption id="caption-attachment-242" class="wp-caption-text">รูปภาพหลังเปลี่ยนหมวดหมู่</figcaption></figure>
<p>&nbsp;</p>
<p>สำหรับบทความนี้ก็มีเพียงเท่านี้ครับหากใครมีข้อสงสัยหรือปัญหา สอบถามได้ที่ comment ด้านล่างบทความได้เลยครับ</p><p>The post <a href="https://www.itoffside.com/select-multi-listbox-ajax-jquery-php/">กำหนดรายการ Listbox ที่ 2 จากเงื่อนไขในการเลือก Listbox ที่ 1 ด้วย Ajax กับ jQuery</a> first appeared on <a href="https://www.itoffside.com">itOffside.com | บทความการเขียนโปรแกรม เรื่องราวข้อมูลเทคโนโลยี</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.itoffside.com/select-multi-listbox-ajax-jquery-php/feed/</wfw:commentRss>
			<slash:comments>25</slash:comments>
		
		
			</item>
	</channel>
</rss>
