Datatables Highlight Row

Wednesday, November 21, 2018

Function untuk datatables lama. Jika perlu highlight mana-mana baris data, gunakan function ini.

Contoh, kita perlu highlight baris data yang ada perkataan "Bajau". Dan baris data ini berada di baris yang ke-35. Jika datatables kita setkan paging setiap 10 data, maka Bajau akan berada di page ke-4.

Function ini akan langkah ke page #4, dan highlightkan baris data tersebut.

function highlight_row(string_to_search, target_column_index, color, datatable_object_id){

 var datatable_object=tables_id[datatable_object_id];
 var value=string_to_search;
 var index=target_column_index;

 value=value+'';

 var a=datatable_object.DataTable();
 var list=a.fnGetNodes();

 for(var i=0; i<list.length; i++){

  var b=$(list[i]);

  var s=b[0].children[index].innerText+'';

  s=s.trim();
  s=s.toUpperCase();

  value=value.toUpperCase();

  if(s==value){
   row_number=i;
   i=list.length;
  }
 }
 $($(a.fnGetNodes()[row_number]).children()).css('background', color);

 var t=(a.fnPagingInfo()).iLength;
 var n=Math.floor(row_number/t);

 a.fnPageChange(n);
}

thisName tu kita berikan nama "bajau".

Jadi, nilai yang perlu diberikan pada function highlight_row adalah: thisName, 2 (kedudukan "bajau" tu terletak pada column ke-2), datatable_bangsa (id bagi datatables yang digunakan).

thisName=$('#data<?php echo $_POST['ruj_bangsa']['title_s'] ?>2').val();

setTimeout(function(){
  highlight_row(thisName, 2, '#ffff66', 'datatable_bangsa');
}, 1000);

Dump Dan Restore MySQL

Monday, October 02, 2017

Dump Satu Database
mysqldump nama_db > nama_db.sql
Dump Dari remote database
mysqldump -u <db_username> -h <db_host> -p db_name table_name > table_name.sql
Dump satu table
mysqldump nama_db nama_table > nama_table.sql
Dump lebih dari satu table
mysqldump nama_db nama_table1 nama_table2 nama_table2 > banyak_table.sql
Restore
mysql -u username -p db_name < /path/to/table_name.sql

Datepicker Butang Today dan Tukar Bahasa

Tuesday, September 19, 2017

Bagi memamparkan butang TODAY pada pilihan datepicker, setkan btntoday = true.

Buka fail .../bootstrap-datepicker/js/bootstrap-datepicker.js, tukar setting di var defaults = $.fn.datepicker.defaults = { ... }

 var defaults = $.fn.datepicker.defaults = {
  autoclose: false,
  beforeShowDay: $.noop,
  calendarWeeks: false,
  clearBtn: false,
  daysOfWeekDisabled: [],
  endDate: Infinity,
  forceParse: true,
  format: 'mm/dd/yyyy',
  keyboardNavigation: true,
  language: 'ms',
  minViewMode: 0,
  orientation: "auto",
  rtl: false,
  startDate: -Infinity,
  startView: 0,
  todayBtn: true,
  todayHighlight: false,
  weekStart: 0
 };

Bagi menukar bahasa melayu, selain setting di atas tukar mode language: 'ms', tambah maklumat ms seperti di bawah. Tambah  ms selepas en pada var dates = $.fn.datepicker.dates = { en: { ... }, ms: { ... }};

 var dates = $.fn.datepicker.dates = {
  en: {
   ...
  },
  ms: {
   days: ["Ahad", "Isnin", "Selasa", "Rabu", "Khamis", "Jumaat", "Sabtu", "Ahad"],
   daysShort: ["Ahd", "Isn", "Sel", "Rbu", "Kha", "Jum", "Sab", "Ahd"],
   daysMin: ["Ahd", "Isn", "Sel", "Rbu", "Kha", "Jum", "Sab", "Ahd"],
   months: ["Januari", "Februari", "Mac", "April", "Mei", "Jun", "Julai", "Ogos", "September", "Oktober", "November", "Disember"],
   monthsShort: ["Jan", "Feb", "Mac", "Apr", "Mei", "Jun", "Jul", "Ogos", "Sep", "Okt", "Nov", "Dis"],
   today: "HARI INI",
   clear: "Clear"
  }
 };


Nota ini merujuk kepada datepicker versi di bawah.
 * Copyright 2012 Stefan Petre
 * Improvements by Andrew Rowls

Decrypt base64 Data Di Linux

Wednesday, February 08, 2017

Bila guna bash script, dan perlu sorokkan password, boleh guna encrypt base64, kemudian decrypt balik

#!/bin/sh

username='my_username'
password='my_password'

username_encoded=$(echo -n "$username" | openssl enc -base64)
password_encoded=$(echo -n "$password" | openssl enc -base64)

username_decoded=$(echo "$username_encoded" | openssl enc -d -base64)
password_decoded=$(echo "$password_encoded" | openssl enc -d -base64)

echo "username: $username"
echo "username_encoded: $username_encoded"
echo "username_decoded: $username_decoded"
echo "password: $password"
echo "password_encoded: $password_encoded"
echo "password_decoded: $password_decoded"
Output:
username: my_username
username_encoded: bXlfdXNlcm5hbWU=
username_decoded: my_username
password: my_password
password_encoded: bXlfcGFzc3dvcmQ=
password_decoded: my_password
Bila encode, ada hantar newline. Bila decode, tak new line, tak payah guna -n pada echo.
Contoh bila nak guna. Setkan awal-awal, hasilnya, masukkan dalam script untuk di decode kan semula.
mygpis@mygpis-db:~$ echo -n "mysecpassword" | openssl enc -base64
TXlHUElTMTIz
mygpis@mygpis-db:~$ vi task.sh

#!/bin/bash

DBHOST='localhost'
DBUSRN='root'
#DBPASS='mysecpassword'#commentkan
DBNAME='mygpis'
DBPASS=$(echo "TXlHUElTMTIz" | openssl enc -d -base64)

PHP Dapatkan URL semasa

Thursday, February 02, 2017

Contoh URL: http://example.com/folder1/folder2/yourfile.php?var=blabla#12345

$_SERVER["DOCUMENT_ROOT"] === /home/user/public_html
$_SERVER["SERVER_ADDR"]   === 10.34.12.123
$_SERVER['HTTP_HOST']     === example.com (atau dengan WWW)
$_SERVER["REQUEST_URI"]   === /folder1/folder2/yourfile.php?var=blabla
__FILE__                  === /home/user/public_html/folder1/folder2/yourfile.php
basename(__FILE__)        === yourfile.php
__DIR__                   === /home/user/public_html/folder1/folder2 [sama juga: dirname(__FILE__)]
$_SERVER["QUERY_STRING"]  === var=blabla

$_SERVER["REQUEST_URI"]   === /folder1/folder2/yourfile.php?var=blabla
parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH)  === /folder1/folder2/yourfile.php 
$_SERVER["PHP_SELF"]      === /folder1/folder2/yourfile.php

//jika file "yourfile.php" tu include dalam "parentfile.php" , dan "parentfile.PHP?abc" dibuka:
$_SERVER["PHP_SELF"]       === /parentfile.php
$_SERVER["REQUEST_URI"]    === /parentfile.php?abc
$_SERVER["SCRIPT_FILENAME"]=== /home/user/public_html/parentfile.php
str_replace($_SERVER["DOCUMENT_ROOT"],'', str_replace('\\','/',__FILE__ ) )  === /folder1/folder2/yourfile.php

Jadi, nak dapatkan URL semasa secara penuh
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

Jika rasanya URL kita terlibat dengan https, sebaiknya check sekali.
$actual_link = (isset($_SERVER['HTTPS']) ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";



PHP Excel Remove Row

Sunday, September 25, 2016

Remove row.

Contoh di bawah, jika nak remove row nombor 6 sebanyak 4 kali.


<?php
for($i=0; $i<4; $i++){
 $objPHPExcel->getActiveSheet()->removeRow(6);
}
?>

PHP Excel Karekter Enter

Masukkan key Enter ke dalam field Excel guna PHPExcel. Gunakan str_replace(). Replace coma kepada \n

<?php 
$objPHPExcel->getActiveSheet()->SetCellValue('O'.$bil, strtoupper(str_replace(',',"\n",c($row['kriteria']))));
setCenterOnEmpty($row['kriteria'], 'O'.$bil, $objPHPExcel);


if(!function_exists("setCenterOnEmpty")){
function setCenterOnEmpty($data, $index, $objPHPExcel){
 if($data==' - ' || $data=='-' || $data=='')$objPHPExcel->getActiveSheet()->getStyle($index)->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
}}
?>

Javascript Papar Textarea Value Newline

Thursday, July 07, 2016

var addrs = $("#alamat").val();
var lines = addrs.split(/\n/);
var texts = []
for (var i=0; i < lines.length; i++) {
  if (/\S/.test(lines[i])) {
    texts.push($.trim(lines[i])+'<br>');
  }
}

alert(JSON.stringify(texts));

$("#dispAlamat").html(texts);

Semak Key di Dalam Array

Friday, February 19, 2016

Apabila telah disetkan key dan value bagi sesuatu array, value array tersebut boleh dipanggil menggunakan key yang telah dikenalpasti.

Sekiranya key yang diberikan tidak dikenali, akan mendatangkan error pada coding.

Jadi, bagi mengatasi masalah ini, setiap key yang dimasukkan, perlu disemak terlebih dahulu adakah ia wujud. Gunakan fungsi in_array yang PHP sediakan.

Dilihat pada contoh di bawah, pada satu table, terdapat senarai PTJ untuk dirujuk.


+------------+--------------------------------+
| kod_ptj    | nama_ptj                       |
+------------+--------------------------------+
| 123456789  | SEKTOR PENJAGAAN KULIT         |
| 987654321  | BAHAGIAN PENGURUSAN KEWANGAN   |
| 121212312  | BAHAGIAN PENGURUSAN MAKANAN    |
| 345345345  | BAHAGIAN PENGURUSAN PERJALANAN |
| 678678678  | BAHAGIAN PENGURUSAN TANGISAN   |
+------------+--------------------------------+


Select yang pertama untuk dapatkan data tersebut dan dimasukkan ke dalam array.

Kemudian, select senarai data yang dimahukan beserta kod PTJ. Kod tersebut boleh digunakan untuk memaparkan nama PTJ.

Masalah timbul sekiranya dalam senarai tersebut, ada beberapa kod yang tiada di dalam table rujukan di atas. Jadi, array tidak dapat mengesan apa-apa data dan menganggap ianya adalah error.

Apa yang boleh dibuat, sebelum memaparkannya, sila semak terlebih dahulu menggunakan in_array.


<?php 
$sqlptj = "SELECT untuk dapatkan kod PTJ dan nama PTJ";
$resultptj = mysql_query($sqlptj);
while($rowptj = mysql_fetch_array($resultptj))
{
 $kodptj = $rowptj["pt_kod_ptj"];
 $namaptj["$kodptj"] = $rowptj["pt_nama_ptj"];
}

$sql3 = "SELECT semua data dan salah satu data tersebut ada kod PTJ";
$result3 = mysql_query($sql3);
while($row3 = mysql_fetch_array($result3))
{
 $kodptjp = $row3["kr_ptj"];
 $displayptj = "";
 
 if (in_array($namaptj["$kodptjp"], $namaptj)) {
  $displayptj = $namaptj["$kodptjp"];
 } 
 else { 
  $displayptj = "<span class=\"label label-sm label-warning\">".$kodptjp."</span>";
 }
?>
<tr>
 <td><?php echo $row3["xxx"]; ?></td>
 <td><?php echo $row3["xxy"]; ?></td>
 <td><?php echo $row3["$xxz"]; ?></td>
 <td><?php echo $displayptj; ?></td>
</tr>
<?php 
}
?>

Selain menggunakan in_array, boleh juga menggunakan array_key_exists. Cara menggunakannya juga sama. Jika menggunakan contoh code di atas, berikut adalah cara menggunakannya.


<?php
//copy code di atas
//code asal guna in_array
if (in_array($namaptj["$kodptjp"], $namaptj)) {
  $displayptj = $namaptj["$kodptjp"];
} 

//code checking guna key exist. Terus check key, bukan check value
if (array_key_exists($row3["kr_ptj"], $namaptj)) {
    echo "Key untuk array ini telah wujud";
}

Bezanya in_array lebih kepada semakan terhadap value, manakala array_key_exists menyemak key atau index di dalam satu array.

Rollback Restore Last Data

Nota: logid = history ID untuk table history atau table log yang digunakan dalam post ini.

Sambungan post sebelum ini, Rollback Backup Data Secara Manual

Sebelum ini kita membuat rollback merujuk kepada ID backup data (logid) di mana ID itu sudah di pilih siap-siap.

Kali ini, kita lihat bagaimana untuk rollback data yang terakhir sahaja di mana logid tidak diketahui yang mana satu. Bagi mendapatkan logid terakhir, gunakan carian pada timestamp.

Pada contoh ini, kita menganggap ID untuk original data telah diberikan. Dapatkan logid menggunakan SQL.


<?php 
$pkid = $_GET['pkid'];
$logid="";

$sql3 = "SELECT a.logid, a.id, a.timestamp FROM data_log a 
   WHERE a.id='$pkid' 
   AND a.timestamp=(SELECT MAX(a1.timestamp) 
   FROM data_log a1 
   WHERE a1.id='$pkid')";
$result3 = mysql_query($sql3);
while($row3 = mysql_fetch_array($result3))
{
 $logid = $row3["logid"];
}
?>

Setelah logid diperoleh, lakuan arahan seperti yang ditunjukkan pada post sebelum ini.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php 
$result = mysql_query("SELECT * FROM data_log limit 1");
if (!$result) {
    die("Query to show fields from table failed");
}

$sql_rollback = "UPDATE data SET ";

$fields_num = mysql_num_fields($result);
//echo "fields_num=".$fields_num;
for($i=3;  $i<$fields_num; $i++)
{
    $field = mysql_fetch_field($result, $i);
//    echo "{$field->name}".$i."<br>";    
}

$result2 = mysql_query("SELECT * FROM data_log WHERE logid = '$logid'");
if (!$result2) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}
$row2 = mysql_fetch_row($result2);
//0 = running LogID 
//1 = Activity log 
//2 = ID for ori table
//3 ~ n = data
for($i=3; $i<$fields_num; $i++)
{
    $field = mysql_fetch_field($result, $i);
 if($i == ($fields_num - 1)){
  $sql_rollback .= "{$field->name} = '".$row2[$i]."'";
 } else {
  $sql_rollback .= "{$field->name} = '".$row2[$i]."', ";
 }
 //echo $row2[$i]; 
}
$field_id = mysql_fetch_field($result, 2);
$sql_rollback .=" WHERE {$field_id->name} = '".$row2[2]."'";
$resultrb = mysql_query($sql_rollback);
?> 

Membandingkan Antara Data Semasa dan Sebelum

Wednesday, February 17, 2016

Paparkan senarai data, di mana baris data di atas, adakah sama dengan data di bawahnya.

Dalam contoh di bawah, jika data di bawah adalah sama seperti di atas, table tidak perlu diwarnakan.

Jika sebaliknya, letakkan warna supaya pengguna perasan akan perubahan data yang berlaku.

Caranya, jalankan satu SQL untuk satu table yang hendak dipantau akan perubahannya.
Sebelum data tu dikeluarkan menggunakan while(), declare siap-siap color code html untuk table.
Declare juga data untuk $current dan $previous.

Kemudian, setiap kali panggil data di dalam while(), buat perbandingan antara $current dan $previous.

Setelah dapat hasilnya, dan sebelum tutup while() {}, berikan nilai $previous sama seperti nilai $current. Kerana ia akan digunakan apabila membuat semakan data yang seterusnya.

<?php
$sql3 = "SELECT bla bla bla";
$result3 = mysql_query($sql3);
$previousd1 = ""; 
$currentd1="";
$bgwarnad1 = "bgcolor=\"#F7FE2E\"";

while($row3 = mysql_fetch_array($result3))
{
 $currentd1 = $row3["data1"];
 if ($currentd1 === $previousd1) {
   $bgwarnad1 = "";
 }
?>
<tr>
 <td><?php echo $row3["id"]; ?></td>
 <td><?php echo $row3["timestamp"]; ?></td>
 <td <?php echo $bgwarnad1; ?>><?php echo $row3["data1"]; ?></td>
 <td><?php echo $row3["data2"]; ?></td>
 <td><?php echo $aktiviti["$akt"]; ?></td>
 <td><a href="rollback_item.php?logid=<?php echo $row3["logid"]; ?>" class="btn btn-success btn-sm mlm mrm"><i class="fa fa-history"></i>&nbsp;Rollback</a></td>
</tr>
<?php 
$previousd1 = $currentd1;
$bgwarnad1 = "bgcolor=\"#F7FE2E\"";
}
?>
 </tbody>
</table>  

 Hasilnya akan dapat seperti ini