Wednesday, September 26, 2012

PHP การทำ Select(List/Menu) จังหวัด อำเภอ ตำบล รหัสไปรษณีย์ jQuery+Ajax+PHP

Select(List/Menu) จังหวัด, อำเภอ, ตำบล, รหัสไปรษณีย์ สำหรับบทความนี้จะเป็นการแสดงตัวอย่างการทำSelect(List/Menu) แบบเมื่อเลือกจังหวัดใดจังหวัดหนึ่งแล้ว Select ตัวต่อไปก็จะแสดงอำเภอที่อยู่ภายในจังหวัดนั้น เมื่อเลือกอำเภอแล้ว Select ตัวต่อไปก็จะแสดงตำบลที่อยู่ภายในอำเภอนั้น สุดท้ายเมื่อเลือกตำบลก็จะมีรหัสไปรษณีย์ให้เลือก โดยประยุกต์ใช้PHP+jQuery+Ajax ผมได้เขียนบมความนี่เพื่อเป็นแนวทางสำหรับผู้ที่สนใจ หากผิดพลาดประการใดก็ขออภัยไว้ ณ ที่นี้ด้วยครับมือใหม่หัดเขียนครับ

Screenshot

List

ในตัวอย่างนี้จะประกอบไปด้วย
index.php เป็นไฟล์หน้าหลัก
ajax.js เป็นไฟล์ที่รับส่งข้อมูลในการเลือก Select(List/Menu) 
getdata.php เป็นไฟล์ที่ใช้สำหรับดึงข้อมูลจาก Database
mysql2json.class.php เป็น Class ที่ใช้เปลี่ยน Mysql เป็น JSON
**ในตัวอย่างนี้ใช้ jQuery จาก http://code.jquery.com/ อาจจะมีปัญหาหากไม่ได้ใช้งาน Internet นะครับ
ส่วนไฟล์ Database ได้แนบมากับบทความแล้วสามารถ Download ได้ด้านล่าง


index.php

01.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
04.<head>
05.<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
06.<title>jquery use json data</title>
07.<script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script>
08.<script type="text/javascript" src="ajax.js" ></script>
09.</head>
10. 
11.<body onload="Add();">
12.<label for="Proviance">จังหวัด</label>
13.<select name="Proviance" id="Proviance">
14.</select>
15.<label for="ProID">รหัสจังหวัด</label>
16.<input type="text" name="ProID" id="ProID" />
17.<p>
18.<label for="District">อำเภอ</label>
19.<select name="District" id="District">
20.</select>
21.<label for="DisID">รหัสอำเภอ</label>
22.<input type="text" name="DisID" id="DisID" />
23.</P>
24.<p>
25.<label for="Subdistrict">ตำบล</label>
26.<select name="Subdistrict" id="Subdistrict">
27.</select>
28.<label for="SubID">รหัสตำบล</label>
29.<input type="text" name="SubID" id="SubID" />
30.</P>
31.<p>
32.<label for="Postcode">รหัสไปรษณีย์</label>
33.<select name="Postcode" id="Postcode">
34.</select>
35.<label for="PostID">รหัสไปรษณีย์</label>
36.<input type="text" name="PostID" id="PostID" />
37.</P>
38.</body>
39.</html>


ajax.js
01.// JavaScript Document
02.$(document).ready(function(){
03.// ส่วนของจังหวัดเมื่อมีการเปลี่ยนแปลง
04.$("#Proviance").change(function(){
05.$("#Subdistrict").empty();//ล้างข้อมูล
06.$("#Postcode").empty();//ล้างข้อมูล
07.$("#DisID").val("");//ล้างข้อมูล
08.$("#SubID").val("");//ล้างข้อมูล
09.$("#PostID").val("");//ล้างข้อมูล
10.$.ajax({
11.url: "getdata.php",//ที่อยู่ของไฟล์เป้าหมาย
12.global: false,
13.type: "GET",//รูปแบบข้อมูลที่จะส่ง
14.data: ({ID : $(this).val(),TYPE : "District"}), //ข้อมูลที่ส่ง  { ชื่อตัวแปร : ค่าตัวแปร }
15.dataType: "JSON"//รูปแบบข้อมูลที่ส่งกลับ xml,script,json,jsonp,text
16.async:false,
17.success: function(jd) { //แสดงข้อมูลเมื่อทำงานเสร็จ โดยใช้ each ของ jQuery
18.var opt="<option value=\"0\" selected=\"selected\">---เลือกอำเภอ---</option>";
19.$.each(jd, function(key, val){
20.opt +="<option value='"+ val["AMPHUR_ID"] +"'>"+val["AMPHUR_NAME"]+"</option>"
21.});
22.$("#District").html( opt );//เพิ่มค่าลงใน Select ของอำเภอ
23.}
24.});
25.$("#ProID").val($(this).val()); //กำหนดค่า ID ของจังหวัดที่เลือกให้กับ Textfield ของจังหวัด
26.});
27.// ส่วนของอำเภอเมื่อมีการเปลี่ยนแปลง
28.$("#District").change(function(){
29.$("#Subdistrict").empty();
30.$("#Postcode").empty();
31.$("#SubID").val("");
32.$("#PostID").val("");
33.$.ajax({
34.url: "getdata.php",
35.global: false,
36.type: "GET",
37.data: ({ID : $(this).val(),TYPE : "Subdistrict"}),
38.dataType: "JSON",
39.async:false,
40.success: function(jd) {
41.var opt="<option value=\"0\" selected=\"selected\">---เลือกตำบล---</option>";
42.$.each(jd, function(key, val){
43.opt +="<option value='"+ val["DISTRICT_ID"] +"'>"+val["DISTRICT_NAME"]+"</option>"
44.});
45.$("#Subdistrict").html( opt );
46.}
47.});
48.$("#DisID").val($(this).val());
49.});
50.// ส่วนของตำบลเมื่อมีการเปลี่ยนแปลง
51.$("#Subdistrict").change(function(){
52.$("#PostID").val("");
53.$.ajax({
54.url: "getdata.php",
55.type: "GET",
56.data: ({ID : $("#District").val(),TYPE : "Postcode"}),
57.dataType: "JSON",
58.success: function(jd) {
59.var opt="<option value=\"0\" selected=\"selected\">---เลือกรหัสไปรษณีย์---</option>";
60.$.each(jd, function(key, val){
61.opt +="<option value='"+ val["POST_CODE"] +"'>"+val["POST_CODE"]+"</option>"
62.});
63.$("#Postcode").html( opt );
64.}
65.});
66.$("#SubID").val($("#Subdistrict").val());
67.});
68.// ส่วนของรหัสไปรษณีย์เมื่อมีการเปลี่ยนแปลง
69.$("#Postcode").change(function(){
70.$("#PostID").val($(this).val());
71.});
72.});
73.//ส่วนของ function เพื่อเพิ่มข้อมูลจังหวัดเข้าไปก่อน
74.function Add(){
75.$.ajax({
76.url: "getdata.php",
77.global: false,
78.type: "GET",
79.data: ({TYPE : "Proviance"}),
80.dataType: "JSON",
81.async:false,
82.success: function(jd) {
83.var opt="<option value=\"0\" selected=\"selected\">---เลือกจังหวัด---</option>";
84.$.each(jd, function(key, val){
85.opt +="<option value='"+ val["PROVINCE_ID"] +"'>"+val["PROVINCE_NAME"]+"</option>"
86.});
87.$("#Proviance").html( opt );
88.}
89.});
90.}


getdata.php
01.<?
02.require("mysql2json.class.php");
03.$hostname_connection "XXXXXX";
04.$database_connection "XXXXXX";
05.$username_connection "XXXXXX";
06.$password_connection "XXXXXX";
07.$connection = mysql_connect($hostname_connection$username_connection$password_connection)or trigger_error(mysql_error(),E_USER_ERROR);
08.mysql_query("SET character_set_results=utf8");
09.mysql_query("SET character_set_client=utf8");
10.mysql_query("SET character_set_connection=utf8");
11.mysql_select_db($database_connection$connection);
12. 
13.$ID=$_GET[ID];
14.$type=$_GET[TYPE];
15. 
16.if($type=='Proviance'){
17.$query="SELECT PROVINCE_ID, PROVINCE_NAME FROM province ORDER BY PROVINCE_NAME ASC ";
18.}else if($type=='District') {
19.$query="SELECT AMPHUR_ID, AMPHUR_NAME FROM amphur WHERE PROVINCE_ID='".$ID."'";
20.else if($type=='Subdistrict'){
21.$query="SELECT DISTRICT_ID, DISTRICT_NAME FROM district WHERE AMPHUR_ID='".$ID."'";
22.else if($type=='Postcode'){
23.$query="SELECT POST_CODE FROM amphur_postcode WHERE AMPHUR_ID='".$ID."'";
24.}
25.$result=mysql_query($query,$connection);
26.$num=mysql_affected_rows();
27. 
28.$json=new mysql2json;
29.$data=$json->getJSON($result,$num);
30.echo $data;
31.?>


ต้องขอบอกไว้ก่อนนะครับ ไฟล์ mysql2json.class.php ผมโหลดมาจาก Internet นะครับ http://json.org

mysql2json.class.php
01.<?
02./**
03.* Filename: mysql2json.class.php
04.* Purpose: Convert mysql resultset data into JSON(http://json.org) format
05.* Author: Adnan Siddiqi <kadnan@gmail.com>
06.* License: PHP License
07.* Date: Tuesday,June 21, 2006
08.*
09.*/
10.class mysql2json{
11.function getJSON($resultSet,$affectedRecords){
12.$numberRows=0;
13.$arrfieldName=array();
14.$i=0;
15.$json="";
16.//print("Test");
17.while ($i < mysql_num_fields($resultSet))  {
18.$meta = mysql_fetch_field($resultSet$i);
19.if (!$meta) {
20.}else{
21.$arrfieldName[$i]=$meta->name;
22.}
23.$i++;
24.}
25.$i=0;
26.$json="[\n";
27.while($row=mysql_fetch_array($resultSet, MYSQL_NUM)) {
28.$i++;
29.$json.="{\n";
30.for($r=0;$r count($arrfieldName);$r++) {
31.$json.=" \"$arrfieldName[$r]\" :    \"$row[$r]\"";
32.if($r count($arrfieldName)-1){
33.$json.=",\n";
34.}else{
35.$json.="\n";
36.}
37.}
38.if($i!=$affectedRecords){
39.$json.="\n},\n";
40.}else{
41.$json.="\n}\n";
42.
43.}
44.$json.="\n]";
45. 
46.return $json;
47.}
48.}
49.?>

No comments:

Post a Comment