Manipulasi Data Pada Blok Array Yang Terpilih

Sunday, October 12, 2014

Kita ada beberapa blok data di dalam satu array, dan hanya beberapa blok terpilih sahaja yang kita mahu manipulasi.

Contoh, katakan di bawah ini ada 10 array yang menyimpan data pekerja. Data yang disimpan adalah, IC, Nama, Alamat, Notelefon, Umur, Bandar, Poskod, Negeri, Jawatan, dan kenderaan.

Terdapat dua (2) data yang hendak dimanipulasi/encrypt iaitu Nama, dan Notelefon.

array semuafield = {IC, Nama, Alamat, Notelefon, Umur, Bandar, Poskod, Negeri, Jawatan, kenderaan}
array selectfield = {Nama, Notelefon}

Contoh data:

 IC | Nama | Alamat | Notelefon | Umur | Bandar | Poskod | Negeri | Jawatan | kenderaan  
 9801 | Faaris | Taman PP | 123 | 27 | Puchong | 56000 | Selangor | CEO | Kereta  
 0102 | Saajidah | Taman PP | 456 | 24 | Puchong | 56000 | Selangor | COO | Kereta  

Nilai g = 10; //jumlah array untuk 'semuafield'
Nilai a = 2; //jumlah array untuk 'selectedfield'

* Sekadar nota (sila abaikan): Data ini diambil dari database postgres, dijalankan menggunakan C++. Data yang terhasil dan yang telah dimanipulasi, akan disimpan ke dalam file data.txt dalam bentuk csv format.

Di bawah adalah contoh source code asal.

 ofstream myfile ("data.txt", std::ios_base::app);  
 if (myfile.is_open())  
 {  
   d = 0;  
   result Rp( Z.exec( sqlp ));  
   for (result::const_iterator c = Rp.begin(); c !=Rp.end(); ++c, d++) {  
    int count;  
    for (int k=0; k < g; k++)  
    {  
     count=0;  
     for (int m=0; m < a; m++)  
     {  
       if (selectfield[m] == semuafield[k])  
        {  
         myfile << mimos_init(&chipper_mimos, c[semuafield[k]], cipher_id, key, 16);  
        } else {  
        myfile << c[semuafield[k]].as<string>();  
       }  
      }  
     if(k < (g-1))  
      {  
       myfile << ", ";  
      }  
    }  
    myfile << "\n";  
   }  
  myfile.close();  
  }  
  else cout << "Unable to open file";  


* Sekadar nota (sila abaikan):
if(k < (g-1)) { myfile << ", "; } dan "\n" untuk memenuhi format CSV file. Tanda koma (,) memisahkan antara blok data dan tanda \n untuk membina newline pada baris data baru.

Secara logik mudah, code ini tiada masalah kerana pada gelung pertama, for (k < g), kita sudah keluarkan semua data satu persatu. Kemudian, di dalamnya kita buat checking untuk 'selectedfield' pula. Lihat pada gelung for (m < a) yang berada di dalam gelung yang awal. Di dalam gelung (m < a) ini, kita akan buat checking, jika terjumpa data di dalam blok 'selectedfield', kita akan mula encryptkan data tersebut sebelum dimasukkan ke dalam file. Jika tidak, data akan dimasukkan terus ke dalam file tanpa apa-apa manipulasi.

    for (int k=0; k < g; k++)  
    {  
     count=0;  
     for (int m=0; m < a; m++)  
     {                        
       if (selectfield[m] == semuafield[k])  
        {  
         myfile << mimos_init(&chipper_mimos, c[semuafield[k]], cipher_id, key, 16);  
        } else {  
        myfile << c[semuafield[k]].as<string>();  
       }  
      }  
     if(k < (g-1))  
      {  
       myfile << ", ";  
      }  
    }  
    myfile << "\n";  

Tetapi, hasil yang kita dapat tidak menepati syarat. Datanya bertindih dan seolah-oleh encryption berjalan secara tidak konsisten

 9801, uYnudWRXUlhVbGhWYkdoVw==Faaris, Taman PP, 123+4RSU1UxVXhWWGhXV0doWA==, 27, Puchong, 56000, Selangor, CEO, Kereta  
 0102, +4RSU1UxVXhWWGhXV0doWA==Saajidah, Taman PP, 456+4RSU1UxVXhWWGhXV0doWA==, 24, Puchong, 56000, Selangor, COO, Kereta  


Jika diperhatikan, pada nilai yang dapat, ada data berulang. Contoh:

uYnudWRXUlhVbGhWYkdoVw==Faaris

uYnudWRXUlhVbGhWYkdoVw== adalah satu nilai. Faaris adalah satu nilai yang lain. Tetapi keduanya bercantum menjadi satu.

Ini kerana, nilai a=2, dan gelung pada a akan berjalan sebanyak 2 kali. Semakan kali pertama, ia memberi nilai uYnudWRXUlhVbGhWYkdoVw==, dan semakan kali kedua, diberi nilai Faaris.

Ini berlaku kerana selepas checking berlaku dan berjumpa dengan apa yang hendak di cari, gelung berjalan sekali lagi seperti biasa. Bagi mengatasi masalah ini, setiap kali gelung membuat semakan, gunakan fungsi break. Lihat kod di bawah (dengan beberapa perubahan berbanding kod di atas tadi.)

 if (myfile.is_open())  
 {  
   d = 0;  
   result Rp( Z.exec( sqlp ));  
   for (result::const_iterator c = Rp.begin(); c !=Rp.end(); ++c, d++) {  
    int count;  
    for (int k=0; k < g; k++)  
    {  
     count=0;  
     for (int m=0; m < a; m++)  
     {  
      if (c[semuafield[k]].size()==0)  
      {  
       myfile << "NULL";  
       break;  
      }  
       if (selectfield[m] == semuafield[k])  
        {  
         myfile << mimos_init(&chipper_mimos, c[semuafield[k]], cipher_id, key, 16);  
         break;  
        } else {  
        count++;  
        //myfile << c[semuafield[k]].as();  
        //break;  
       }  
        if (count == a)  
        myfile << c[semuafield[k]].as();  
      }  
     if(k < (g-1))  
      {  
       myfile << ", ";  
      }  
    }  
    myfile << "\n";  
   }  
  myfile.close();  
  }  
  else cout << "Unable to open file";  

PHP Pagination

Tuesday, May 06, 2014

Bagi meringkaskan paparan pagination. Sambungan dari post sebelum ini.

<table class="table table-hover table-condensed">
 <thead>
 <tr>
  <th>title</th>
  <th>title</th>
  <th>title</th>
 </tr>
 </thead>
 <tbody>
<?php
$limit_rekod=200; //200 rekod akan dipaparkan dalam satu page
$num_range = 3; //jumlah butang page bersebelahan dengan current button di kiri dan kanan. Jika current butang = 6. Kiri papar 3,4 dan 5. Kanan pula papar 7,8 dan 9. Selebihnya tidak dipaparkan. 
$num_limit = $num_range + 4;
$paging_url = "viewdata.php";
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 
$start_from = ($page-1) * $limit_rekod; 

$sql = "SELECT .... 
 LIMIT $start_from, $limit_rekod";
$result = mysql_query($sql,$con);
while($row = mysql_fetch_array($result))
{
?> 
 <tr>
  <td><?php echo $row['xxx']; ?></td>
  <td><?php echo $row['xxx']; ?></td>
  <td><?php echo $row['xxx']; ?></td>
 </tr>
<?php 
}
?>
 </tbody>
</table>

<!-- mula untuk pagination -->
<?php  
$sqlpg = "SELECT ...."; //select tanpa limit  
$rs_result = mysql_query($sqlpg,$con);
$total_records = mysql_num_rows($rs_result); 
$total_pages = ceil($total_records / $limit_rekod); 
?>
<ul class="pagination mtm mbm">
 <li class="<?php if($page == 1) echo "disabled"; ?>"><a href="<?php echo $paging_url; ?>?page=1">«</a></li>
<?php 
if($total_pages < ($num_range))
{
 for ($i=1; $i<=$total_pages; $i++) { 
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php 
 };
} elseif($total_pages > $num_limit) {
 if(($page - $num_range) > 1) {
?>
 <li class=""><a href="<?php echo $paging_url; ?>?page=<?php echo ($page - 1); ?>">&lt;</a></li>
 <li class="disabled"><a href="">...</a></li>
<?php 
 }
 
 if(($page + $num_range) < $num_limit) {
  for ($i=1; $i<=($page+$num_limit); $i++) {
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php    
  };
 }elseif(($page + $num_range) > $total_pages) {
  for ($i=$page - $num_range; $i<=$total_pages; $i++) {
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php    
  };
 }else {
  for ($i=$page - $num_range; $i<=($page + $num_range); $i++) { 
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php 
  };
 }
 if(($page + $num_range) < $total_pages){
?>
 <li class="disabled"><a href="">...</a></li>
 <li class=""><a href="<?php echo $paging_url; ?>?page=<?php echo ($page + 1); ?>">&gt;</a></li>
<?php 
 }
}
?>
 <li class="<?php if($page == $total_pages) echo "disabled"; ?>"><a href="<?php echo $paging_url; ?>?page=<?php echo $total_pages; ?>">»</a></li>
</ul>

Paparan yang terhasil seperti di bawah.

Jadi, paparan tidak jadi terlalu panjang. Jika ada 1 juta data pun, tidak dipaparkan sehingga 5 ribu butang. Hanya beberapa butang sahaja.

PHP Pagination Basic

Tuesday, March 04, 2014

Rujukan ringkas untuk membuat paging di PHP.

<table class="table table-hover table-condensed">
 <thead>
 <tr>
  <th>title</th>
  <th>title</th>
  <th>title</th>
 </tr>
 </thead>
 <tbody>
<?php
$limitrekod=200; // 200 data akan dipaparkan dalam satu page.
if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; }; 
$start_from = ($page-1) * $limitrekod; 

$sql = "SELECT .... 
 LIMIT $start_from, $limitrekod";
$result = mysql_query($sql,$con);
while($row = mysql_fetch_array($result))
{
?> 
 <tr>
  <td><?php echo $row['xxx']; ?></td>
  <td><?php echo $row['xxx']; ?></td>
  <td><?php echo $row['xxx']; ?></td>
 </tr>
<?php 
$runno++;
}
?>
 </tbody>
</table>

<!-- mula untuk pagination -->
<?php  
$sqlpg = "SELECT ...."; //select tanpa limit  
$rs_result = mysql_query($sqlpg,$con);
$total_records = mysql_num_rows($rs_result); 
$total_pages = ceil($total_records / $limitrekod); 
?>
<ul class="pagination mtm mbm">
 <li class="<?php if($page == 1) echo "disabled"; ?>"><a href="viewdata.php?page=1">«</a></li>
<?php 
for ($i=1; $i<=$total_pages; $i++) { 
?>
 <li class="<?php if($page == $i) echo "active"; ?>"><a href="viewdata.php?page=<?php echo $i; ?>"><?php echo $i; ?></a></li>
<?php 
};
?>
 <li class="<?php if($page == $total_pages) echo "disabled"; ?>"><a href="viewdata.php?page=<?php echo $total_pages; ?>">»</a></li>
</ul>

Hasilnya akan dapat seperti di bawah

Jika datanya ada sejuta, maka akan terpaparlah butang page sebanyak (1000000/200) = 5 ribu butang.

Bagi data yang tidak banyak, sesuailah code di atas digunakan. Jika data yang terlalu banyak, perlu diringkaskan cara paparan paging tersebut.

File System PHP

Tuesday, January 28, 2014

Kegunaan fungsi file system di PHP

Nama FungsiKeterangan
basenameMenghasilkan nama file dari satu path
chmodMengubah mode akses file
chownMengubah pemilik file
copyMeng-copy file
dirnameMenghasilkan nama direktori dari suatu path file
disk_free_spaceMenampilkan baki space disk pada satu direktori
disk_total_spaceMenghasilkan jumlah size direktori
fcloseMenutup file yang dibuka
fgetcMengambil karakter-karakter dalam satu file teks
fgetsMengambil baris-baris dari file
file_existsPastikan satu file atau direktori wujud atau tidak
file_get_contentsMembaca isi file keseluruhan
file_put_contentsMenulis teks ke file
fileMembaca isi file ke dalam array
fileatimeMendapatkan waktu akses terakhir suatu file
filesizeMendapatkan ukuran file
filetypeMendapatkan tipe file
fopenMembuka file atau URL
is_dirPastikan satu filename itu adakah satu direktori
is_executablePastikan apakah filename boleh di execute
is_filePastikan apakah filename itu adakah satu file
is_readablePastikan filename boleh dibaca
is_writablePastikan filename boleh ditambah kemaskini kontennya
mkdirMembuat direktori
move_uploaded_fileMemindahkan file yang diupload ke lokasi baru
renameRename file atau direktori
rmdirPadam direktori
unlinkPadam file

basename

Fungsinya : Menghasilkan nama file dari suatu path
Sintaks php :
basename ( string $path [, string $suffix ] )
Parameter :
$path, adalah alamat file dengan lokasi direktorinya, contoh : /var/www/gambar/fileku.jpg
$suffix, akan menghilangkan akhirannya sesuai string $suffix

Contoh penggunaan: 
$path = "/home/httpd/html/index.php";
$file = basename($path);
echo $file;                         //Hasilnya index.php

$file = basename($path, ".php");
echo $file;                         //Hasilnya index
?>

chmod

Fungsinya : Mengubah mode akses file, untuk linux, unix
Sintaks php :

chmod ( string $filename , int $mode )
Contoh penggunaan :
// Read dan write hanya untuk pemilik
chmod("/direktori/filesaya", 0600);
// Pemilik boleh buat apa sahaja, read dan execute untuk others
chmod("/direktori/filesaya", 0755); 
?>

chown

Fungsinya : Mengubah pemilik file
Sintaks php :
chown ( string $filename , mixed $user )
Contoh penggunaan:
$file_name= "foo.php";
$path = "/home/sites/php.net/public_html/sandbox" . $file_name ;
$user_name = "root";
// Set pemilik file
chown($path, $user_name);
?>

copy

Fungsinya : Mengcopy file
Sintaks php :
copy ( string $source , string $dest [, resource $context ] )
Parameter :
$source , adalah file yang akan dicopy
$dest, adalah file tujuan
Contoh penggunaan :
$file = 'upload.php';
$newfile = 'uploadcopy.php';
if (!copy($file, $newfile)) {
    echo "gagal copy file $file...\n";
}else{
    echo "File $file berhasil di copy";
}
?>

dirname

Fungsinya : Menghasilkan nama direktori dari suatu path file
Sintaks php :
dirname ( string $path )
Contoh penggunaan :
$path = "/www/gambar/pic.jpg";
$file = dirname($path);
echo $file;
//Hasilnya /www/gambar
?>

disk_free_space

Fungsinya : Menghasilkan sisa space disk suatu direktori (dalam bytes)
Sintaks php :
disk_free_space ( string $directory )
Contoh penggunaan :
//linux, unix
$df = disk_free_space("/"); 
//Windows:
echo disk_free_space("C:");
echo disk_free_space("D:");
?>

disk_total_space

Fungsinya : Menghasilkan total size direktori (dalam bytes)
Sintaks php :
disk_total_space ( string $directory )
Contoh penggunaan :
//linux , unix
$df = disk_total_space("/");

//Windows:
echo disk_total_space("C:");
echo disk_total_space("D:");
?>

fclose

Fungsinya : Menutup file yang dibuka
Sintaks php :
fclose ( resource $handle )
Contoh penggunaan :
$file = fopen('somefile.txt', 'r');
fclose($file);
?>

fgetc

Fungsinya : Mengambil karakter-karakter suatu file teks
Sintaks php :
fgetc ( resource $handle )
Contoh penggunaan :
Misal anda punya filesaya.txt, yang isinya : 
namaorang
$fp = fopen('filesaya.txt', 'r');
if (!$fp) {
    echo 'filesaya.txt tidak ada';
}
while (false !== ($char = fgetc($fp))) {
    echo "$char";
}
?>
Hasilnya : n a m a o r a n g

fgets

Fungsinya : Mengambil baris-baris dari file
Sintaks php :
fgets ( resource $handle [, int $length ] )
Parameter :
$handle, adalah file yang akan diambil barisnya
$length, adalah panjang/ukuran file, isi aja kira kira yang melebihi panjang file
Contoh penggunaan :
$handle = @fopen("filesaya.txt", "r");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 1000000);
        echo $buffer;
    }
    fclose($handle);
}
?>

file_exists

Fungsinya : Cek apakah file atau direktori tersebut ada
Sintaks php :
file_exists ( string $filename )
Contoh penggunaan :
$filename = 'filesaya.txt'; 
if (file_exists($filename)) {
    echo "File $filename ada";
} else {
    echo "File $filename tidak ada";
}
?>

file_get_contents

Fungsinya : Membaca isi file/ web keseluruhan menjadi string
Sintaks php :
file_get_contents ( string $filename [, int $flags= 0 [, resource $context [, int $offset= -1 
[, int $maxlen= -1 ]]]] )
Parameter :
$filename, file atau web yang akan dibaca isinya
Contoh penggunaan :
$homepage = file_get_contents('http://ayus80.blogspot.com/');
echo $homepage;
?>

file_put_contents

Fungsinya : Menulis teks ke file
Sintaks php :
file_put_contents ( string $filename , mixed $data [, int $flags= 0 [, resource $context ]] )
$filename, file yang akan ditulis
$data, data yang akan ditulis ke file, boleh string atau array
$flags, option, FILE_APPEND (jika file sudah ada, teks akan ditambahkan)
Contoh penggunaan :
$file = 'data.txt';
$nama = 'nama orang';
file_put_contents($file, $nama);
?>
Contoh di atas akan membuat file data.txt dan menuliskan 'nama orang' di dalam data.txt

file

Fungsinya : Membaca isi file perbatis, dimasukkan ke dalam array
Sintaks php :
file ( string $filename [, int $flags= 0 [, resource $context ]] )
Parameter :
$filenama, file yang akan dibaca isinya
$flags, option :
  • FILE_IGNORE_NEW_LINES  : Jangan tambahkan baris baru di akhir elemen array
  • FILE_SKIP_EMPTY_LINES  : Abaikan baris yang kosong
Contoh penggunaan :
$lines = file('filesaya.txt');
print_r($lines);
?>

fileatime

Fungsinya : Mendapatkan waktu akses terakhir suatu file
Sintaks php :
fileatime ( string $filename )
Contoh penggunaan :
$filename = 'filesaya.txt';
if (file_exists($filename)) {
    echo "$filename terakhir kali diakses pada: ";
 echo date("F d Y H:i:s.", fileatime($filename));
}
//filesaya.txt terakhir kali diakses pada: January 28 2014 10:02:12
?>

filesize

Fungsinya : Mendapatkan ukuran file
Sintaks php :
filesize ( string $filename )
Contoh penggunaan:
$filename = 'filesaya.txt';
echo $filename . ': ' . filesize($filename) . ' bytes';
?>

filetype

Fungsinya : Mendapatkan tipe file
Sintaks php :
filetype ( string $filename )
Contoh penggunaan :
echo filetype('filesaya.txt');  // file
echo filetype('/var/');         // dir
?>

fopen

Fungsinya : Membuka file atau URL
Sintaks php :
fopen ( string $filename , string $mode [, bool $use_include_path= false [, resource $context ]] )
$filename, namafile atau URL
$mode :
mode
Description
'r'Dibuka hanya untuk untuk dibaca; pointer diletakkan di awal file
'r+'Dibuka untuk dobaca dan ditulis; pointer diletakkan di awal file
'w'Dibuka hanya untuk ditulis; pointer diletakkan diawal file, jika file tidak ada, akan dibuat automatik
'w+'Dibuka untuk dibaca dan ditulis; pointer diletakkan diawal file, jika file tidak ada, akan dibuat automatik
'a'Dibuka hanya untuk ditulis; pointer diletakkan di akhir file, jika file belum ada, akan dibuat automatik.
'a+'Dibuka hanya untuk dibaca dan ditulis; pointer diletakkan di akhir file, jika file belum ada, akan dibuat automatik.
Contoh penggunaan :
$handle = fopen("/home/pentaho/file.txt", "r+");
$handle = fopen("http://www.example.com/", "r");
$handle = fopen("ftp://user:password@example.com/somefile.txt", "w");
?>

is_dir

Fungsinya: Cek apakah filename adalah sebuah directori
Sintaks php :
is_dir ( string $filename )
Contoh penggunaan :
if(is_dir('filesaya.txt')){
    echo "Ini adalah direktori";
}else{
    echo "Ini adalah file";
}
?>

is_executable

Fungsinya: Pastikan apakah filename boleh di execute
Sintaks php :
is_executable ( string $filename )
Contoh penggunaan :
$file = 'filesaya.txt';

if (is_executable($file)) {
    echo $file.' boleh diexecute';
} else {
    echo $file.' tidak boleh diexecute';
}
?>

is_file

Fungsinya: Cek apakah filename adalah sebuah file
Sitaks php :
is_file ( string $filename )
Contoh penggunaan :
if(is_file('filesaya.txt')){
    echo "Ini adalah file";
}else{
    echo "Ini bukan file";
}
?>

is_readable

Fungsinya: Pastikan apakah filename boleh dibaca
Sintaks php :
is_readable ( string $filename )
Contoh penggunaan :
if(is_readable('filesaya.txt')){
    echo "file ini boleh dibaca";
}else{
    echo "file ini tidak boleh dibaca";
}
?>

is_writable

Fungsinya: Cek apakah filename boleh ditulis
Sintaks php :
is_writable ( string $filename )
Contoh penggunaan :
if(is_writable('filesaya.txt')){
    echo "file ini boleh ditulis";
}else{
    echo "file ini tidak boleh ditulis";
}
?>

mkdir

Fungsinya: Membuat direktori
Sintaks php:
mkdir ( string $pathname [, int $mode= 0777 [, bool $recursive= false [, resource $context ]]] )
Contoh penggunaan :
mkdir("gambar", 0700);
?>

move_uploaded_file

Fungsinya: Memindahkan file yang diupload ke lokasi baru
Sintaks php :
move_uploaded_file ( string $filename , string $destination )
Contoh penggunaan :
Upload multiple file
$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];
        move_uploaded_file($tmp_name, "$uploads_dir/$name");
    }
}
?>

rename

Fungsinya: Rename file atau directori
Sintaks php :
rename ( string $oldname , string $newname [, resource $context ] )
Contoh penggunaan :
rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt");
?>

rmdir

Fungsinya: Delete direktori
Sintaks php :
rmdir ( string $dirname [, resource $context ] )
Contoh penggunaan :
rmdir('examples');
?>

unlink

Fungsinya: Delete file 
Sintaks php :
unlink ( string $filename [, resource $context ] )
Contoh penggunaan :
unlink('test.html');
?>