สอบถามการดึงค่าจาก จังหวัด อำเภอ ตำบล รหัสไปรษณีย์

ถาม-ตอบ แนะนำไอเดียว โค้ดตัวอย่าง แนวทาง วิธีแก้ปัญหา สอบถามการดึงค่าจาก จังหวัด อำเภอ ตำบล รหัสไปรษณีย์

สอบถามการดึงค่าจาก จังหวัด อำเภอ ตำบล รหัสไปรษณีย์
พอดีได้ดูจากลิ้งค์นี้มา https://www.ninenik.com/content.php?arti_id=684 via @ninenik อยากให้มันแสดงค่าตอนที่เลือกไป ในไฟล์แก้ไขครับ พอจะมีวิธีไหมครับ


Slayerz Namelezz 29-09-2016 04:41:35

คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )

 ความคิดเห็นที่ 1
ลองประยุกต์กับบทความนี้ดูเป็นแนวทาง

ประยุกต์การเลือก listbox มากกว่า 2 รายการ ที่สัมพันธ์กัน รองรับการแก้ไข 


>>>  อัพเดท >>> 29-09-2016
------------------------------------------
หรือถ้าต้องการใช้รูปแบบเดิม สามารถปรับโค้ดนิดหน่อยดังนี้

เพิ่ม data-initval เข้าไป โดยค่าที่กำหนด จะเป็นค่าของข้อมูลเที่ดึงมาแก้ไข หลักการเดียวกับเนื้อหา

ประยุกต์การเลือก listbox มากกว่า 2 รายการ ที่สัมพันธ์กัน รองรับการแก้ไข 

แต่เราไม่ต้องการเปลี่ยนโค้ดทั้งหมดใหม่

ไฟล์ dbconnect.php


<?php  
$mysqli = new mysqli("localhost", "root","","test");  
/* check connection */  
if (mysqli_connect_errno()) {  
    printf("Connect failed: %sn", mysqli_connect_error());  
    exit();  
}  
if(!$mysqli->set_charset("utf8")) {  
    printf("Error loading character set utf8: %sn", $mysqli->error);  
    exit();  
}  

ไฟล์ thailand_area.php

<?php
require_once("dbconnect.php");
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
<!--    ไฟล์ทดสอบนี้ใช้ css ของ boostrap-->
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<!--    มีการใช้งาน ajax ของ jquery-->
    <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>  
</head>
<body>


<div class="container" style="width:300px;">
<br><br><br><br><br><br>
<table class="table table-striped" style="width:300px;">
   <tr class="active">
       <td colspan="2" class="text-center">
           จังหวัด อำเภอ ตำบล รหัสไปรษณีย์
       </td>
   </tr>
    <tr>
        <td width="100" class="text-right">
            จังหวัด
        </td>
        <td class="text-left">
            <select name="province_name" data-where="2" data-initval="1" class="ajax_address form-control input-sm">
                <option value="">-- เลือกจังหวัด --</option>
            </select>
        </td>        
    </tr>
    <tr>
        <td class="text-right">
            อำเภอ/เขต
        </td>
        <td class="text-left">
            <select name="amphur_name" data-where="3" data-initval="1"  class="ajax_address form-control input-sm">
                <option value="">-- เลือกอำเภอ/เขต --</option>
            </select>
        </td>        
    </tr>    
    <tr>
        <td class="text-right">
            ตำบล/แขวง
        </td>
        <td class="text-left">
            <select name="district_name" data-where="4" data-initval="100101"  class="ajax_address form-control input-sm">
                <option value="">-- เลือกตำบล/แขวง --</option>
            </select>
        </td>        
    </tr>   
    <tr>
        <td class="text-right">
            รหัสไปรษณีย์
        </td>
        <td class="text-left">
            <select name="zipcode_name" data-where="5"  data-initval="1"  class="ajax_address form-control input-sm">
                <option value="">-- เลือกรหัสไปรษณีย์ --</option>
            </select>
        </td>        
    </tr>           
</table>    
</div>        
    
<script type="text/javascript">
$(function(){
    
    // เมื่อโหลดขึ้นมาครั้งแรก ให้ ajax ไปดึงข้อมูลจังหวัดทั้งหมดมาแสดงใน
    // ใน select ที่ชื่อ province_name 
    // หรือเราไม่ใช้ส่วนนี้ก็ได้ โดยไปใช้การ query ด้วย php แสดงจังหวัดทั้งหมดก็ได้
	var IDSelected=$("select[name=province_name]").data("initval");	
    $.post("getAddress.php",{
		IDSelected:IDSelected,
        IDTbl:1
    },function(data){
        $("select[name=province_name]").html(data);    
		$("select[name=province_name]").trigger("change");
    });
    
    // สร้างตัวแปร สำหรับเก็บค่าข้อความให้เลือกรายการ เช่น เลือกจังหวัด
    // เราจะเก็บค่านี้ไว้ใช้กรณีมีการรีเซ็ต หรือเปลี่ยนแปลงรายการใหม่
    var chooseText=[];
    $(".ajax_address").each(function(i,k){
        var initObj=$(".ajax_address").eq(i).find("option:eq(0)")[0];
        chooseText[i]=initObj;
    });
    
    // ส่วนของการตรวจสอบ และดึงข้อมูล ajax สังเกตว่าเราใช้ css คลาสชื่อ ajax_address
    // ดังนั้น css คลาสชื่อนี้จำเป็นต้องกำหนด หรือเราจะเปลี่ยนเป็นชื่ออื่นก็ได้ แต่จำไว้ว่า
    // ต้องเปลี่ยนในส่วนนี้ด้วย
    $(".ajax_address").on("change",function(){
        var indexObj = $(".ajax_address").index(this); // เก็บค่า index ไว้ใช้งานสำหรับอ้างอิง
        // วนลูปรีเซ็ตค่า select ของแต่ละรายการ โดยเอาค่าจาก array ด้านบนที่เราได้เก็บไว้
        $(".ajax_address").each(function(i,k){
            if(i>indexObj){ // รีเซ็ตค่าของรายการที่ไม่ได้เลือก
                $(".ajax_address").eq(i).html(chooseText[i]);
            }
        });
        
        var obj=$(this);        
        var IDCheck=obj.val();  // ข้อมูลที่เราจะใช้เช็คกรณี where เช่น id ของจังหวัด
        var IDWhere=obj.data("where"); // ค่าจาก data-where ค่าน่าจะเป็นตัวฟิลด์เงื่อนไขที่เราจะใช้
        var targetObj=$("select[data-where='"+(IDWhere+1)+"']"); // ตัวที่เราจะเปลี่ยนแปลงข้อมูล
		var IDSelected=targetObj.data("initval");			
        if(targetObj.length>0){ // ถ้ามี obj เป้าหมาย
            targetObj.html("<option>.. กำลังโหลดข้อมูล.. </option>");  // แสดงสถานะกำลังโหลด  
            setTimeout(function(){ // หน่วงเวลานิดหน่อยให้เห็นการทำงาน ตัดเออกได้
                // ส่งค่าไปทำการดึงข้อมูล option ตามเงื่อนไข
                 $.post("getAddress.php",{
                    IDTbl:IDWhere,
                    IDCheck:IDCheck,
					IDSelected:IDSelected,
                    IDWhere:IDWhere-1
                },function(data){
                    targetObj.html(data);   // แสดงค่าผลลัพธ์
					targetObj.trigger("change");
                });    
            },1500);
        }
    });
    
});
</script>    

    
</body>
</html>

ไฟล์ getAddress.php


<?php
header("Content-type:text/html; charset=UTF-8");                  
header("Cache-Control: no-store, no-cache, must-revalidate");                 
header("Cache-Control: post-check=0, pre-check=0", false);   
require_once("dbconnect.php");
// array ชื่อตารางในฐานข้อมูลที่เราจะใช้
$arr_tbl_name = array(
    "0"=>"tbl_geography",
    "1"=>"tbl_provinces",
    "2"=>"tbl_amphures",
    "3"=>"tbl_districts",
    "4"=>"tbl_zipcodes",
);
// array คำนำหน้า สำหรับใช้เชื่อมฟิลด์ในตาราง
$arr_data_prefix = array(
    "0"=>"geo",
    "1"=>"province",
    "2"=>"amphur",
    "3"=>"district",
    "4"=>"zipcode",
);
// array สำหรับกำหนดฟิลด์ในตารางที่เราต้องการกำหนดเงื่อนไข
$arr_field_where = array(
    "0"=>"geo_id",
    "1"=>"province_id",
    "2"=>"amphur_id",
    "3"=>"district_code",
    "4"=>"zipcode_id",
);
// ข้อความสำหรับ option ให้เลือกข้อมูล
$arr_choose_text = array(
    "0"=>"-- เลือกภาค --",
    "1"=>"-- เลือกจังหวัด --",
    "2"=>"-- เลือกอำเภอ/เขต --",
    "3"=>"-- เลือกตำบล/แขวง --",
    "4"=>"-- เลือกรหัสไปรษณีย์ -- ",
);
$tbl_id=isset($_POST['IDTbl']) ? trim($_POST['IDTbl']) : NULL;
$checkID=isset($_POST['IDCheck']) ? trim($_POST['IDCheck']) : NULL;
$where_id=isset($_POST['IDWhere']) ? trim($_POST['IDWhere']) : NULL;
$selected_id=isset($_POST['IDSelected']) ? trim($_POST['IDSelected']) : NULL;
if(isset($tbl_id) && $tbl_id!="" 
|| (isset($tbl_id) && $tbl_id!="" 
&& isset($checkID) && $checkID!=""  
&& isset($where_id) && $where_id!="")      
){
    
    if($where_id==2){
        $keyData_id=$arr_data_prefix[$tbl_id]."_code";
    }else{
        $keyData_id=$arr_data_prefix[$tbl_id]."_id";
    }
   $keyData_value=$arr_data_prefix[$tbl_id]."_name";
    
}else{
    exit;   
}
$sql="
SELECT * FROM ".$arr_tbl_name[$tbl_id]." WHERE 1
";
if($where_id!=""){
    $sql.="
    AND ".$arr_field_where[$where_id]."='".$checkID."'
    ";
}
// เรียงจาก id สามารถแก้เป็นเรียงตามชื่อได้ด้วยค่า $keyData_value 
// แต่เนื่องจากในฐานข้อมูล อาจจะมีบางรายการลำดับไม่ถูกต้อง แต่ก็สามารถกำหนดได้
$sql.=" ORDER BY ".$keyData_id." ";
$result = $mysqli->query($sql);
?>
<option value=""><?=$arr_choose_text[$tbl_id]?></option>
<?php
if($result->num_rows>0){  
    while($row = $result->fetch_assoc()){    
?>
    <option value="<?=$row[$keyData_id]?>" 
    <?=($row[$keyData_id]==$selected_id)?" selected":""?> >
    <?=$row[$keyData_value]?>
    </option>
<?php
   }
}
?>






ninenik 29-09-2016
 ความคิดเห็นที่ 2
แล้วถ้าจะเรียกจาการคิวรี่จากฐานข้อมูล จากลิ้งค์ https://www.ninenik.com/content.php?arti_id=684 via @ninenik นี้จะต้องทำยังไงหรอครับผม 


Slayerz Namelezz 29-09-2016 13:03
 ความคิดเห็นที่ 3
สามารถแก้ไขที่ไฟล์ getAddress.php ในส่วนของการเรียงข้อมูล ได้ประมาณนี้

เปลี่ยนจาก

$sql.=" ORDER BY ".$keyData_id." ";


เป็น

if($arr_tbl_name[$tbl_id]=="tbl_provinces"){
	$sql.=" ORDER BY province_name ";	
}elseif($arr_tbl_name[$tbl_id]=="tbl_amphures"){
	$sql.=" ORDER BY amphur_name ";		
}elseif($arr_tbl_name[$tbl_id]=="tbl_districts"){	
	$sql.=" ORDER BY district_name ";	
}elseif($arr_tbl_name[$tbl_id]=="tbl_zipcodes"){	
	$sql.=" ORDER BY zipcode_name ";		
}else{
	$sql.=" ORDER BY ".$keyData_id." ";	
}


โค้ดไฟล์ getAddress.php ทั้งหมด

<?php
header("Content-type:text/html; charset=UTF-8");                  
header("Cache-Control: no-store, no-cache, must-revalidate");                 
header("Cache-Control: post-check=0, pre-check=0", false);   
require_once("dbconnect.php");
// array ชื่อตารางในฐานข้อมูลที่เราจะใช้
$arr_tbl_name = array(
    "0"=>"tbl_geography",
    "1"=>"tbl_provinces",
    "2"=>"tbl_amphures",
    "3"=>"tbl_districts",
    "4"=>"tbl_zipcodes",
);
// array คำนำหน้า สำหรับใช้เชื่อมฟิลด์ในตาราง
$arr_data_prefix = array(
    "0"=>"geo",
    "1"=>"province",
    "2"=>"amphur",
    "3"=>"district",
    "4"=>"zipcode",
);
// array สำหรับกำหนดฟิลด์ในตารางที่เราต้องการกำหนดเงื่อนไข
$arr_field_where = array(
    "0"=>"geo_id",
    "1"=>"province_id",
    "2"=>"amphur_id",
    "3"=>"district_code",
    "4"=>"zipcode_id",
);
// ข้อความสำหรับ option ให้เลือกข้อมูล
$arr_choose_text = array(
    "0"=>"-- เลือกภาค --",
    "1"=>"-- เลือกจังหวัด --",
    "2"=>"-- เลือกอำเภอ/เขต --",
    "3"=>"-- เลือกตำบล/แขวง --",
    "4"=>"-- เลือกรหัสไปรษณีย์ -- ",
);
$tbl_id=isset($_POST['IDTbl']) ? trim($_POST['IDTbl']) : NULL;
$checkID=isset($_POST['IDCheck']) ? trim($_POST['IDCheck']) : NULL;
$where_id=isset($_POST['IDWhere']) ? trim($_POST['IDWhere']) : NULL;
$selected_id=isset($_POST['IDSelected']) ? trim($_POST['IDSelected']) : NULL;
if(isset($tbl_id) && $tbl_id!="" 
|| (isset($tbl_id) && $tbl_id!="" 
&& isset($checkID) && $checkID!=""  
&& isset($where_id) && $where_id!="")      
){
    
    if($where_id==2){
        $keyData_id=$arr_data_prefix[$tbl_id]."_code";
    }else{
        $keyData_id=$arr_data_prefix[$tbl_id]."_id";
    }
   $keyData_value=$arr_data_prefix[$tbl_id]."_name";
    
}else{
    exit;   
}
$sql="
SELECT * FROM ".$arr_tbl_name[$tbl_id]." WHERE 1
";
if($where_id!=""){
    $sql.="
    AND ".$arr_field_where[$where_id]."='".$checkID."'
    ";
}
// เรียงจาก id สามารถแก้เป็นเรียงตามชื่อได้ด้วยค่า $keyData_value 
// แต่เนื่องจากในฐานข้อมูล อาจจะมีบางรายการลำดับไม่ถูกต้อง แต่ก็สามารถกำหนดได้
//$sql.=" ORDER BY ".$keyData_id." ";
if($arr_tbl_name[$tbl_id]=="tbl_provinces"){
	$sql.=" ORDER BY province_name ";	
}elseif($arr_tbl_name[$tbl_id]=="tbl_amphures"){
	$sql.=" ORDER BY amphur_name ";		
}elseif($arr_tbl_name[$tbl_id]=="tbl_districts"){	
	$sql.=" ORDER BY district_name ";	
}elseif($arr_tbl_name[$tbl_id]=="tbl_zipcodes"){	
	$sql.=" ORDER BY zipcode_name ";		
}else{
	$sql.=" ORDER BY ".$keyData_id." ";	
}
$result = $mysqli->query($sql);
?>
<option value=""><?=$arr_choose_text[$tbl_id]?></option>
<?php
if($result->num_rows>0){  
    while($row = $result->fetch_assoc()){    
?>
    <option value="<?=$row[$keyData_id]?>" 
    <?=($row[$keyData_id]==$selected_id)?" selected":""?> >
    <?=$row[$keyData_value]?>
    </option>
<?php
   }
}
?>


ninenik 29-09-2016
 ความคิดเห็นที่ 4
ได้แล้วครับ ขอบคุณมากๆครับ 


Slayerz Namelezz 29-09-2016 19:59
 ความคิดเห็นที่ 5



จากในภาพครับ พอเรากดบันทึก ข้อมูลในฐานข้อมูล จะแสดงเป็น Id, code, แต่ผมอยากให้มันบันทึกเป็นชื่อจังหวัด,อำเภอ,ตำบล,และรหัสไปษณีย์ ตรงๆเลย ผมต้องทำยังไงครับ 


thaicomsuksun 27-12-2019 01:28
 ความคิดเห็นที่ 6
สร้างฟังก์ชั่นดึงข้อมูลจาก ID ก่อนบันทึก เช่น
 
<?php
function getAumphurName($amphurID){
	global $mysqli;
	$sql = "
	SELECT amphur_name FROM tbl_amphures WHERE amphur_id='".$amphurID."'
	";
	$result = $mysqli->query($sql);
	if($result && $result->num_rows>0){  
		$row = $result->fetch_assoc();
		return $row['amphur_name'];
	}else{
		return '';	
	}
}
function getProvinceName($provinceID){
	global $mysqli;
	$sql = "
	SELECT province_name FROM tbl_provinces WHERE province_id='".$provinceID."'
	";
	$result = $mysqli->query($sql);
	if($result && $result->num_rows>0){  
		$row = $result->fetch_assoc();
		return $row['province_name'];
	}else{
		return '';	
	}	
}
function getDistrictName($districtID){
	global $mysqli;
	$sql = "
	SELECT district_name FROM tbl_districts WHERE district_id='".$districtID."'
	";
	$result = $mysqli->query($sql);
	if($result && $result->num_rows>0){  
		$row = $result->fetch_assoc();
		return $row['district_name'];
	}else{
		return '';	
	}	
}
?>
 
ตอนบันทึกข้อมูลก็เรียกใช้งานฟังก์ชั่น โดยกำหนด ID เข้าไป เช่น getProvinceName($_POST['province_id']) เป็นต้น


ninenik 27-12-2019
 ความคิดเห็นที่ 7
หากต้องการดึงข้อมูล จังหวัด อำเภอ ตำบล จากฐานข้อมูล ที่มี 3 ตารางแยกกันทั้งจังหวัด อำเภอ ตำบล ที่เก็บเป็นค่าตัวเลข ตามฐานข้อมูล ซึ่งสมมุติไปเชื่อมกับข้อมูลตารางเช่น data_table ที่มีการเก็บค่า ตัวเลขของ จังหวัด อำเภอ ตำบล อยู่ใน data_table ต้อง join ข้อมูลอย่างไรใน 4 ตารางนี้ครับ.
เพิ่อดึงข้อความจากตัวเลขเป็นภาษาไทย เช่น ตารางจังหวัด เก็บ id = 67 หมายถึง สุราษฎร์ ไปเชิ่อมต่อกับ ตารางอำเภอ ที่เก็บค่า รหัส id ของจังหวัด อยู่ และมีชื่ออำเภอ เก็บ รหัส อำเภอ เป็นตัวเลข เช่น distric_id = 127  หมายถึง เมืองสุราษฎร์ และตำบล ก็มีการเก็บค่า ของอำเภอ อยู่ด้วย และ รหัสตำบล ก็เก็บค่าตัวเลข เช่น 12453 = มะขามเตี้ย จะเขียน code join 4  ตารางอย่างไรครับ เพื่อให้ได้ที่อยู่  ตำบล มะขามเตี้ย อำเภอ เมืองสุราษฎร์ จังหวัด สุราษฎร์ 

คือการดึงค่าภาษาไทยมาจากตาราง 3 ตาราง ที่เห็บค่าตัวเลข    ตำบล 12453  อำเภอ 127  จังหวัด 67 น่ะครับ.รบกวนช่วยหน่อยน่ะครับ. ขอบคุณมาก ๆ ครับ.


Manasak Thanadeechukiat 22-10-2022 22:27
1






เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ