ข้ามไปที่เนื้อหาหลัก

ตัวอย่างการเข้ารหัส-ถอดรหัส ID ด้วย openssl_encrypt และ openssl_decrypt

บทความนี้จะนำเสนอวิธีเข้ารหัสไอดี ที่ส่งผ่านลิงค์รับค่าแบบ GET เพื่อป้องกันการสุ่มดูข้อมูลไอดีคนอื่น ที่ไม่ใช่ของตัวเองกันครับ


สังเกตว่าข้อมูลด้านบนนี้เป็นของ "พนักงานขาย คนที่ 1" เป็นการจำลอง SESSION ที่ LOGIN เข้ามา และในตารางนั้นก็คือข้อมูลลูกค้าของตนเอง เมื่อลองคลิกดู "รายละเอียด" ก็จะพบข้อมูลดังภาพด้านล่างนี้


การรับส่งข้อมูลแบบไม่ได้เข้ารหัส ID จะทำให้สามารถสุ่มเลขไอดีได้เรื่อย เพื่อดูข้อมูลของลูกค้าคนอื่นๆ ได้ ดังนั้นเรามาดูฟังก์ชั่นเข้ารหัสที่จะใช้ป้องกันปัญหานี้กัน


สังเกตว่าเมื่อสุ่มรหัสอื่นๆ จะเห็นข้อมูลของพนักงานคนอื่นได้ด้วย

ดังนั้น ก็ต้องเรียกใช้ฟังก์ชั่นเข้ารหัสข้อมูลก่อนส่งไปในหน้าอื่นๆ



เมื่อลองเอาเมาส์ไปชี้ที่ลิงค์ "รายละเอียด" บน Status bar จะแสดงให้เห็นว่าไอดี ถูกเข้ารหัสไว้แล้ว



เมื่อคลิกเข้าไปดูรายละเอียด จะสังเกตเห็นว่า URL ในส่วนของ id จะถูกเข้ารหัสไว้เรียบร้อย


หากลองสุ่มเปลี่ยน ID เป็นตัวเลขอื่น เมื่อเข้าสู่กระบวนการถอดรหัส จะไม่พบข้อมูล


และเพื่อให้ซับซ้อนอีกนิดหน่อย ผมได้ดัดแปลงให้แสดงการเข้ารหัสแบบสุ่ม คือเมื่อเปิดเข้ามาในแต่ละครั้ง ID ที่ถูกเข้ารหัสจะแสดงต่างกันไป



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

ตัวอย่างโค้ด PHP ทั้งหมดในบทความนี้


encrypt_function.php
<?php

function my_simple_crypt( $string, $action = 'e' ) {

    // you may change these values to your own

    $secret_key = 'my@simple#secret-key234';

    $secret_iv = 'my@simple#secret-iv345';

    $output = false;

    $encrypt_method = "AES-256-CBC";

    $key = hash( 'sha256', $secret_key );

    $iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );

    if( $action == 'e' ) {

        $output = base64_encode( openssl_encrypt( $string, $encrypt_method, $key, 0, $iv ) );

    }

    else if( $action == 'd' ){

  $output = openssl_decrypt( base64_decode( $string ), $encrypt_method, $key, 0, $iv );

    }

    return $output;

}

function encrypt($string){

 $salting = substr(md5(microtime()),-1) . $string;

 return my_simple_crypt( $salting, 'e' );

}

function decrypt($string){

 $encode = my_simple_crypt( $string, 'd' );

 return substr($encode, 1);

}

?>
list_data_encode.php
<?php

session_start();

include 'encrypt_function.php';



// Test session

$_SESSION['user_id'] = 1;

//Booking list from database of sale id #2

$tb_booking = array(

    array(

     "id" => 1,

     "booking_name" => "คุณสมหมาย สายเสมอ",

     "booking_amount" => 7,

     "booking_total_price" => 700,

     "booking_email" => "abcd@gmail.com",

     "booking_tel" => "0894567895",

     "sale_id" => 1,

    ),

    array(

     "id" => 2,

     "booking_name" => "คุณมีสุข สมหวัง",

     "booking_amount" => 2,

     "booking_total_price" => 1500,

     "booking_email" => "wxyz@gmail.com",

     "booking_tel" => "0801236547",

     "sale_id" => 1,

    )

);

$arr_sales = array(

    "1" => "พนักงานขาย คนที่ 1",

    "5" => "พนักงานขาย คนที่ 2",

    "9" => "พนักงานขาย คนที่ 3"

);

//FROM SESSION LOGIN

$user_id = $_SESSION['user_id'];

if(isset($arr_sales[$user_id])){

 $session_user_name = $arr_sales[$user_id];

}

?>

<!DOCTYPE html>

<html lang="th">

  <head>

    <meta charset="utf-8">

 <title>ทดสอบการเข้ารหัส-ถอดรหัส ID ก่อนจะนำไปใช้งาน</title>

 <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">

  </head>

  <body>

 <div class="container">

  <div class="panel panel-default">

   <div class="panel-heading">

    <h3>ทดสอบการเข้ารหัส-ถอดรหัส ID ก่อนจะนำไปใช้งาน</h3>

   </div>

   <div class="panel-body">

    <table class="table table-list-search">

      <thead>

       <tr>

        <th>#</th>

        <th>ชื่อลูกค้า</th>

        <th>จำนวน</th>

        <th>ราคา</th>

        <th>พนักงานขาย</th>

        <th>รายละเอียด</th>

       </tr>

      </thead>

      <tbody>

       <?php

       $no = 0;

       foreach($tb_booking as $row){

        $no++;

                if(isset($arr_sales[$row['sale_id']])){

         $sale_respon = $arr_sales[$row['sale_id']];

        }else{

         $sale_respon = $row['sale_id'];

        }

                $encode = urlencode(encrypt($row['id']));

                echo '<tr>

          <td>'.$no.'</td>

          <td>'.$row['booking_name'].'</td>

          <td>'.$row['booking_amount'].'</td>

          <td>'.$row['booking_total_price'].'</td>

          <td>'.$sale_respon.'</td>

          <td><a href="preview_data_encode.php?id='. $encode .'">รายละเอียด</a></td>

         </tr>';

       }

       ?>

      </tbody>

     </table>

   </div>

     </div>

  ผู้ใช้งานขณะนี้คือ : <b><font color="blue"><?php echo $session_user_name;?></font></b>

 </div>

   </body>

</html>

preview_data_encode.php
<?php

 session_start();

 include 'encrypt_function.php';

  //All Booking list from database

 $tb_booking = array(

    1 => array(

     "id" => 1,

     "booking_name" => "คุณสมหมาย สายเสมอ",

     "booking_amount" => 7,

     "booking_total_price" => 700,

     "booking_email" => "abcd@gmail.com",

     "booking_tel" => "0894567895",

     "sale_id" => 1,

    ),

    2 => array(

     "id" => 2,

     "booking_name" => "คุณมีสุข สมหวัง",

     "booking_amount" => 2,

     "booking_total_price" => 1500,

     "booking_email" => "wxyz@gmail.com",

     "booking_tel" => "0801236547",

     "sale_id" => 1,

    ),

    3 => array(

     "id" => 3,

     "booking_name" => "คุณจริงใจ แสนดี",

     "booking_amount" => 4,

     "booking_total_price" => 500,

     "booking_email" => "lmnop@gmail.com",

     "booking_tel" => "0502314569",

     "sale_id" => 5,

    ),

    4 => array(

     "id" => 4,

     "booking_name" => "คุณสุขกาย  สบายใจ",

     "booking_amount" => 6,

     "booking_total_price" => 600,

     "booking_email" => "qrstuv@gmail.com",

     "booking_tel" => "0951542365",

     "sale_id" => 9,

    ),

 );

  $arr_sales = array(

     "1" => "พนักงานขาย คนที่ 1",

     "5" => "พนักงานขาย คนที่ 2",

     "9" => "พนักงานขาย คนที่ 3"

 );

  $id = isset($_GET['id']) ? decrypt(urldecode($_GET['id'])) : '';

  $data = isset($tb_booking[$id]) ? $tb_booking[$id] : array();

  if(!empty($data)){

  if(isset($arr_sales[$data['sale_id']])){

   $sale_respon = $arr_sales[$data['sale_id']];

  }else{

   $sale_respon = $data['sale_id'];

  }

 }else{

  $sale_respon = '-';

 }

  //FROM SESSION LOGIN

 $user_id = $_SESSION['user_id'];

 if(isset($arr_sales[$user_id])){

  $session_user_name = $arr_sales[$user_id];

 }

  $font_color = '';

 if($sale_respon != $session_user_name){

  $font_color = 'red';

 }

?>

<!DOCTYPE html>

<html lang="th">

 <head>

  <meta charset="utf-8">

  <title>ทดสอบการเข้ารหัส-ถอดรหัส ID ก่อนจะนำไปใช้งาน</title>

  <link href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css">

  <style>

  .glyphicon-lg

  {

   font-size:4em

  }

  .square-box

  {

   width:100px; min-height:110px;

   margin:10px;

   text-align:center!important;

   background-color:#676767;

   padding:20px 0

  }

  .square-box

  {

   background-color:#20819e;color:#FFF

  }

  </style>

 </head>

 <body>

  <div class="container">

   <div class="row">

    <div class="col-md-5 toppad  pull-left col-md-offset-3 ">

     <br/>

     <A href="#" >ผู้ใช้งานขณะนี้คือ : <b><font color="blue"><?php echo $session_user_name;?></font></b></A>

     <br>

     <p class=" text-info"><?php echo date('Y-m-d H:i:s');?></p>

    </div>

    <div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 col-xs-offset-0 col-sm-offset-0 col-md-offset-3 col-lg-offset-3 toppad" >

               <div class="panel panel-info">

      <?php

       if(!empty($data)){

       ?>

              <div class="panel-heading">

        <h3 class="panel-title"><b><?php echo $data['booking_name'];?></b></h3>

       </div>

       <div class="panel-body">

        <div class="row">

         <div class="col-md-3 col-lg-3 square-box " align="center">

          <span class="glyphicon glyphicon-user glyphicon-lg"></span>

         </div>

                  <div class=" col-md-9 col-lg-9 ">

          <table class="table table-user-information">

           <tbody>

            <tr>

             <td>จำนวน :</td>

             <td><?php echo $data['booking_amount'];?></td>

            </tr>

            <tr>

             <td>ราคารวม :</td>

             <td><?php echo number_format($data['booking_total_price'],2);?></td>

            </tr>

            <tr>

             <td>อีเมล :</td>

             <td><?php echo $data['booking_email'];?></td>

            </tr>

            <tr>

             <td>เบอร์โทร :</td>

             <td><?php echo $data['booking_tel'];?></td>

            </tr>

            <tr>

             <td>พนักงานขายผู้รับผิดชอบ</td>

             <td><font color="<?php echo $font_color;?>"><?php echo $sale_respon;?></font></td>

            </tr>

           </tbody>

          </table>

                    <a href="list_data_encode.php" class="btn btn-primary">กลับไปยังหน้ารายการ</a>

         </div>

        </div>

       </div>

      <?php

        }else{

       echo '<h3 style="color:red">ไม่พบข้อมูลไอดีตามไอดีที่ระบุ'.$id.'</h3>';

       echo '<a href="list_data_encode.php" class="btn btn-primary">กลับไปยังหน้ารายการ</a>';

        }

      ?>

     </div>

    </div>

   </div>

  </div>

 </body>

</html>

บทส่งท้าย

นอกจากการเข้ารหัส ID เพื่อป้องกันการสุ่มแล้ว ยังมีอีกวิธีที่ใช้ได้ผลอย่างดีนั่นก็คือ "การเช็คสิทธิ์การเข้าถึงข้อมูลของผู้ใช้ในหน้านั้นๆ"

เช่น การเปิดดูรายการใดๆ จะต้องเช็คว่า Record นั้นเป็นรายการที่อยู๋ในความรับผิดชอบหรือเปล่า คือ ต้องมีฟิลด์ไว้เก็บไอดีของ ตัวอย่างเช่น sale_id เราก็ทำการเพิ่มคำสั่ง WHERE อีกตัวเข้าไปคือ

WHERE id = xx AND sale_id = YOUR_SESSION_ID

และในกรณีที่มีผู้ใช้งานระดับหัว ที่สามารถดูของลูกน้องได้ ก็อาจจะใช้วิธี JOIN sale_id ไปยังข้อมูลผู้ขายรายนั้นเพื่อดูว่ามีหัวหน้าเป็นใคร เพื่อจะได้เพิ่มคำสั่ง WHERE ไอดีหัวหน้าผู้ขายเรคอร์ด ที่ตรงกับ SESSION ของหัวหน้าที่ล็อกอินใช้งาน

WHERE id = xx AND (sale_id = YOUR_SESSION_ID OR table_join.leader_id = YOUR_SESSION_ID )


PHP CI MANIA PHP Code Generator 
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/




อ้างอิง
1. A simple two-way function to encrypt or decrypthttps://wppeople.net/blog/a-simple-two-way-function-to-encrypt-or-decrypt-a-string/
2. A simple two-way function to encrypt or decrypt a string
https://nazmulahsan.me/simple-two-way-function-encrypt-decrypt-string/
3. microtime — Return current Unix timestamp with
microsecondshttp://php.net/manual/en/function.microtime.php
4. md5 — Calculate the md5 hash of a string
http://php.net/manual/en/function.md5.php
5. substr — Return part of a string
http://php.net/manual/en/function.substr.php
6. base64_encode — Encodes data with MIME base64
http://php.net/manual/en/function.base64-encode.php
7. base64_decode — Decodes data encoded with MIME base64
http://php.net/manual/en/function.base64-decode.php
8. openssl_encrypt — Encrypts data
http://php.net/manual/en/function.openssl-encrypt.php
9. openssl_decrypt — Decrypts data
http://php.net/manual/en/function.openssl-decrypt.php
10. hash — Genera un valor cifrado con base a un string
http://php.net/manual/es/function.hash.php

ความคิดเห็น

ค้นหาในเว็บไซต์

10 อันดับ เพลงที่ได้รับความนิยมสูงสุด ประจำปี

การทำ Index ให้ MySQL Database เพื่อเพิ่มความเร็ว

สำหรับตัวอย่างนี้จะเป็นการ JOIN ตาราง 2 ตาราง 1. tb_reject_hd 2. tb_reject_desc ซึ่งจะเชื่อมกันด้วยฟิลด์ docno จะเห็นว่าเราสามารถคิวรี่เรียกข้อมูลออกมาได้ตอนที่ยังไม่ใส่ ORDER BY แต่เมื่อใส่ ORDER BY เข้าไป จะหมุนค้างจนหน้าเว็บหยุดทำงาน จากนั้นก็ลองเพิ่ม INDEX ให้กับฟิลด์ docno ในตาราง tb_reject_desc  ซึ่งในตัวอย่างนี้จะสร้างตารางใหม่ขึ้นมาจากตารางเดิม เปลี่ยนชื่อเป็น tb_reject_desc_with_index และทำการเพิ่ม INDEX KEY เข้าไป เมื่อทดสอบคิวรี่แบบมี ORDER BY จะเห็นว่าสามารถแสดงผลได้ทันที จากการสังเกตตัวเลขเวลาในการประมวลผล จะเห็นได้ว่าแบบไม่ใช้ ORDER BY จะทำงานเร็วกว่า แต่ในการทำงานส่วนใหญ่ก็มักจะต้องใช้ ORDER BY อย่างหลีกเลี่ยงไม่ได้ เช่นกรณีค้นหา แบบเรียงลำดับ ตัวอย่างโค้ดคิวรี่ข้อมูลจากตารางที่ Add Index Key แล้ว <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Add Index Key</title> </head> <body> <h2>ORDER BY with INDE

แจกโค้ด PHP : รวมลิงค์ แจกฟรี!! ตัวอย่างโปรเจ็กต์ ที่พัฒนาด้วย PHP

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ  และด้านล่างนี้ก็เป็น Source Code PHP ระบบต่างๆ ที่มีเหล่าผู้ใจดีแจกฟรี!! ให้นำไปลองใช้ลองศึกษากันครับ แจกฟรี  !! ตัวอย่างการ  PHP  Booking # จองห้องประชุม  ผ่านเว็บครับ http://www.thaicreate.com/php/forum/090558.html ระบบแบบสอบถาม https://www.thaicreate.com/php/forum/099342.html แจก code!! การทำประเมินออนไลน์มี ไว้สำหรับพัฒนาต่อยอด https://www.thaicreate.com/php/forum/102203.html แจกฟรี PHP CodeIgniter CMS ให้ทุกท่านได้ลอง (รองรับ Responsive) http://www.thaicreate.com/php/forum/122929.html โดย : https://www.cszcms.com/ แจก PHP : ระบบยืม-คืนเอกสาร (จากตัวอย่าง เอกสารข้อมูลวัตถุดิบสินค้า) http://www.thaicreate.com/php/forum/103428.html แจกระบบ PHP Shopping Cart ระบบตะกร้าสินค้า ระบบสั่งซื้อ มีระบบตัดสต๊อก, สั่งซื้อวัตถุดิบคงเหลือ http://www.thaicreate.com/community/php-shooping-ca

PHP CI MANIA 0.8.4.09 แก้ไขปัญหา Import ไฟล์ Excel แล้วไม่สามารถบันทึกได้ + เพิ่มตัวเลือก Validate บางฟิลด์

- เพิ่มตัวเลือก Validate บางฟิลด์ กรณีละเว้นการตรวจสอบให้เอาเครื่องหมายเช็คถูกออก -  แก้ไขปัญหา Import ไฟล์ Excel แล้วไม่สามารถบันทึกได้ สมาชิก Premium ดาวน์โหลดได้ที่ http://fastcoding.phpcodemania.com/index.php/downloads PHP  CI  MANIA   - PHP Code Generator  โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม" ราคาสุดคุ้ม    http://fastcoding.phpcodemania.com

การสร้างเว็บไซต์ในปี 2023 นั้นจะต้องคำนึงถึงอะไรบ้าง

การสร้างเว็บไซต์ในปี 2023 นั้นจะต้องคำนึงถึงความเปลี่ยนแปลงของเทคโนโลยีและแนวโน้มการใช้งานของผู้ใช้ใหม่ๆ ดังนั้น นี่คือเทคนิคที่สามารถช่วยให้การสร้างเว็บไซต์ในปี 2023 เป็นไปได้อย่างรวดเร็วและเป็นประสิทธิภาพ: 1. ใช้ Responsive Design: การออกแบบเว็บไซต์ให้สามารถปรับขนาดได้ตามขนาดของหน้าจอของอุปกรณ์ต่างๆ เช่น โทรศัพท์มือถือ แท็บเล็ต และคอมพิวเตอร์ เพื่อให้ผู้ใช้สามารถเข้าถึงและใช้งานได้ง่ายและสะดวก 2. ใช้โครงสร้างของ HTML5: การใช้โครงสร้าง HTML5 จะช่วยให้เว็บไซต์ของคุณมีประสิทธิภาพและปรับปรุงในเรื่องของการเข้าถึงข้อมูล การใช้งานและความปลอดภัย 3. ใช้ CSS Grids หรือ Flexbox: การใช้ CSS Grids หรือ Flexbox จะช่วยให้ง่ายต่อการจัดหน้าเว็บไซต์ และสามารถปรับแต่งรูปแบบของเว็บไซต์ได้ง่ายขึ้น 4. ใช้ JavaScript Frameworks: การใช้ JavaScript Frameworks เช่น React, Angular, หรือ Vue.js จะช่วยให้สามารถสร้างเว็บไซต์ที่เป็น interactive และมีประสิทธิภาพได้อย่างรวดเร็ว 5. ใช้ Content Management Systems (CMS): การใช้ CMS เช่น WordPress, Joomla, หรือ Drupal จะช่วยให้สามารถสร้างเว็บไซต์ได้อย่างร PHP  CI  M

MySQL คำสั่ง SQL จัดเรียงคำตามตัวอักษร ภาษาไทย ในฟิลด์ที่กำหนด Collation เป็น utf-8

การจัดเรียงข้อมูลตามลำดับตัวอักษรไทย   CONVERT( name USING tis620 ) ASC การเรียงลำดับตัวอักษรแบบ tis-620 ในการเขียนโปรแกรม PHP เพื่อแสดงข้อมูลจากฐานข้อมูล MySQL การเขียนคำสั่ง SQL ให้จัดเรียงลำดับนั้น เราจะใช้ ORDER BY  และกำหนดฟิลด์ที่ต้องการจัดเรียงลำดับ เช่น ในตัวอย่างนี้จะเป็นการจัดเรียงตามลำดับตัวอักษรของชื่อเมนู นั่นก็คือฟิลด์ name นั่นเอง แต่ในขั้นตอนการสร้างฐานข้อมูลนั้น เราได้กำหนด Charset ของตารางและฟิลด์เป็นการจัดเรียง Collation แบบ utf-8 เอาไว้เพื่อให้รองรับภาษาแบบมาตรฐาน ดังนั้นเมื่อเขียนโปรแกรมสั่ง ORDER BY name ASC ก็จะมีการจัดเรียงที่จะให้คำที่มีสระนำหน้าอยู่หลัง ฮ. นกฮุก ไปเสียหมด จะเห็นว่าชื่อเมนูหรือสินค้าที่มี ข นำหน้าจะมาเป็นลำดับแรก ทั้งที่จริงๆแล้ว มีสินค้าที่เป็น ก อยู่หลายรายการ เพียงแต่ว่ามีสระนำหน้าอยู่เท่านั้นเอง จากรูปด้านบน จะมีรายการที่เป็น ก อยู่ 3 รายการ คือเมนู โกโก้ ต่างๆ แต่เพราะมีสระโอ นำหน้า จึงทำให้การจัดเรียงแบบ utf-8 ให้อยู่ในลำดับท้าย เพื่อแก้ไขปัญหานี้ การเขียนโปรแกรมเพื่อ ORDER BY จะต้องทำการเปลี่ยน

เปิด Notepad++ ขึ้นมาหลายๆหน้าต่าง และวิธีเปลี่ยนสี เปลี่ยน Theme มห้ notepad++

1. เริ่มจากตั้งต่างที่ Tool > Preference.. 2. ด้านซ้ายเลือกรายการ Multi-Instance ด้านขวาเลือก Always in multi-instance mode     กด Close เมื่อตั้งค่าเรียบร้อย 3. ไปที่ไอคอนโปรแกรม Notepad++ คลิกขวาเลือก Properties 4. เพิ่มคำว่า   -multiInst  ต่อท้ายหลังเครื่องหมายฟันคู่  กด OK เพื่อเสร็จสิ้น 5. ดับเบิ้ลคลิกเพื่อเปิด Notepad++ เพื่อเปิดโปรแกรมขึ้นมา 2 หน้าต่าง 6. ด้านซ้ายเอาไว้เขียน JavaScript ก็ปรับธีมให้สีต่างกัน เพื่อจดจำง่ายเวลาสลับไปมา อีกอย่างคือปรับสไตล์ของโค้ดในแต่ละส่วนตามชอบได้ด้วยเมนู Settings > Style Configurator... 7. เลือก ธีม ที่ต้องการ ชอบโทนสว่าง โทนมืดก็มีให้เลือกหลายแบบ 8. หากเลือกธีมแล้ว ยังไม่ถูกใจกับสีของโค้ดในแต่ละส่วน ก็สามารถปรับเพิ่มเติมได้ 9. ในหน้าต่างที่ 2 ก็ทำเช่นเดียวกัน แต่แนะนำให้เป็นคนละโทนสีกัน เพื่อความง่ายในการจดจำ     JavaScript Window     PHP Window ที่มา https://superuser.com/questions/549782/want-two-instances-windows-of-notepad PHP  CI  MANIA   -  PHP Code Generator  โปรแกรมช่วยสร้า

ว่าด้วยเรื่องของคำสั่ง goto ในภาษา PHP

PHP goto example <?php goto  a ; echo  'Foo' ;   a : echo  'Bar' ; ?> ผลลัพธ์ก็คือ จะแสดงข้อความว่า " Bar" ที่มา : http://php.net/manual/en/control-structures.goto.php ตัวผมเองก็เกิดคำถามว่าเอามาใช้ทำไร??? ก็นึกขึ้นได้ว่าสมัยก่อนตอนเรียนเคยเขียน Assembly แล้วจะมีคำสั่งเพื่อกระโดดไปทำงานส่วนต่างๆ ของโค้ดที่ยาวเป็นหน้ากระดาษ A4 แต่มีผลลัพธ์เพียงเพื่องานเล็กๆงานเดียว ก็เลยคิดว่า น่าจะใช้กับโค้ดที่ยาวเป็นร้อยๆบรรทัดและไม่มีฟังก์ชั่น หรือการเรียกคลาสใดๆได้ ก็เลยลองค้นหาดูว่าคนอื่นๆ เขาใช้คำสั่ง goto ใน PHP กันบ้างหรือเปล่านะ ก็ได้คำตอบเกี่ยวกับคำสั่ง goto ใน PHP มาดังภาพด้านบนนี้แหละครับ ^^; ก็แปลได้ประมาณว่า ถ้าไม่เหนือบ่ากว่าแรงอะไรก็คงไม่จำเป็นต้องใช้หรอกครับ เพราะใน PHP เราสามารถสร้างฟังก์ชั่นและเรียกใช้เมื่อไหร่ก็ได้ สามารถใช้ switch ....  case หรือ if .... else ยาวๆเพื่อตรวจสอบเงื่อนไขการทำงานได้สะดวกสบาย ก็เลยยังมองไม่ออกว่าจะนำมาใช้ตอนไหนอย่างไร แต่ถ้าใครอยากลองเอาไปใช้ก็ไม่เสียหายแต่อย่างใดครับ ^O^

PHP คำสั่ง echo คืออะไร

คำสั่ง echo คือ Function หนึ่งของ PHP ที่ใช้แสดงข้อมูลออกมาในหน้าเว็บ ไม่ว่าจะเป็น ตัวอักษร ตัวเลข หรือตัวแปรต่างๆ ที่เก็บข้อมูลที่ต้องการแสดงผล ถ้าเป็นการร่ายเวทมนต์ก็เหมือนการเสกให้ปรากฏออกมา "Aparecium..!! " (อะ-พา-เร-ซี-อึม..!!)  ทันใดนั้นหน้ากระดาษที่ว่างเปล่า ก็ค่อยๆปรากฏตัวอักษรขึ้นมาให้เห็น ตัวอย่างการใช้งาน <?php     echo "Hello World";     $number = 2016;     echo $number; ?> ดูข้อมูลเพิ่มเติมได้ที่  echo Function PHP  CI  MANIA   -  PHP Code Generator  โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น สนใจสั่งซื้อราคาสุดคุ้ม >>  http://fastcoding.phpcodemania.com/

กด Start ตรง mysql ใน XAMPP ไม่ได้ แก้ไขยังไงดี?

ข้อความ Error ที่ปรากฏดังนี้ 6:37:41  [mysql] This may be due to a blocked port, missing dependencies, 6:37:41  [mysql] improper privileges, a crash, or a shutdown by another method. 6:37:41  [mysql] Press the Logs button to view error logs and check 6:37:41  [mysql] the Windows Event Viewer for more clues 6:37:41  [mysql] If you need more help, copy and post this 6:37:41  [mysql] entire log window on the forums ต้องบอกก่อนว่าเคสนี้เกิดขึ้นเมื่อผมรัน XAMPP แบบ Portable แล้วดันไปขยับสาย USB การเชื่อมต่อก็เลยหลุดไป หลังจากถอดสาย USB แล้วเสียบใหม่ XAMP ก็รันได้แค่ Apache อย่างที่เห็นในภาพ หลังจากนั้นสิ่งที่ทำอย่างแรกก็คือ คัดลอก Error ไปค้นในเว็บแล้วลองทำไปเรื่อยๆ จนกว่าจะหาวิธีได้ xampp MySQL does not start https://stackoverflow.com/questions/18177148/xampp-mysql-does-not-start เว็บแรกทำให้รู้ว่าน่าจะเกี่ยวกับ Port ก็เลยลองเปลี่ยนเป็นพอร์ตอื่นก็ Start ได้ทันที You also need to change port 3306 to 3307 in xampp\php\php.ini แต่...นี่ยังไม่ใช่ที่ต้อ

SELECT ซ้อน SELECT (GROUP BY, HAVING, SUBQuery, COUNT)

เมื่อต้องการนับจำนวนรายการตามเงื่อนไข แต่ก็จำเป็นต้องใช้ GROUP BY เพราะการใช้ COUNT + DISTINCT ไม่สามารถดึงข้อมูลตามเงื่อนไขได้  อยากจะนับจำนวนสมาชิกที่ชำร ะเงิน ถ้าใช้ COUNT() ก็จะออกมาหมด ทำให้ได้จำนวนเกินจากความเป ็นจริง เพราะสมาชิกบางคนชำระมากกว่ า 1 ครั้ง ก็เลยต้องเอามา GROUP กันด้วย รหัสสมาชิกก่อน เพื่อตัดเรคอร์ดที่ซ้ำกันออ กไป สมาชิกจะชำระกี่ครั้ง ก็นับเป็น 1 คน (เพราะเป็นสมาชิกคนเดียวกัน ) จะเห็นว่า จะได้ยอดที่ถูกต้อง 139 แต่ข้อมูลมันแจกแจงรายการต้ อง 139 แถว ซึ่งเราไม่ได้อยากได้รายละเ อียด แค่อยากนับจำนวนเท่านั้นจะท ำไงล่ะทีนี้ ก็จัดการ SELECT ครอบ SELECT ไว้เลย ซึ่งก็คือการทำ SubQuery นั่นเอง ก็จะออกมาเรคอร์ดเดียว เป็นจำนวนที่ต้องการนำไปใช้ งานได้ทันที จริงๆแล้วเราใช้ DISTINCT ได้นะ ถ้าเงื่อนไขมีแค่เท่านี้ ไม่จำเป็นต้อง SubQuery ดูสิ พอนับแบบตัดรายการซ้ำกันออก ก็ได้ 139 พอดิบพอดีเลย ใช่ครับ ถ้าเงื่อนไขมีเพียงเท่านี้ก ็ใช้ได้เลย แต่ถ้ามีเงื่อนไขอื่นล่ะ??? ถ้าจะนับเฉพาะสมาชิกที่ชำระ เงินตั้งแต่ 1500 บา

เนื้อเพลงที่ได้รับความนิยม ในรอบสัปดาห์

การทำ Index ให้ MySQL Database เพื่อเพิ่มความเร็ว

สำหรับตัวอย่างนี้จะเป็นการ JOIN ตาราง 2 ตาราง 1. tb_reject_hd 2. tb_reject_desc ซึ่งจะเชื่อมกันด้วยฟิลด์ docno จะเห็นว่าเราสามารถคิวรี่เรียกข้อมูลออกมาได้ตอนที่ยังไม่ใส่ ORDER BY แต่เมื่อใส่ ORDER BY เข้าไป จะหมุนค้างจนหน้าเว็บหยุดทำงาน จากนั้นก็ลองเพิ่ม INDEX ให้กับฟิลด์ docno ในตาราง tb_reject_desc  ซึ่งในตัวอย่างนี้จะสร้างตารางใหม่ขึ้นมาจากตารางเดิม เปลี่ยนชื่อเป็น tb_reject_desc_with_index และทำการเพิ่ม INDEX KEY เข้าไป เมื่อทดสอบคิวรี่แบบมี ORDER BY จะเห็นว่าสามารถแสดงผลได้ทันที จากการสังเกตตัวเลขเวลาในการประมวลผล จะเห็นได้ว่าแบบไม่ใช้ ORDER BY จะทำงานเร็วกว่า แต่ในการทำงานส่วนใหญ่ก็มักจะต้องใช้ ORDER BY อย่างหลีกเลี่ยงไม่ได้ เช่นกรณีค้นหา แบบเรียงลำดับ ตัวอย่างโค้ดคิวรี่ข้อมูลจากตารางที่ Add Index Key แล้ว <!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title>Add Index Key</title> </head> <body> <h2>ORDER BY with INDE

PHP CI MANIA 0.8.4.09 แก้ไขปัญหา Import ไฟล์ Excel แล้วไม่สามารถบันทึกได้ + เพิ่มตัวเลือก Validate บางฟิลด์

- เพิ่มตัวเลือก Validate บางฟิลด์ กรณีละเว้นการตรวจสอบให้เอาเครื่องหมายเช็คถูกออก -  แก้ไขปัญหา Import ไฟล์ Excel แล้วไม่สามารถบันทึกได้ สมาชิก Premium ดาวน์โหลดได้ที่ http://fastcoding.phpcodemania.com/index.php/downloads PHP  CI  MANIA   - PHP Code Generator  โปรแกรมช่วยสร้างโค้ด "ลดเวลาการเขียนโปรแกรม" ราคาสุดคุ้ม    http://fastcoding.phpcodemania.com

การสร้างเว็บไซต์ในปี 2023 นั้นจะต้องคำนึงถึงอะไรบ้าง

การสร้างเว็บไซต์ในปี 2023 นั้นจะต้องคำนึงถึงความเปลี่ยนแปลงของเทคโนโลยีและแนวโน้มการใช้งานของผู้ใช้ใหม่ๆ ดังนั้น นี่คือเทคนิคที่สามารถช่วยให้การสร้างเว็บไซต์ในปี 2023 เป็นไปได้อย่างรวดเร็วและเป็นประสิทธิภาพ: 1. ใช้ Responsive Design: การออกแบบเว็บไซต์ให้สามารถปรับขนาดได้ตามขนาดของหน้าจอของอุปกรณ์ต่างๆ เช่น โทรศัพท์มือถือ แท็บเล็ต และคอมพิวเตอร์ เพื่อให้ผู้ใช้สามารถเข้าถึงและใช้งานได้ง่ายและสะดวก 2. ใช้โครงสร้างของ HTML5: การใช้โครงสร้าง HTML5 จะช่วยให้เว็บไซต์ของคุณมีประสิทธิภาพและปรับปรุงในเรื่องของการเข้าถึงข้อมูล การใช้งานและความปลอดภัย 3. ใช้ CSS Grids หรือ Flexbox: การใช้ CSS Grids หรือ Flexbox จะช่วยให้ง่ายต่อการจัดหน้าเว็บไซต์ และสามารถปรับแต่งรูปแบบของเว็บไซต์ได้ง่ายขึ้น 4. ใช้ JavaScript Frameworks: การใช้ JavaScript Frameworks เช่น React, Angular, หรือ Vue.js จะช่วยให้สามารถสร้างเว็บไซต์ที่เป็น interactive และมีประสิทธิภาพได้อย่างรวดเร็ว 5. ใช้ Content Management Systems (CMS): การใช้ CMS เช่น WordPress, Joomla, หรือ Drupal จะช่วยให้สามารถสร้างเว็บไซต์ได้อย่างร PHP  CI  M

แจกโค้ด PHP : รวมลิงค์ แจกฟรี!! ตัวอย่างโปรเจ็กต์ ที่พัฒนาด้วย PHP

       สำหรับหลายท่านที่ขอโค้ดเข้ามาทาง Inbox ของเฟซบุ๊กแฟนเพจ หรือถามถึงระบบต่างๆหลังไมค์มานั้น ส่วนใหญ่ก็มีแจกอยู่แล้วในเว็บบอร์ด ThaiCreate.Com นะครับ  และด้านล่างนี้ก็เป็น Source Code PHP ระบบต่างๆ ที่มีเหล่าผู้ใจดีแจกฟรี!! ให้นำไปลองใช้ลองศึกษากันครับ แจกฟรี  !! ตัวอย่างการ  PHP  Booking # จองห้องประชุม  ผ่านเว็บครับ http://www.thaicreate.com/php/forum/090558.html ระบบแบบสอบถาม https://www.thaicreate.com/php/forum/099342.html แจก code!! การทำประเมินออนไลน์มี ไว้สำหรับพัฒนาต่อยอด https://www.thaicreate.com/php/forum/102203.html แจกฟรี PHP CodeIgniter CMS ให้ทุกท่านได้ลอง (รองรับ Responsive) http://www.thaicreate.com/php/forum/122929.html โดย : https://www.cszcms.com/ แจก PHP : ระบบยืม-คืนเอกสาร (จากตัวอย่าง เอกสารข้อมูลวัตถุดิบสินค้า) http://www.thaicreate.com/php/forum/103428.html แจกระบบ PHP Shopping Cart ระบบตะกร้าสินค้า ระบบสั่งซื้อ มีระบบตัดสต๊อก, สั่งซื้อวัตถุดิบคงเหลือ http://www.thaicreate.com/community/php-shooping-ca

PHP การแสดงสถานะการจอง ด้วยเก้าอี้ สีเขียว สีแดง

สามารถประยุกต์ใช้กับการ จองที่นั่งโรงหนัง ที่นั่งห้องเรียนพิเศษ การจองรถ จองห้องพัก เพียงแค่เปลี่ยน Item เป็นสิ่งที่ต้องการสื่อถึงเท่านั้น ก็สามารถใช้แทนกันได้เลย ซึ่งในบทความนี้จะยังไม่กล่าวถึงการดึงข้อมูลจากฐานข้อมูล และการเรียกฟังก์ชั่นจอง หรือการตรวจสอบสถานะการจองว่า สามาถจองได้หรือไม่ ซึ่งจะนำเสนอในบทความต่อๆไป

จัดระเบียบโค้ด ใน Notepad++ (Auto indentation plugin)

เวลาเขียนโค้ด แล้วไม่ได้จัดรูปแบบ หรือเอาโค้ดจาก Text Editor หนึ่งมาใช้ในอีกตัวหนึ่งก็มีโอกาสที่ Tab หรือ Space bar จะต่างกัน แล้วเราจะมานั่ง TAB เองก็คงไม่ไหว จึงจำเป็นต้องหา Plugin เข้ามาช่วย ลองค้นดูก็เจอกับกระทู้นี้ >> แม้หน้าตาจะไม่ตรงกันแต่หลักๆก็คือเพิ่ม Plugins เข้าไปชื่อ Indent By fold อ่านเต็มๆได้ที่นี่ https://softwarerecs.stackexchange.com/questions/1496/auto-indentation-plugin-for-notepad

MySQL คำสั่ง SQL จัดเรียงคำตามตัวอักษร ภาษาไทย ในฟิลด์ที่กำหนด Collation เป็น utf-8

การจัดเรียงข้อมูลตามลำดับตัวอักษรไทย   CONVERT( name USING tis620 ) ASC การเรียงลำดับตัวอักษรแบบ tis-620 ในการเขียนโปรแกรม PHP เพื่อแสดงข้อมูลจากฐานข้อมูล MySQL การเขียนคำสั่ง SQL ให้จัดเรียงลำดับนั้น เราจะใช้ ORDER BY  และกำหนดฟิลด์ที่ต้องการจัดเรียงลำดับ เช่น ในตัวอย่างนี้จะเป็นการจัดเรียงตามลำดับตัวอักษรของชื่อเมนู นั่นก็คือฟิลด์ name นั่นเอง แต่ในขั้นตอนการสร้างฐานข้อมูลนั้น เราได้กำหนด Charset ของตารางและฟิลด์เป็นการจัดเรียง Collation แบบ utf-8 เอาไว้เพื่อให้รองรับภาษาแบบมาตรฐาน ดังนั้นเมื่อเขียนโปรแกรมสั่ง ORDER BY name ASC ก็จะมีการจัดเรียงที่จะให้คำที่มีสระนำหน้าอยู่หลัง ฮ. นกฮุก ไปเสียหมด จะเห็นว่าชื่อเมนูหรือสินค้าที่มี ข นำหน้าจะมาเป็นลำดับแรก ทั้งที่จริงๆแล้ว มีสินค้าที่เป็น ก อยู่หลายรายการ เพียงแต่ว่ามีสระนำหน้าอยู่เท่านั้นเอง จากรูปด้านบน จะมีรายการที่เป็น ก อยู่ 3 รายการ คือเมนู โกโก้ ต่างๆ แต่เพราะมีสระโอ นำหน้า จึงทำให้การจัดเรียงแบบ utf-8 ให้อยู่ในลำดับท้าย เพื่อแก้ไขปัญหานี้ การเขียนโปรแกรมเพื่อ ORDER BY จะต้องทำการเปลี่ยน

กด Start ตรง mysql ใน XAMPP ไม่ได้ แก้ไขยังไงดี?

ข้อความ Error ที่ปรากฏดังนี้ 6:37:41  [mysql] This may be due to a blocked port, missing dependencies, 6:37:41  [mysql] improper privileges, a crash, or a shutdown by another method. 6:37:41  [mysql] Press the Logs button to view error logs and check 6:37:41  [mysql] the Windows Event Viewer for more clues 6:37:41  [mysql] If you need more help, copy and post this 6:37:41  [mysql] entire log window on the forums ต้องบอกก่อนว่าเคสนี้เกิดขึ้นเมื่อผมรัน XAMPP แบบ Portable แล้วดันไปขยับสาย USB การเชื่อมต่อก็เลยหลุดไป หลังจากถอดสาย USB แล้วเสียบใหม่ XAMP ก็รันได้แค่ Apache อย่างที่เห็นในภาพ หลังจากนั้นสิ่งที่ทำอย่างแรกก็คือ คัดลอก Error ไปค้นในเว็บแล้วลองทำไปเรื่อยๆ จนกว่าจะหาวิธีได้ xampp MySQL does not start https://stackoverflow.com/questions/18177148/xampp-mysql-does-not-start เว็บแรกทำให้รู้ว่าน่าจะเกี่ยวกับ Port ก็เลยลองเปลี่ยนเป็นพอร์ตอื่นก็ Start ได้ทันที You also need to change port 3306 to 3307 in xampp\php\php.ini แต่...นี่ยังไม่ใช่ที่ต้อ

PHP + Fullcalendar กับ MySQL

หลักการทำงาน เรียกข้อมูลจากตาราง tb_event ด้วยฟังก์ชั่นของ MySQLi ข้อมูลจากฐานข้อมูลจะถูกวนลูปเก็บไว้ใน $data และจะถูกส่งไปที่ Fullcalendar ด้วยการแปลงข้อมูลจาก PHP ให้อยู่ในรูปแบบ JSON อาร์เรย์ด้วยฟังก์ชั่น json_encode()

PHP คืออะไร : มีหลักการทำงาน และสิ่งที่น่าสนใจอะไรบ้าง?

PHP คืออะไร? PHP ย่อมาจากคำว่า "Personal Home Page Tool" (ปัจจุบันได้เพิ่มเติมคำย่อใหม่โดยรวมกับตัวย่อเป็น  PHP : PHP Hypertext Preprocessor ) ซึ่งเป็นภาษาประเภท Script Language ที่ทำงานแบบ Server Side Script กระบวนการทำงานจะทำงานแบบ โปรแกรมแปลคำสั่ง  interpreter คือแปลภาษาทุกครั้งที่มีคนเรียกสคริปต์ ข้อดีคือ ไม่ต้องนำไปประมวลผลใหม่ (Compiler) เมื่อจะนำโปรแกรมไปใช้งาน หรือจะอัพเดตเวอร์ชั่นของโปรแกรม สามารถอัพโหลดขึ้นไปทับไฟล์เดิมแล้วใช้งานได้ทันที ขอเสียที่ต่างกันอย่างชัดเจนก็คือ กรณี Syntax ผิดจะรู้ก็ต่อเมื่อมีผู้ใช้งานเจอบั๊ก ภาษา PHP  จัดอยู่ในประเภท การเขียนโปรแกรมบนเว็บ (Web-based Programming) เพราะเราจะเก็บโค้ดคำสั่ง หรือสคริปต์ทั้งหมดที่เขียนขึ้นมาไว้บนเครื่องเซิร์ฟเวอร์ที่เดียว (Web Server)  และให้ผู้ใช้งาน (Client) เรียกใช้งานโปรแกรมผ่านเว็บเบราเซอร์ต่างๆ เช่น Internet Explorer, Mozilla Firefox, Google Chrome, Opera, Safari ฯลฯ เพื่อนำข้อมูลมาแสดงผลที่หน้าจอของผู้ใช้แต่ละคนนั่นเอง PHP มีอะไรน่าสนใจบ้าง? เรามาลองพูดถึงเรื่องของการสร้างเว็บไซต์ที่มีระบบ

ค้นหาบล็อกนี้