Jumat, 15 Juli 2022

PHP Kirim Data Array

FORM INPUT ARRAY

 <form method="post" action="next.php">

 <input type="hidden" name="my_form_data"
value="<?php echo htmlspecialchars(serialize($my_arr)) ?>">

 <button name="submit_btn">Submit</button>
</form>

ATAU

<form method="post" action="next.php">

  <input type="hidden" name="my_form_data"
value="<?php echo htmlentities(serialize($my_arr));?>">

</form>


FORM MENERIMA ARRAY

<?php

$my_arr = unserialize($_POST["my_form_data"]);


FUNGSI PILIHAN:


function DAY($tgl){

$day=date('D', strtotime($tgl));

if($day=="Sun"){$hari="Minggu";}

else if($day=="Mon"){$hari="Senin";}

else if($day=="Tue"){$hari="Selasa";}

else if($day=="Wed"){$hari="Rabu";}

else if($day=="Thu"){$hari="Kamis";}

else if($day=="Fri"){$hari="Jumat";}

else if($day=="Sat"){$hari="Sabtu";}

return "$hari";

}


function KATD($tgl){

$day=DAY($tgl);

$hari="Weekday";

if($day=="Sun"){$hari="Weekend";}

else if($day=="Mon"){$hari="Weekday";}

else if($day=="Tue"){$hari="Weekday";}

else if($day=="Wed"){$hari="Weekday";}

else if($day=="Thu"){$hari="Weekday";}

else if($day=="Fri"){$hari="Weekend";}

else if($day=="Sat"){$hari="Weekend";}

return "$hari";

}

function terbilang($i){

  $huruf = array("", "Satu", "Dua", "Tiga", "Empat", "Lima", "Enam", "Tujuh", "Delapan", "Sembilan", "Sepuluh", "Sebelas");

 

  if ($i < 12) return " " . $huruf[$i];

  elseif ($i < 20) return terbilang($i - 10) . " Belas";

  elseif ($i < 100) return terbilang($i / 10) . " Puluh" . terbilang($i % 10);

  elseif ($i < 200) return " Seratus" . terbilang($i - 100);

  elseif ($i < 1000) return terbilang($i / 100) . " Ratus" . terbilang($i % 100);

  elseif ($i < 2000) return " Seribu" . terbilang($i - 1000);

  elseif ($i < 1000000) return terbilang($i / 1000) . " Ribu" . terbilang($i % 1000);

  elseif ($i < 1000000000) return terbilang($i / 1000000) . " Juta" . terbilang($i % 1000000);   

}



function getMaxMin($data){

foreach($data as$vert) {

foreach($vert as $key => $val) {

if(!isset($maxi[$key]) || $val > $maxi[$key]) {$maxi[$key] = $val;}

if(!isset($mini[$key]) || $val < $mini[$key]) {$mini[$key] = $val;}}}

$output['maxv'] = $maxi;

$output['minv'] = $mini;

return $output;//json_encode($output);

}

  


function getMinMaxHorizontal($data){

cariHorizontal($data);

foreach($data as $hori => $zon) {

$maxi[$hori] = max($zon);

$mini[$hori] = min($zon);

}

$output['maxh'] = $maxi;

$output['minh'] = $mini;

return $output;

}




 function swap(&$arr, $a, $b) {

        $tmp = $arr[$a];

        $arr[$a] = $arr[$b];

        $arr[$b] = $tmp;

    }


function getData2($conn,$sql){

$rs=$conn->query($sql);

$rs->data_seek(0);

//$arr = $rs->fetch_all(MYSQLI_ASSOC);

while ($row = $rs->fetch_assoc()) {

     $arr[] = $row;

   }

$rs->free();

return $arr;

}







Kamis, 09 Juni 2022

HTML SCROLL HORIZONTAL

 <html>

<title>HTMLExplorer Demo: Horizontal Scrolling Content</title>
<head>
<style type="text/css">
#outer_wrapper {  
    overflow: scroll;  
    width:100%;
}
#outer_wrapper #inner_wrapper {
    width:6000px; /* If you have more elements, increase the width accordingly */
}
#outer_wrapper #inner_wrapper div.box { /* Define the properties of inner block */
    width: 250px;
    height:300px;
    float: left;
    margin: 0 4px 0 0;
    border:1px grey solid;
}
</style>
</head>
<body>

<div id="outer_wrapper">
    <div id="inner_wrapper">
        <div class="box">
            <!-- Add desired content here -->
            HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript 
        </div>
        <div class="box">
             <!-- Add desired content here -->
            HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript 
        </div>
        <div class="box">
            <!-- Add desired content here -->
            HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript 
        </div>
        <div class="box">
            <!-- Add desired content here -->
            HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript 
        </div>
        <div class="box">
             <!-- Add desired content here -->
            HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript 
        </div>
        <div class="box">
            <!-- Add desired content here -->
            HTMLExplorer.com - Explores HTML, CSS, Jquery, XML, PHP, JSON, Javascript 
        </div>
        <!-- more boxes here -->
    </div>
</div>
</body>
</html>

https://stackoverflow.com/questions/9925754/css-horizontal-scroll









Selasa, 07 Juni 2022

PHP SCRIPT UMUM

 function getCat($str,$N){
$str=wordwrap($str,$N,"<br>\n");
return $str;
}

 function getCat($str,$N){
$P=1000;
if(strlen($str)>$P){
$str=substr($str,0,$P);
}
$str=wordwrap($str,$N,"<br>\n");
return $str;
}

###############################
<?php
date_default_timezone_set("Asia/Jakarta");
require_once "koneksivar.php";

$conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);
if ($conn->connect_error) {
trigger_error('Database connection failed: '  . $conn->connect_error, E_USER_ERROR);
}
?>

<?php function RP($rupiah)
{
return number_format($rupiah, "2", ",", ".");
} ?>
<?php
function getCat($str,$N){
$str=wordwrap($str,$N,"<br>\n");
return $str;
}


function WKT($sekarang){
if ($sekarang == "0000-00-00") {
$sekarang = date("Y-m-d");
}

$tanggal = substr($sekarang, 8, 2) + 0;
$bulan = substr($sekarang, 5, 2);
$tahun = substr($sekarang, 0, 4);

$judul_bln = array(1 => "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember");
$wk = $tanggal . " " . $judul_bln[(int)$bulan] . " " . $tahun;
return $wk;
}
?>
<?php
function WKTP($sekarang)
{
$tanggal = substr($sekarang, 8, 2) + 0;
$bulan = substr($sekarang, 5, 2);
$tahun = substr($sekarang, 2, 2);

$judul_bln = array(1 => "Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Agu", "Sep", "Okt", "Nov", "Des");
$wk = $tanggal . " " . $judul_bln[(int)$bulan] . "'" . $tahun;
return $wk;
}
?>

<?php
function process($conn, $sql)
{
$s = false;
$conn->autocommit(FALSE);
try {
$rs = $conn->query($sql);
if ($rs) {
$conn->commit();
$last_inserted_id = $conn->insert_id;
$affected_rows = $conn->affected_rows;
$s = true;
}
} catch (Exception $e) {
echo 'fail: ' . $e->getMessage();
$conn->rollback();
}
$conn->autocommit(TRUE);
return $s;
}

function getJum($conn, $sql)
{
//echo $sql;
$rs = $conn->query($sql);
$jum = $rs->num_rows;
$rs->free();
return $jum;
}

function getField($conn, $sql)
{
$rs = $conn->query($sql);
$rs->data_seek(0);
$d = $rs->fetch_assoc();
$rs->free();
return $d;
}

function getData($conn, $sql)
{
$rs = $conn->query($sql);
$rs->data_seek(0);
$arr = $rs->fetch_all(MYSQLI_ASSOC);
//foreach($arr as $row) {
//  echo $row['nama_kelas'] . '*<br>';
//}

$rs->free();
return $arr;
}












Minggu, 29 Mei 2022

Import File .XLSX Terbaru 2022

 Gunakan Library:

https://drive.google.com/file/d/1kt6Py4ijXea_uKr_O0uQh6LrfLNJ7dFC/view?usp=sharing

Gunakan Script CRUDS Tabel BARANG

<?php

require_once 'XLS/vendor/autoload.php';

use Shuchkin\SimpleXLSX;



$tanggal=WKT(date("Y-m-d"));

$pro="simpan";

$status="Tersedia";

$nama_barang="";

$deskripsi="";

$keterangan="";

$gambar0="avatar.jpg";

$gambar="avatar.jpg";

?> 


<script type="text/javascript"> 

function PRINT(pk){ 

win=window.open('barang/barang_print.php?pk='+pk,'win','width=1000, height=400, menubar=0, scrollbars=1, resizable=0, location=0, toolbar=0, status=0'); } 


</script>

<script language="JavaScript">

function buka(url) {window.open(url, 'window_baru', 'width=800,height=600,left=320,top=100,resizable=1,scrollbars=1');}

</script>


<?php

  $sql="select `id_barang` from `$tbbarang` order by `id_barang` desc";

  $jum= getJum($conn,$sql);

  $kd="BRG";

if($jum > 0){

$d=getField($conn,$sql);

    $idmax=$d['id_barang'];

$urut=substr($idmax,3,2)+1;//01

if($urut<10){$idmax="$kd"."0".$urut;}

else{$idmax="$kd".$urut;}

}

else{$idmax="$kd"."01";}

  $id_barang=$idmax;

?>

<?php

if(isset($_GET["pro"]) && $_GET["pro"]=="ubah"){

$id_barang=$_GET["kode"];

$sql="select * from `$tbbarang` where `id_barang`='$id_barang'";

$d=getField($conn,$sql);

$id_barang=$d["id_barang"];

$id_barang0=$d["id_barang"];

$nama_barang=$d["nama_barang"];

$deskripsi=$d["deskripsi"];

$gambar=$d["gambar"];

$gambar0=$d["gambar"];

$keterangan=$d["keterangan"];

$pro="ubah";

}

?>

 <link rel="stylesheet" href="jsacordeon/jquery-ui.css">

  <link rel="stylesheet" href="resources/demos/style.css">

<script src="jsacordeon/jquery-1.12.4.js"></script>

  <script src="jsacordeon/jquery-ui.js"></script>

  <script>

  $( function() {

    $( "#accordion" ).accordion({

      collapsible: true

    });

  } );

  </script>

<script type="text/javascript" src="jscripts/tiny_mce/tiny_mce.js"></script>

<script type="text/javascript">

   tinyMCE.init({

mode : "textareas",

theme : "advanced",

   }); 

</script>

    <div id="accordion">

  <h4>Tambah  Barang</h4>

  <div>


<form name="import_export_form" method="post" action="" enctype="multipart/form-data">

<table width="60%">

<tr>

<td><label  class="btn btn-dark">Pilih File Datalatih (.xls):</label>

<td><input type="file" id="excelfile" required name="excelfile"  class="btn btn-light"/>

<td><input type="submit" id="import"  value="IMPORT" name="IMPORT" class="btn btn-warning"/>

<td><a href="downloadgetfile.php?file=DataLatih.xlsx">

<input type="button" id="import" value="DOWNLOAD" name="Download" class="btn btn-success"/>

</a>

</tr>

</table>

</form><br>

<hr>


<?php

 if(isset($_POST['IMPORT'])){

$filename = $_FILES['excelfile']['tmp_name'];

$nf = $_FILES['excelfile']['name'];

 $n=0;

 process($conn, "Truncate tb_barang");

 process($conn, "Truncate tb_transaksi");

 

 $sukses=0;

 $tanggal0=date("Y-m-d");

 $pelanggan0="";

 

$xlsx = new SimpleXLSX($filename);

if ( $xlsx->success() ) {

    foreach( $xlsx->rows() as $r ) {

      if(!empty($r[3]) && $n>1){

$tanggal = $r[0];//Tanggal

$pelanggan= $r[1];//Pelanggan

$nama_barang= $r[2];//Keterangan

$jumlah= $r[3];//Qty

$unit= $r[4];//Unit

$harga= $r[5];//Harga

$subtotal= $r[6];//subtotal

if($tanggal==""){$tanggal=$tanggal0;}

if($pelanggan==""){$pelanggan=$pelanggan0;}

$nama_barang = str_replace('\'', '', $nama_barang);

$nama_barang = str_replace("'", '', $nama_barang);

$nama_barang = str_replace('\"', '', $nama_barang);


$keterangan=$unit;

$deskripsi="Satuan $unit, Harga $harga";


$sqla="select `nama_barang` from `$tbbarang` where `nama_barang` like '%$nama_barang%'";

$juma= getJum($conn,$sqla);

if($juma <1){

$sql="select `id_barang` from `$tbbarang` order by `id_barang` desc";

  $jum= getJum($conn,$sql);

  $kd="BRG";

if($jum > 0){

$d=getField($conn,$sql);

    $idmax=$d['id_barang'];

$urut=substr($idmax,3,2)+1;//01

if($urut<10){$idmax="$kd"."0".$urut;}

else{$idmax="$kd".$urut;}

}

else{$idmax="$kd"."01";}

$id_barang=$idmax;

  

$sql="INSERT INTO `$tbbarang` (

`id_barang` ,

`nama_barang` ,

`deskripsi` ,

`gambar` ,

`keterangan`

) VALUES (

'$id_barang', 

'$nama_barang',

'$deskripsi',

'avatar.jpg',

'$keterangan'

)";

$simpan=process($conn,$sql);

}//blm ada


 $tanggal0=$tanggal;

 $pelanggan0=$pelanggan;


$sukses++;

echo "$sql<hr>";



$id_barang=getIDBarang($conn,$nama_barang);

$sql=" INSERT INTO `$tbtransaksi` (

`tanggal` ,

`id_barang` ,

`frekuensi` ,

`persediaan` ,

`pembelian` ,

`pemakaian` ,

`sisa` ,

`keterangan`

) VALUES (

'$tanggal',

'$id_barang',

'$jumlah',

'', 

'',

'',

'',

'$pelanggan  ($jumlah x Rp. $harga =RP. $subtotal)'

)";

$simpan=process($conn,$sql);

  }

  

  $n++; 

    }//for

echo "<script>alert('Import Data $nf Sebanyak $sukses Item berhasil disimpan... !');document.location.href='?mnu=barang';</script>";

} else {

    echo 'xlsx error: '.$xlsx->error();

}

 

}//isset


?>

<form action="" method="post" enctype="multipart/form-data">

<table  class="table table-bordered">

<tr>

<th width="180"><label for="id_barang">ID Barang</label>

<th width="12">:

<th colspan="2"><b><?php echo $id_barang;?></b></tr>

<tr>

<td><label for="nama_barang">Nama Barang</label>

<td>:<td width="458"><input required name="nama_barang" class="form-control" type="text" id="nama_barang" value="<?php echo $nama_barang;?>" size="25" />

</td>

</tr>



<tr>

<td height="24"><label for="deskripsi">Deskripsi</label>

<td>:<td><textarea name="deskripsi" cols="25" required="required" class="form-control" id="dekripsi"><?php echo $deskripsi;?></textarea></td>

</tr>



<tr>

  <td height="24"><label for="gambar">Gambar</label>

    <td>:<td colspan="2">

        <input class="form-control" name="gambar" type="file" id="gambar" size="20" /> 

      => <a href='#' onclick='buka("barang/zoom.php?id=<?php echo $id_barang;?>")'><?php echo $gambar0;?></a></td>

</tr>



<tr>

<td height="24"><label for="keterangan">Keterangan</label>

<td>:<td>

<textarea name="keterangan" class="form-control" cols="55" rows="2"><?php echo $keterangan;?></textarea>

</td>

</tr>


<tr>

<td>

<td>

<td colspan="2">

<input name="Simpan" type="submit" id="Simpan" value="Simpan" />

<input name="pro" type="hidden" id="pro" value="<?php echo $pro;?>" />

<input name="gambar0" type="hidden" id="gambar0" value="<?php echo $gambar0;?>" />

<input name="id_barang" type="hidden" id="id_barang" value="<?php echo $id_barang;?>" />

<input name="id_barang0" type="hidden" id="id_barang0" value="<?php echo $id_barang0;?>" />

<a href="?mnu=barang"><input name="Batal" type="button" id="Batal" value="Batal" /></a>

</td></tr>

</table>

</form>

<br />

</div>

<h4>Data Barang :</h4>

<div>

 

| <img src='ypathicon/print.png' title='PRINT' OnClick="PRINT('<?php echo $status;?>')"> |

<br>


<table  class="table table-bordered">

  <tr bgcolor="#cccccc">

    <th width="3%">No</td>

<th width="3%">IDBRG</td>

<th width="10%">Gambar</td>

    <th width="30%">Nama Barang</td>

<th width="20%">Keterangan</td>

    <th width="13%">Menu</td>

  </tr>

<?php  

  $sql="select * from `$tbbarang`  order by `id_barang` desc";

  $jum=getJum($conn,$sql);

if($jum > 0){

//--------------------------- 

$batas   = 10;

$page = 1;

if(isset($_GET['page'])){

$page = $_GET['page'];

}

if(empty($page)){$posawal  = 0;$page = 1;}

else{$posawal = ($page-1) * $batas;}


$sql2 = $sql." LIMIT $posawal,$batas";

$no = $posawal+1;

//-------------------------------

$arr=getData($conn,$sql2);

foreach($arr as $d) {

$id_barang=$d["id_barang"];

$nama_barang=ucwords($d["nama_barang"]);

$deskripsi=$d["deskripsi"];

$gambar=$d["gambar"];

$gambar0=$d["gambar"];

$keterangan=$d["keterangan"];

$color="#dddddd";

if($no %2==0){$color="#eeeeee";}

echo"<tr bgcolor='$color'>

<td>$no</td>

<td><div align='center'>";

echo"<a href='#' onclick='buka(\"barang/zoom.php?id=$id_barang\")'>

<img src='$YPATH/$gambar' width='40' height='40' /></a></div>";

echo"</td>

<td>$id_barang</td>

<td><b>$nama_barang </b></td>

<td><small>$deskripsi <i>$keterangan</i></small></td>

<td><div align='center'>

<a href='?mnu=barang&pro=ubah&kode=$id_barang'><img src='ypathicon/ub.png' title='ubah'></a>

<a href='?mnu=barang&pro=hapus&kode=$id_barang&nama_barang=$nama_barang'><img src='ypathicon/ha.png' title='hapus' 

onClick='return confirm(\"Apakah Anda benar-benar akan menghapus $nama_barang pada data barang ?..\")'></a></div></td>

</tr>";

$no++;

}//for dalam

}//if

else{echo"<tr><td colspan='6'><blink>Maaf, Data barang belum tersedia...</blink></td></tr>";}

?>

</table>


<?php

$jmldata = $jum;

if($jmldata>0){

if($batas<1){$batas=1;}

$jmlhal  = ceil($jmldata/$batas);

echo "<div class=paging>";

if($page > 1){

$prev=$page-1;

echo "<span class=prevnext><a href='$_SERVER[PHP_SELF]?page=$prev&mnu=barang'>« Prev</a></span> ";

}

else{echo "<span class=disabled>« Prev</span> ";}


for($i=1;$i<=$jmlhal;$i++)

if ($i != $page){echo "<a href='$_SERVER[PHP_SELF]?page=$i&mnu=barang'>$i</a> ";}

else{echo " <span class=current>$i</span> ";}


if($page < $jmlhal){

$next=$page+1;

echo "<span class=prevnext><a href='$_SERVER[PHP_SELF]?page=$next&mnu=barang'>Next »</a></span>";

}

else{ echo "<span class=disabled>Next »</span>";}

echo "</div>";

}//if jmldata


$jmldata = $jum;

echo "<p align=center>Total data <b>$jmldata</b> item</p>";


echo"</div>";

?>



</div>


<?php

if(isset($_POST["Simpan"])){

$pro=strip_tags($_POST["pro"]);

$id_barang=strip_tags($_POST["id_barang"]);

$id_barang0=strip_tags($_POST["id_barang0"]);

$nama_barang=strip_tags($_POST["nama_barang"]);

$deskripsi=$_POST["deskripsi"];

$gambar0=strip_tags($_POST["gambar0"]);

if ($_FILES["gambar"] != "") {

move_uploaded_file($_FILES["gambar"]["tmp_name"],"$YPATH/".$_FILES["gambar"]["name"]);

$gambar=$_FILES["gambar"]["name"];

else {$gambar=$gambar0;}

if(strlen($gambar)<1){$gambar=$gambar0;}

$keterangan=$_POST["keterangan"];

if($pro=="simpan"){

 $sql=" INSERT INTO `$tbbarang` (

`id_barang` ,

`nama_barang` ,

`deskripsi` ,

`gambar` ,

`keterangan`

) VALUES (

'$id_barang', 

'$nama_barang',

'$deskripsi',

'$gambar',

'$keterangan'

)";

$simpan=process($conn,$sql);

if($simpan) {echo "<script>alert('Data $nama_barang berhasil disimpan !');document.location.href='?mnu=barang';</script>";}

else{echo"<script>alert('Data $nama_barang gagal disimpan...');document.location.href='?mnu=barang';</script>";}

}

else{

$sql="update `$tbbarang` set 

`nama_barang`='$nama_barang',

`deskripsi`='$deskripsi',

`gambar`='$gambar' ,

`keterangan`='$keterangan'

where `id_barang`='$id_barang0'";

$ubah=process($conn,$sql);

if($ubah) {echo "<script>alert('Data $nama_barang berhasil diubah !');document.location.href='?mnu=barang';</script>";}

else{echo"<script>alert('Data $nama_barang gagal diubah...');document.location.href='?mnu=barang';</script>";}

}//else simpan

}

?>


<?php

if(isset($_GET["pro"]) && $_GET["pro"]=="hapus"){

$id_barang=$_GET["kode"];

$nama_barang=$_GET["nama_barang"];

$sql="delete from `$tbbarang` where `id_barang`='$id_barang'";

$hapus=process($conn,$sql);

if($hapus) {echo "<script>alert('Data $nama_barang berhasil dihapus !');document.location.href='?mnu=barang';</script>";}

else{echo"<script>alert('Data $nama_barang gagal dihapus...');document.location.href='?mnu=barang';</script>";}

}

?>





Sabtu, 07 Mei 2022

PHP Winnowing dan Ngram

 

Algoritma Winnowing merupakan algoritma pencocokan string yang akan menggunakan fungsi hash sebagai pembanding antara string yang dicari (m) dengan substring pada teks (n).

Artinya  jika hash value keduanya adalah sama maka akan dilakukan perbandingan sekali lagi terhadap karakter-karakternya. Apabila hasil keduanya tidak sama, maka substring akan bergeser ke kanan. Pergeseran dilakukan sebanyak (n-m) kali. Perhitungan nilai hash yang efisien pada saat pergeseran akan mempengaruhi performa dari algoritma ini. (David Indra Lesmana, 2012).

Langkah-langkah dalam Algortima Winnowing:

1. Normalisasi text : Lowertext + Stopword (menghilangkan tanda baca, spasi, angka)  + Stemming (mengubah ke kata dasar).

2. Membagi teks kedalam gram-gram yang ditentukan nilai n-gramnya+window+base

3. Mencari nilai hash dengan fungsi hash dan fingerprint dari tiap kata yang terbentuk sesuai batasan window nya

4. Mencari nilai fingerprint yang sama antara dua dokumen/teks


Parsing k-gram adalah membentuk pola kata pada teks dengan memecah kata menjadi potongan-potongan dimana setiap potongan mengandung karakter sebanyak k.N-gram merupakan sebuah metode yang diaplikasikan untuk pembangkitan kata ataukarakter.Metode N-grams ini digunakan untuk mengambil potongan-potongankarakter huruf sejumlah k dari sebuah kata yang secara kontinuitas dibaca dari teks sumber hingga akhir dari dokumen.

Setelah melakukan Parsing N-gram maka langkah selanjutnya adalah hashing terhadap seluruh pecahan string hasil dari proses parsing k-gram. Hashing itu sendiri adalah suatu cara untuk mentransformasi string menjadi suatu nilai yang unik (hash value)dengan panjang tertentu (fixed-length) yang berfungsi sebagai penanda string tersebut. Pada sistem ini proses hashing memanfaatkan tabel ascii dengan rumus Hash (Diana dkk,2011):


Keterangan :

c = Nilai ascii karakter (desimal)

k = Banyak karakter (indeks karakter)

b = Basis Bilangan (nilai dari basis bilangan harus bilangan prima).

Alasan kenapa Basis bilangan (b) harus dipilih bilangan prima yang cukup besar, adalah untuk mengurangi kemungkinan adanya dua hash value yang sama.

Normalisasi Tabel:






Penampakan Hasil Script PHP Winnowing



https://media.neliti.com/media/publications/68455-ID-none.pdf
<?php

$time_start = microtime_float();

ini_set('memory_limit', '256M');

$tanggal=WKT(date("Y-m-d"));

$gram=5;
$base=3;
$window=4;
				
if(isset($_POST["Proses"])){
	$gram=strip_tags($_POST["gram"]);
	$base=strip_tags($_POST["base"]);
	$judul=strip_tags($_POST["judul"]);
	$abstrak=strip_tags($_POST["abstrak"]);
	$id_pengujian=strip_tags($_POST["q"]);
	$window=strip_tags($_POST["window"]);
}
 
$sql="select * from `$tbpengujian` order by `id_pengujian` desc";
if(isset($_GET["q"])){
	$id_pengujian=$_GET["q"];
	$sql="select * from `$tbpengujian` where `id_pengujian`='$id_pengujian'";
}

$d=getField($conn,$sql);
	$id_pengujian=$d["id_pengujian"];
	$judul=$d["judul"];
	$abstrak=$d["abstrak"];
	$rekapitulasi=$d["rekapitulasi"];
	$id_user=$d["id_user"];
	$kategori=$d["kategori"];
	$keterangan=$d["keterangan"];
	$norm=$d["normalisasi"];
	$window=$d["window"];
	$gram=$d["ngram"];
	$base=$d["base"];
?>
 <link rel="stylesheet" href="jsacordeon/jquery-ui.css">
  <link rel="stylesheet" href="resources/demos/style.css">
<script src="jsacordeon/jquery-1.12.4.js"></script>
  <script src="jsacordeon/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#accordion" ).accordion({
      collapsible: true
    });
  } );
  </script>
</head>
<body>
 
<div id="accordion">
<h3>Form Uji</h3>
<div>

<form action="" method="post" enctype="multipart/form-data">
<table border="1" width="90%" class="table table-hover rable-striped table-bordered" >
<tr>
<td>Judul
<td>:
<td>
<textarea name="judul" class="form-control" required cols="55" rows="2"><?php echo $judul;?></textarea>
</tr>

<tr>
<td>Abstrak
<td>:
<td>
<textarea name="abstrak" class="form-control" cols="55" rows="3"><?php echo $abstrak;?></textarea>
</tr>


<tr>
<td>
Konfigurasi
<td>:
<td>
<label>N-gram</label> 
<select name="gram" id="gram"  required />
<option <?php if($gram=="choose"){echo"selected";}?>>Pilih Angka</option>
<option value="3" <?php if($gram=="3"){echo"selected";}?>>3</option>
<option value="4" <?php if($gram=="4"){echo"selected";}?>>4</option>
<option value="5" <?php if($gram=="5"){echo"selected";}?>>5</option>
<option value="6" <?php if($gram=="6"){echo"selected";}?>>6</option>
<option value="7" <?php if($gram=="7"){echo"selected";}?>>7</option>
<option value="8" <?php if($gram=="8"){echo"selected";}?>>8</option>
<option value="9" <?php if($gram=="9"){echo"selected";}?>>9</option>
<option value="10" <?php if($gram=="10"){echo"selected";}?>>10</option>
</select>
<label>Base</label> 
<select name="base" id="base" required />
<option <?php if($base=="choose"){echo"selected";}?>>Angka Prima</option>
<option value="2" <?php if($base=="2"){echo"selected";}?>>2</option>
<option value="3" <?php if($base=="3"){echo"selected";}?>>3</option>
<option value="5" <?php if($base=="5"){echo"selected";}?>>5</option>
<option value="7" <?php if($base=="7"){echo"selected";}?>>7</option>
<option value="11" <?php if($base=="11"){echo"selected";}?>>11</option>
<option value="13" <?php if($base=="13"){echo"selected";}?>>13</option>
<option value="17" <?php if($base=="17"){echo"selected";}?>>17</option>
</select>
<label>Window</label> 
<select name="window" id="window"  required />
<option <?php if(window){echo"selected";}?>>Pilih Angka</option>
<option value="3" <?php if($window=="3"){echo"selected";}?>>3</option>
<option value="4" <?php if($window=="4"){echo"selected";}?>>4</option>
<option value="5" <?php if($window=="5"){echo"selected";}?>>5</option>
<option value="6" <?php if($window=="6"){echo"selected";}?>>6</option>
<option value="7" <?php if($window=="7"){echo"selected";}?>>7</option>
<option value="8" <?php if($window=="8"){echo"selected";}?>>8</option>
<option value="9" <?php if($window=="9"){echo"selected";}?>>9</option>
<option value="10" <?php if($window=="10"){echo"selected";}?>>10</option>
</select>
</tr>

<tr>
<td>
<td colspan="2">
<input name="q" type="hidden" id="q" value="<?php echo $id_pengujian;?>" />
<input name="Proses" type="submit" id="Proses" value="Analisa" />
<a href="?mnu=winnowing"><input name="Batal" type="button" id="Batal" value="Clear" /></a>
</td>

</tr> 
</table>
</form>
<?php
if(isset($_POST["Proses"])){	
	$window=strip_tags($_POST["window"]);
	$gram=strip_tags($_POST["gram"]);
	$base=strip_tags($_POST["base"]);
	$judul=strip_tags($_POST["judul"]);
	$abstrak=strip_tags($_POST["abstrak"]);
	$gab="$judul $abstrak";
	$norm=getNorm($gab);
}

//$norm="deteksiplagiarisme";////
echo "<h1><font color='#ffAA08'>$norm</font></h1><hr>";
echo "<h3><font color='#AA08ff'>Ngram: $gram, Base: $base, Window $window,</font></h3>";
$array = prosesWIN($norm,$gram,$base,$window); 

$arV=$array[0];
$arS=$array[1];
$arI=$array[2];
$arGS=$array[3];
$arGV=$array[4];
echo "<br><img src='ypathfile/winnowing1.png'></br>";

$gab1=gabAR($arS,$arV,$arGV);
echo $gab1;
echo "<br><img src='ypathfile/coeff.png'></br>";

$ars1 = $array[3];
$arv1 = $array[4];
$arr1=getUnix($arv1);
  
$nom=0;
$maxkemiripan=0;
$idmax=0;
$rekapitulasimax="";
$id_crawlingmax=0;
$ketmax="";

 $sql="select * from `$tbcrawling` order by `id_crawling` asc";
  $jum=getJum($conn,$sql);
		if($jum > 0){							
	$arr=getData($conn,$sql);
		foreach($arr as $d) {		
				$id_crawling=$d["id_crawling"];
				$judul=ucwords($d["judul"]);
				$abstrak=$d["abstrak"];
				$normalisasi=$d["normalisasi"];
				$kategori=$d["kategori"];
				$keterangan2=$d["keterangan"];
				$nom++;
		echo "<b><font color='green'>".$nom. ".".$judul."</font></b><br>"; 
		echo "<i><small><font color='magenta'>$normalisasi</font></small><br>"; 
		
			$array = prosesWIN($normalisasi,$gram,$base,$window);
			$arV2=$array[0];
			$arS2=$array[1];
			$arI2=$array[2];
			$ars2 = $array[3];
			$arv2 = $array[4];
			$gab2=gabAR($arS2,$arV2,$arv2);
			echo $gab2;

			$arr=array_merge($arr1,$arv2);
			$arr2=getUnix($arr);
			$sama=0;
			$gabv="";
			$H1=count($arr1);
			$H2=count($arv2);
			$H3=count($arr2);
			for($i=0;$i<$H1;$i++){
				for($j=0;$j<$H3;$j++){
					if($arr1[$i]==$arr2[$j]){
						$sama=$sama+1;
						$gabv.="{".$arr2[$j]."} ";
						//break;
					}
				}
			}

			$acc=($sama/$H3) *100;
			$acc=round($acc,2);
			$rekapitulasi= "Jumlah Hash DataUji : $H1<br>";
			$rekapitulasi.=  "Jumlah Hash Datalatih : $H2<br>";
			$rekapitulasi.=  "Fingerprint Sama: $gabv<br>";
			$rekapitulasi.=  "<font color=\"red\"><b>Jumlah Hash Irisan / Join : $sama / $H3 =$acc %</b></font>";

			echo"<hr>";
			echo $rekapitulasi;
			echo"<hr>";

			if($maxkemiripan<$acc){
				$maxkemiripan=$acc;
				$idmax=$id_crawling;
				$rekapitulasimax=$rekapitulasi;
				$id_crawlingmax=$id_crawling;
				$ketmax="$sama / $H3 =$acc %";
			}
 
	}//foreach
}//jum foreach
 
$kategori="Tidak Plagiarism"; 
if($maxkemiripan>50){$kategori="Plagiarism Tinggi";}
else if($maxkemiripan>30){$kategori="Plagiarism Sedang";}
else if($maxkemiripan>20){$kategori="Plagiarism Rendah";}	 


$time_end = microtime_float();
$waktu = $time_end - $time_start;

  $sql="update `$tbpengujian` set 
	`window`='$window',`ngram`='$gram',`id_crawling`='$id_crawlingmax',
	`rekapitulasi`='$rekapitulasimax',`waktu`='$waktu',`prosentase`='$maxkemiripan',
	`base`='$base',`kategori`='$kategori',`keterangan`='$ketmax' where `id_pengujian`='$id_pengujian'";
	$ubah=process($conn,$sql); 
	
	echo "<font color='blue'><b><h1>Kategori $kategori : $maxkemiripan %</h1><br>lama proses: $waktu ms</b></font>";	
?>
</div>
</div>


 
<?php
function gabAR($ar1,$ar2,$ar3){
$c=count($ar1);
$gabs="";
$gabv="";
for($i=0;$i<$c;$i++){
	$ds=$ar1[$i];
	$dv=$ar2[$i];
	$df=$ar3[$i];
	$gabs.="{".$ds."}";
	$gabv.="{".$dv."}";
	$gabf.="{".$df."}";
}
$gab="<small>
<font color='red'>GRAM:$gabs</font><br>
<font color='green'>HASH:$gabv</font><br>
<font color='blue'>FINGER:$gabf</font><br></small>";
return $gab;
}
 ?>

Formulas Kemiripan:




PHP Rabin Karp

 Algoritma Rabin Karp merupakan algoritma pencocokan string yang akan menggunakan fungsi hash sebagai pembanding antara string yang dicari (m) dengan substring pada teks (n).

Artinya  jika hash value keduanya adalah sama maka akan dilakukan perbandingan sekali lagi terhadap karakter-karakternya. Apabila hasil keduanya tidak sama, maka substring akan bergeser ke kanan. Pergeseran dilakukan sebanyak (n-m) kali. Perhitungan nilai hash yang efisien pada saat pergeseran akan mempengaruhi performa dari algoritma ini. (David Indra Lesmana, 2012).

Langkah-langkah dalam algortima Rabin Karp :

1. Normalisasi text : Lowertext + Stopword (menghilangkan tanda baca, spasi, angka)  + Stemming (mengubah ke kata dasar).

2. Membagi teks kedalam gram-gram yang ditentukan nilai k-gramnya

3. Mencari nilai hash dengan fungsi hash dari tiap kata yang terbentuk

4. Mencari nilai hash yang sama antara dua tek


Parsing k-gram adalahmembentuk pola kata pada teks dengan memecah kata menjadi potongan-potongan dimana setiap potongan mengandung karakter sebanyak k.K-grammerupakansebuah metode yang diaplikasikan untuk pembangkitan kata ataukarakter.Metode k-grams ini digunakan untuk mengambil potongan-potongankarakter huruf sejumlah k dari sebuah kata yang secara kontinuitas dibaca dari teks sumber hingga akhir dari dokumen.

Setelah melakukan Parsing K-gram maka langkah selanjutnya adalah hashing terhadap seluruh pecahan string hasil dari proses parsing k-gram. Hashing itu sendiri adalah suatu cara untuk mentransformasi string menjadi suatu nilai yang unik (hash value)dengan panjang tertentu (fixed-length) yang berfungsi sebagai penanda string tersebut. Pada sistem ini proses hashing memanfaatkan tabel ascii dengan rumus Hash (Diana dkk,2011):


Keterangan :

c = Nilai ascii karakter (desimal)

k = Banyak karakter (indeks karakter)

b = Basis Bilangan (nilai dari basis bilangan harus bilangan prima).

Alasan kenapa Basis bilangan (b) harus dipilih bilangan prima yang cukup besar, adalah untuk mengurangi kemungkinan adanya dua hash value yang sama.

Penampakan Hasilnya:


Dan hasil akumulasi akurasinya adalah sbb:


Dengan Script PHP Rabin Karp sbb:

<?php

$time_start = microtime_float();
ini_set('memory_limit', '256M');

$tanggal=WKT(date("Y-m-d"));

$gram=7;
$base=5;
				
if(isset($_POST["Proses"])){
	$gram=strip_tags($_POST["gram"]);
	$base=strip_tags($_POST["base"]);
	$judul=strip_tags($_POST["judul"]);
	$abstrak=strip_tags($_POST["abstrak"]);
	$id_pengujian=strip_tags($_POST["q"]);
}
 
$sql="select * from `$tbpengujian` order by `id_pengujian` desc";
if(isset($_GET["q"])){
	$id_pengujian=$_GET["q"];
	$sql="select * from `$tbpengujian` where `id_pengujian`='$id_pengujian'";
}

$d=getField($conn,$sql);
	$id_pengujian=$d["id_pengujian"];
	$judul=$d["judul"];
	$abstrak=$d["abstrak"];
	$rekapitulasi=$d["rekapitulasi"];
	$id_user=$d["id_user"];
	$kategori=$d["kategori"];
	$keterangan=$d["keterangan"];
	$norm=$d["normalisasi"];
?>
 <link rel="stylesheet" href="jsacordeon/jquery-ui.css">
  <link rel="stylesheet" href="resources/demos/style.css">
<script src="jsacordeon/jquery-1.12.4.js"></script>
  <script src="jsacordeon/jquery-ui.js"></script>
  <script>
  $( function() {
    $( "#accordion" ).accordion({
      collapsible: true
    });
  } );
  </script>
</head>
<body>
 
<div id="accordion">
<h3>Form Uji</h3>
<div>

<form action="" method="post" enctype="multipart/form-data">
<table border="1" width="90%" class="table table-hover rable-striped table-bordered" >
<tr>
<td>Judul
<td>:
<td>
<textarea name="judul" class="form-control" required cols="55" rows="2"><?php echo $judul;?></textarea>
</tr>

<tr>
<td>Abstrak
<td>:
<td>
<textarea name="abstrak" class="form-control" cols="55" rows="3"><?php echo $abstrak;?></textarea>
</tr>


<tr>
<td>
Konfigurasi
<td>:
<td>
<label>N-gram</label> 
<select name="gram" id="gram"  required />
<option <?php if($gram=="choose"){echo"selected";}?>>Pilih Angka</option>
<option value="3" <?php if($gram=="3"){echo"selected";}?>>3</option>
<option value="4" <?php if($gram=="4"){echo"selected";}?>>4</option>
<option value="5" <?php if($gram=="5"){echo"selected";}?>>5</option>
<option value="6" <?php if($gram=="6"){echo"selected";}?>>6</option>
<option value="7" <?php if($gram=="7"){echo"selected";}?>>7</option>
<option value="8" <?php if($gram=="8"){echo"selected";}?>>8</option>
<option value="9" <?php if($gram=="9"){echo"selected";}?>>9</option>
<option value="10" <?php if($gram=="10"){echo"selected";}?>>10</option>
</select>
<label>Base</label> 
<select name="base" id="base" required />
<option <?php if($base=="choose"){echo"selected";}?>>Angka Prima</option>
<option value="2" <?php if($base=="2"){echo"selected";}?>>2</option>
<option value="3" <?php if($base=="3"){echo"selected";}?>>3</option>
<option value="5" <?php if($base=="5"){echo"selected";}?>>5</option>
<option value="7" <?php if($base=="7"){echo"selected";}?>>7</option>
<option value="11" <?php if($base=="11"){echo"selected";}?>>11</option>
<option value="13" <?php if($base=="13"){echo"selected";}?>>13</option>
<option value="17" <?php if($base=="17"){echo"selected";}?>>17</option>
</select>
</tr>

<tr>
<td>
<td colspan="2">
<input name="q" type="hidden" id="q" value="<?php echo $id_pengujian;?>" />
<input name="Proses" type="submit" id="Proses" value="Analisa" />
<a href="?mnu=rk"><input name="Batal" type="button" id="Batal" value="Clear" /></a>
</td>

</tr> 
</table>
</form>
<?php
if(isset($_POST["Proses"])){	
	$gram=strip_tags($_POST["gram"]);
	$base=strip_tags($_POST["base"]);
	$judul=strip_tags($_POST["judul"]);
	$abstrak=strip_tags($_POST["abstrak"]);
	$gab="$judul $abstrak";
	$norm=getNorm($gab);
}

echo"<b>Judul Uji:</b>";
echo "<h1><font color='#ffAA08'>$norm</font></h1>";
echo "<h3><font color='#AA08ff'>Ngram: $gram, Base: $base</font></h3><hr>";

$nom=0;
$maxkemiripan=0;
$idmax=0;
$rekapitulasimax="";
$id_crawlingmax=0;
$ketmax="";

$array = prosesRK($norm,$gram,$base); 
  
$ars1 = $array[0];
$arv1 = $array[1];
$nom=0;
 $sql="select * from `$tbcrawling` order by `id_crawling` asc";
  $jum=getJum($conn,$sql);
		if($jum > 0){							
	$arr=getData($conn,$sql);
		foreach($arr as $d) {		
				$id_crawling=$d["id_crawling"];
				$judul=ucwords($d["judul"]);
				$abstrak=$d["abstrak"];
				$normalisasi=$d["normalisasi"];
				$kategori=$d["kategori"];
				$keterangan=$d["keterangan"];
				$nom++;
		echo "<b><font color='green'>".$nom. ".".$judul."</font></b><br>"; 
		echo "<i><small><font color='magenta'>$normalisasi</font></small><br>"; 
		
			$array = prosesRK($normalisasi,$gram,$base);
			$ars2 = $array[0];
			$arv2 = $array[1];

			$sama=0;
			$gabs="";
			$gabv="";
			$H1=count($arv1);
			$H2=count($arv2);
			for($i=0;$i<$H1;$i++){
				for($j=0;$j<$H2;$j++){
					if($arv1[$i]==$arv2[$j]){
						$sama=$sama+1;
						$gabv.="{".$arv2[$j]."} ";
						$gabs.="{".$ars2[$j]."} ";
						break;
					}
				}
			} 
$PN=($H1+$H2-$sama);
if($PN<$sama){
	$hmin=$H1;
	if($H2<$H1){$hmin=$H2;}
	$sama=$hmin;
	$PN=($H1+$H2-$sama);
		$sim=$sama/$PN * 100;
		$sim=round($sim,3);
		$ssim="$sama/($H1+$H2-$sama) x 100%";
	}
else{	
	$sim=$sama/$PN * 100;
	$sim=round($sim,3);
	$ssim="$sama/($H1+$H2-$sama) x 100%";
} 
	
	$rekapitulasi= "Jumlah Hash DataUji : $H1<br>";
	$rekapitulasi.=  "Jumlah Hash Datalatih : $H2<br>";
	$rekapitulasi.=  "Fingerprint Sama: $gabv<br>";
	$rekapitulasi.=  "Fingerprint Sama: $gabs<br>";
	$rekapitulasi.=  "<font color=\"red\"><b>Kemiripan : $ssim = $sim %</b></font>";

	echo"<hr>";
	echo $rekapitulasi;
	echo"<hr>";
			
		if($maxkemiripan<$sim){
			$maxkemiripan=$sim;
			$idmax=$id_crawling;
			$rekapitulasimax=$rekapitulasi;
			$id_crawlingmax=$id_crawling;
			$ketmax="$ssim = $sim %";
		} 		
		
	}//foreach
}//jum foreach
 
 
$kategori="Tidak Plagiarism"; 
if($maxkemiripan>50){$kategori="Plagiarism Tinggi";}
else if($maxkemiripan>30){$kategori="Plagiarism Sedang";}
else if($maxkemiripan>20){$kategori="Plagiarism Rendah";}	 


$time_end = microtime_float();
$waktu = $time_end - $time_start;

  $sql="update `$tbpengujian` set 
	`window`='$window',`ngram`='$gram',`id_crawling`='$id_crawlingmax',
	`rekapitulasi`='$rekapitulasimax',`waktu`='$waktu',`prosentase`='$maxkemiripan',
	`base`='$base',`kategori`='$kategori',`keterangan`='$ketmax' where `id_pengujian`='$id_pengujian'";
	//$ubah=process($conn,$sql); 
	
	echo "<font color='blue'><b><h1>Kategori $kategori : $maxkemiripan %</h1><br>lama proses: $waktu ms</b></font>";
	
?>
</div>
</div>
 
Dan sbb adalah tabel yang digunakan:


Mencari Tanggal Terakhir Suatu Bulan

  $a_date = "$tahun-$bulan-01"; $lastdate= date('t',strtotime($a_date));//Y-m-t <?php require_once"koneksivar.php&...