รวมเทคนิคต่าง ๆ ในการพัฒนาระบบ ที่น่าสนใจ รวมไว้ที่เดียว มีอะไรสอบถาม สามารถติดต่อผ่านช่องผ่าน Fanpage เราได้เลย

แสดงบทความที่มีป้ายกำกับ MySQL แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ MySQL แสดงบทความทั้งหมด

วันอาทิตย์ที่ 3 พฤษภาคม พ.ศ. 2563

แจก!!! ใช้งาน Autocomplete ร่วมกับฐานข้อมูล ตัวอย่าง Autocomplete จังหวัดในไทย


การทำ Autocomplete คือการเพิ่มความสามารถให้กับ Textbox คือ เมื่อเราพิมพ์ข้อความลงไปใน Textbox ก็จะมีข้อความที่สมบูรณ์แสดงขึ้นมาให้เราเลือก ตามรูปตัวอย่างด้านล่าง


Download


เมื่อ Download เสร็จแล้วจะได้ไฟล์เหมือนในรูป โดยไฟล์ จะมีทั้งตัวอย่างฐานข้อมูล และไฟล์ตัวอย่างการใช้งาน Autocomplete ร่วมกับ Database ดังรูป



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

ในการยกตัวอย่างการใช้งาน ผมจะขอนำเสนอในรูปแบบของการทำ Autocomplete รายชื่อจังหวัดของประเทศไทย (ลองใช้งานได้ ในกรอบด้านล่าง)




ตัวอย่างการใช้งาน Text Autocomplete ร่วมกับ Database


เริ่มที่ เรียกใช้งาน StyleSheet และ Javascript ใน Tag <header>....</header>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css">
<link rel="stylesheet" href="./inc/demo.css">
<link rel="stylesheet" href="inc/jquery.autocomplete.css">
<script src="./inc/jquery.js" type="text/javascript"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="inc/jquery.autocomplete.js" type="text/javascript"></script>

เชื่อมต่อฐานข้อมูลและดึงข้อมูลจากจังหวัดจากฐานข้อมูลออกมาแสดง จากตัวอย่างด้านล่าง เราจะเก็บชื่อจังหวัดที่
$connect = mysqli_connect('localhost', 'root', '1234', 'test');
mysqli_set_charset($connect, 'utf8');

/************************ ดึงข้อมูลจังหวัดจากฐานข้อมูล *********************/
$sql = "SELECT
pv.name_th
FROM
province AS pv
ORDER BY
CONVERT( pv.name_th USING tis620 ) ASC";
$result = mysqli_query($connect, $sql);
$php_list = '';
foreach ($result as $key => $val){
    $php_list .= "'".$val['name_th']."', ";
}
/********** เก็บค่ารายชื่อจังหวัดทั้งหมดไว้ในตัวแปร ********/
$php_list = substr($php_list,0, strlen($php_list) - 2);

ส่วนฝั่งของ HTML สร้าง Input field ที่ต้องการทำให้เป็น Autocomplete พร้อมกำหนด id ให้กับ Input นั้น เช่น id="province_auto"
<div class="auto" style="padding: 25px; width: 400px;">
<div class="form-group" style="margin:0px;">
<strong>กรอกจังหวัด</strong>
<input type="text" class="form-control" id="province_auto" placeholder="กรอกจังหวัด">
</div>
</div>

ในส่วนของ Script กำหนดค่าตัวแปร province เป็นรายชื่อจังหวัดจากนั้นเรียกใช้งานผ่าน jQuery ด้วยคำสั่ง .autocomplete
<script>
    var province = [<?php echo $php_list?>];

    $('#province_auto').autocomplete({
        source:[province],
        limit: 10
    });
</script>

ขอบคุณความรู้ดี ๆ จาก https://xdsoft.net/


Share:

แจก!!! Code PHP + SQL + Pagination ตัวอย่างหน้ารายงาน จังหวัด อำเภอ ตำบล + การแบ่งหน้า


แจกตัวอย่างการสร้างหน้ารายงานด้วย PHP พร้อมตัวอย่างการดึงข้อมูลจากฐานข้อมูล MySql และการแบ่งหน้าโดยใช้ Function Pagination




อธิบายการใช้งาน PHP Code อย่างละเอียด

เริ่มด้วยตัวอย่างการสร้าง SQL สำหรับดึงข้อมูล จังหวัด อำเภอ ตำบล 

ตัวอย่างด้านล่าง คือการดึงข้อมูลด้วยการเชื่อมตารางทั้ง 3 ตารางเข้าด้วยกัน และเพิ่มเงื่อนไขการดึงข้อมูล WHERE จังหวัดที่มีคำว่า "เชียง" ในชื่อจังหวัด และ LIMIT การแสดงผลข้อมูลไว้ที่ 100 รายการ

หากดึงข้อมูลจากฐานข้อมูลด้วย Query ชุดนี้ Query จะดึงข้อมูลจากฐานข้อมูลมาแสดงและจำกัดการแสดงผลที่ 100 รายการเท่านั้น
SELECT
pv.`code` AS province_code,
pv.name_th AS province_name,
dt.`code` AS district_code,
dt.name_th AS district_name,
sdt.`code` AS subdistrict_code,
sdt.name_th AS subdistrict_name
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
INNER JOIN subdistrict AS sdt ON SUBSTR(dt.`code`,1,4)= SUBSTR(sdt.`code`,1,4)
WHERE
pv.name_th LIKE '%เชียง%'
LIMIT 100


ตัวอย่าง Code การแบ่งหน้าด้วย PHP

ส่วนแรกคือการทำ Code สำหรับแบ่งหน้า รายละเอียดดังนี้
1. เรียกใช้งาน Class แบ่งหน้า
2. นับจำนวน Row ข้อมูลทั้งหมด เพื่อใช้ในการแบ่งหน้า
3. กำหนดค่าตัวแปรสำหรับ Function การแบ่งหน้า
4. ส่งค่าเข้าไปยัง Function การแบ่งหน้า
5. ตัวอย่าง SQL สำหรับแบ่งเพจ
/********* 1. เรียกใช้งาน Class แบ่งหน้า *********/
require_once ("class/class.pagination.php");
$Pagination = new Pagination();

/********* 2. นับจำนวนข้อมูลทั้งหมด $numRows *********/
$sql = "SELECT
COUNT(pv.`code`) AS num_rows
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
INNER JOIN subdistrict AS sdt ON SUBSTR(dt.`code`,1,4)= SUBSTR(sdt.`code`,1,4)
WHERE pv.name_th LIKE '%เชียง%'";
$result = mysqli_query($connect, $sql);
foreach ($result as $key => $val){
    $numRows = $val['num_rows'];
}

/********* 3. กำหนดค่าตัวแปร *********/
$_GET['pageNo'] = (!isset($_GET['pageNo']))? '1' : $_GET['pageNo']; // หน้าปัจจุบัน
$rowPerPage = 15; //แสดงรายการต่อแถว
$link = '?t='; // ใส่ parameter link ที่ต้องการใน Pagination
$showPage = 5; // จำนวนหน้าสูดสุดที่จะแสดงใน Pagination ต่ำสุดคือ 3 ควรใส่เป็นเลขคี่ เช่น 3 5 7

/********* 4. ส่งค่าไปยัง Class Pagination *********/
$limitConfig = $Pagination->pagination($numRows,$_GET['pageNo'],$rowPerPage);
$arrayPage = $Pagination->devidepage($numRows,$_GET['pageNo'],$rowPerPage,$link,$showPage);

/********* 5. ตัวอย่าง SQL ที่ใช้สำหรับแบ่งเพจ *********/
// ดึงข้อมูล จังหวัด อำเภอ ตำบล ที่มีชื่อจังหวัดขึ้นต้นด้วย "เชียง"
// แบ่งหน้า ด้วย คำสั่ง LIMIT และตัว $limitConfig ที่ได้จาก  Class Pagination
$sql = "SELECT
pv.`code` AS province_code,
pv.name_th AS province_name,
dt.`code` AS district_code,
dt.name_th AS district_name,
sdt.`code` AS subdistrict_code,
sdt.name_th AS subdistrict_name
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
INNER JOIN subdistrict AS sdt ON SUBSTR(dt.`code`,1,4)= SUBSTR(sdt.`code`,1,4)
WHERE
pv.name_th LIKE '%เชียง%'
LIMIT {$limitConfig ['start']},{$limitConfig ['rows_perpage']}";

$result = mysqli_query($connect, $sql);


อ่านเรื่องการแบ่งหน้าเพิ่มเติม คลิกที่นี่



ตัวอย่างการใช้งานใช้งาน PHP foreach แสดงผลข้อมูลจากฐานข้อมูล

เมื่อทำการดึงข้อมูลจากฐานข้อมูลมากแล้ว ขั้นตอนไปคือการนำข้อมูลที่ได้มาแสดงผล
รูปแบบคำสั่ง foreach ใช้งานได้ 2 แบบ
รูปแบบนี้จะดึงข้อมูล Array มาแสดงโดยไม่ดึง Array Key มาด้วย
foreach (array_expression as $value)  
    statement

รูปแบบนี้จะดึงข้อมูล Array มาแสดงโดยดึง Array Key ออกมาด้วย
foreach (array_expression as $key => $value)
    statement

ตัวอย่างการวนลูป
<h1 style="padding: 0; margin: 0;">ข้อมูลจังหวัด ที่ขึ้นต้นด้วย "เชียง"</h1>
<table border="1" width="800" cellpadding="">
    <thead>
        <tr>
            <th>ลำดับ</th>
            <th>รหัสจังหวัด</th>
            <th>จังหวัด</th>
            <th>รหัสอำเภอ</th>
            <th>อำเภอ</th>
            <th>รหัสตำบล</th>
            <th>ตำบล</th>
        </tr>
    </thead>
    <tbody>
    <?php
    $cnt = (($_GET['pageNo']-1)*$rowPerPage)+1; // <<< ตัวอย่าง เลขหน้าลำดับการ
    foreach ($result as $val){?>
        <tr>
            <td><?php echo $cnt?></td>
            <td><?php echo $val['province_code']?></td>
            <td><?php echo $val['province_name']?></td>
            <td><?php echo $val['district_code']?></td>
            <td><?php echo $val['district_name']?></td>
            <td><?php echo $val['subdistrict_code']?></td>
            <td><?php echo $val['subdistrict_name']?></td>
        </tr>
    <?php $cnt++;} ?>
    </tbody>
</table>



ตัวอย่างการแบ่งหน้า

ตัวแปร $arrayPage เราจะใช้สำหรับสร้าง Code แบ่งหน้า ตามตัวอย่างด้านล่างนี้
<div style="float:left; font-weight: bold; margin-right: 20px; padding-top: 30px;">หน้า <?php echo $_GET['pageNo']?> / <?php echo ceil($numRows/$rowPerPage)?></div>
<div class="dataTables_paginate paging_simple_numbers mo-paginate" id="data-table_paginate">
    <?php $lastPage = count($arrayPage)-1; ?>
    <ul class="pagination">
        <li class="paginate_button previous" aria-controls="data-table" tabindex="0" id="data-table_previous">
            <a href="<?php echo $arrayPage[0]['link']?>" class="<?php echo $arrayPage[0]['disabled']?>">
                <?php echo $arrayPage[0]['label']?>
            </a>
        </li>

        <?php foreach ($arrayPage as $key => $value): if($key != 0 && $key != $lastPage ):?>
            <li class="paginate_button" aria-controls="data-table" tabindex="0">
                <a href="<?php echo $value['link']?>" class="<?php echo ($_GET['pageNo'] == $value['pageNo']) ? 'current': ''?>">
                    <?php echo $value['label']?>
                </a>
            </li>
        <?php endif; endforeach; ?>

        <li class="paginate_button next" aria-controls="data-table" tabindex="0" id="data-table_next">
            <a href="<?php echo $arrayPage[$lastPage]['link']?>" class="<?php echo $arrayPage[$lastPage]['disabled']?>">
                <?php echo $arrayPage[$lastPage]['label']?>
            </a>
        </li>
    </ul>
</div>





Share:

แจก!!! ฐานข้อมูล จังหวัด อำเภอ ตำบล ประเทศไทย + ตัวอย่าง วิธีใช้งาน Mysql Query


แจก Database ข้อมูล จังหวัด อำเภอ ตำบล ประเทศไทย 

เพื่อใช้สำหรับสร้างเป็นฐานข้อมูลเพื่อแสดงข้อมูล จังหวัด อำเภอ ตำบล ประเทศไทย ภายในเว็บไซต์ของท่าน


Download


ตัวอย่าง คำสั่ง SQL สำหรับเชื่อมโยงข้อมูลตาราง จังหวัด อำเภอ ตำบล

1. ตัวอย่าง Query ข้อมูลจังหวัดผ่าน รหัส หรือ ชื่อจังหวัด

SELECT
pv.`code` AS province_code,
pv.name_th AS province_name
FROM
province AS pv
WHERE
pv.name_th LIKE '%เชียง%' OR pv.`code` LIKE '50%'

ผลลัพธ์ที่ได้

2. ตัวอย่าง Query ข้อมูลด้วยชื่อจังหวัดที่มีคำว่า "ราช" หรือ ชื่ออำเภอที่มีคำว่า "พาน"

SSELECT
pv.`code` AS province_code,
pv.name_th AS province_name,
dt.`code` AS district_code,
dt.name_th AS district_name
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
WHERE pv.name_th LIKE '%ราช%' OR dt.`name_th` LIKE '%พาน%'
ORDER BY RAND() LIMIT 100

ผลลัพธ์ที่ได้

3. ตัวอย่าง Query ข้อมูลตำบลด้วยรหัสอำเภอ

SELECT
sdt.`code` AS province_code,
sdt.name_th AS province_name
FROM
subdistrict AS sdt
WHERE sdt.`code` LIKE '4010%'
LIMIT 100


ผลลัพธ์ที่ได้


4. ตัวอย่าง Query Join ตารางจังหวัด อำเภอ ตำบล เข้าด้วยกัน เชื่อมความสัมพันธ์ ด้วย Field Code

SELECT
pv.`code` AS province_code,
pv.name_th AS province_name,
dt.`code` AS district_code,
dt.name_th AS district_name,
sdt.`code` AS subdistrict_code,
sdt.name_th AS subdistrict_name
FROM
province AS pv
INNER JOIN district AS dt ON SUBSTR(pv.`code`,1,2)= SUBSTR(dt.`code`,1,2)
INNER JOIN subdistrict AS sdt ON SUBSTR(dt.`code`,1,4)= SUBSTR(sdt.`code`,1,4)
WHERE
pv.name_th LIKE '%เชียง%'
LIMIT 100

ผลลัพธ์



อธิบายเพิ่มเติม

ตาราง province คือ จังหวัด
ตาราง district คือ อำเภอ
ตาราง subdistrict คือ ตำบล



Share:

วันเสาร์ที่ 2 พฤษภาคม พ.ศ. 2563

PHP + Mysql แก้ปัญหาภาษาต่างดาวในหน้าเว็บ แสดงผลภาษาไทย บนหน้าเว็บไซต์



ปัญหาเว็บแสดงภาษาต่างดาว

เชื่อวว่าหลายคนคงเลยเจอปัญหาเว็บไซต์มีปัญหา แสดงผลข้อความภาษาไทยออกมาเป็นภาษาต่างดาว แบบตัวอย่างด้านล่าง

รหัส 81000000 ชื่อ ��к��
รหัส 10000000 ชื่อ ��ا෾��ҹ��
รหัส 71000000 ชื่อ �ҭ������
รหัส 46000000 ชื่อ ����Թ���
รหัส 62000000 ชื่อ ��ᾧྪ�
รหัส 40000000 ชื่อ �͹��
รหัส 22000000 ชื่อ �ѹ�����
รหัส 24000000 ชื่อ ���ԧ���
รหัส 20000000 ชื่อ �ź���
รหัส 18000000 ชื่อ ��¹ҷ

ปัญหาที่เกิดขึ้นมักจะเกิดจากการดึงข้อมูลจากฐานข้อมูลมาแสดงในหน้าเว็บ ดังนั้นเราสามารถแก้ไขปัญหาดังกล่าวด้วยวิธีต่อไปนี้

1. ส่วน HTML แทรก meta tag charset="utf-8" ตามตัวอย่างด้านล่าง
<html lang="th">
<head>
    <meta http-equiv=Content-Type content="text/html; charset=utf-8">
</head>
<body>

</body>

2. ส่วน PHP การเชื่อมต่อฐานข้อมูลให้ระบุ charset = 'utf8' ทุกครั้ง เหมือนตัวอย่างด้านล่าง
$connect = mysqli_connect('localhost', 'root', '1234', 'database_name');
mysqli_set_charset($connect, 'utf8');

3. ตั้งค่าที่จำเป็นแล้ว มาลอง Query ข้อมูลกัน โดยทดลอง เขียน SQL เพื่อดึงข้อมูลจากตารางด้านล่าง ตามรูปนี้

4. ทดลองเขียน Code PHP เพื่อดึงข้อมูลจากฐานข้อมูลมาแสดง
$connect = mysqli_connect('localhost', 'root', '1234', 'database_name');

mysqli_set_charset($connect, 'utf8');

$sql = "SELECT
pv.`code`,
pv.name_th
FROM
config_area_province AS pv
ORDER BY
CONVERT( pv.name_th USING tis620 ) ASC
LIMIT 10";

$result = mysqli_query($connect, $sql);

foreach ($result as $key => $detail){
    echo "รหัส ".$detail['code']." ชื่อ ".$detail['name_th']."<br>";
}

ผลลัพธ์
รหัส 81000000 ชื่อ กระบี่
รหัส 10000000 ชื่อ กรุงเทพมหานคร
รหัส 71000000 ชื่อ กาญจนบุรี
รหัส 46000000 ชื่อ กาฬสินธุ์
รหัส 62000000 ชื่อ กำแพงเพชร
รหัส 40000000 ชื่อ ขอนแก่น
รหัส 22000000 ชื่อ จันทบุรี
รหัส 24000000 ชื่อ ฉะเชิงเทรา
รหัส 20000000 ชื่อ ชลบุรี
รหัส 18000000 ชื่อ ชัยนาท

เรียบร้อยเท่านี้เราก็แก้ปัญหา ภาษาต่างดาว และสามารถแสดงผลภาษาไทย บนหน้าเว็บของเราได้แล้ว


รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

MySQL เรียงลำดับตามตัวอักษร ภาษาไทย ตัวอย่างการใช้งานร่วมกับ PHP


ก่อนอื่นต้องทำการเชื่อมต่อฐานข้อมูล ถ้ายังทำไม่เป็นคลิกอ่านก่อนเลย  PHP connect SQL


ตัวอย่างตาราง


โดยปกติแล้ว เมื่อเราทำการ Query ข้อมูลมาจากฐานข้อมูล หากว่า Collation ของ Field ในฐานข้อมูลเป็น "utf8_general_ci" เหมือนในรูป เมื่อเราทำการ Query ข้อมูลออกมากจะไม่สามารถเรียงลำดับข้อมูล
ก - ฮ หรือ ฮ - ก ได้

แต่เรามีวิธีแก้ไขปัญหานี้ง่าย ๆ ด้วยคำสั่ง
CONVERT( 'field_name' USING tis620 ) ASC

ตัวอย่าง SQL สำหรับเรียงลำดับข้อมูล
ตัวอย่างการใช้งาน
SELECT
pv.`code`,
pv.name_th
FROM
config_area_province AS pv
ORDER BY
CONVERT( pv.name_th USING tis620 ) ASC
LIMIT 10

จาก SQL ด้านบนเราจะได้ผลลัพธ์ ตามรูปนี้

Note:
จะเห็นได้ว่าเราสามารถเรียงลำดับตัวอักษรภาษาไทย รวมทั้งสระต่างๆ ของภาไทยได้อย่างถูกต้อง


ตัวอย่างการใช้ CONVERT ในรูปแบบ Code PHP
$sql = "SELECT
pv.`code`,
pv.name_th
FROM
config_area_province AS pv
ORDER BY
CONVERT( pv.name_th USING tis620 ) ASC
LIMIT 10";

$result = mysqli_query($connect, $sql);

foreach ($result as $key => $detail){
    echo "รหัส ".$detail['code']." ชื่อ ".$detail['name_th']."<br>";
}

ผลลัพธ์

รหัส 81000000 ชื่อ กระบี่
รหัส 10000000 ชื่อ กรุงเทพมหานคร
รหัส 71000000 ชื่อ กาญจนบุรี
รหัส 46000000 ชื่อ กาฬสินธุ์
รหัส 62000000 ชื่อ กำแพงเพชร
รหัส 40000000 ชื่อ ขอนแก่น
รหัส 22000000 ชื่อ จันทบุรี
รหัส 24000000 ชื่อ ฉะเชิงเทรา
รหัส 20000000 ชื่อ ชลบุรี
รหัส 18000000 ชื่อ ชัยนาท



รวมเทคนิค PHP+SQL << คลิกที่นี่






Share:

บทความที่ได้รับความนิยม

Search

บทความอื่น ๆ