Pencarian

Selasa, 05 Januari 2010

Membuat ID Otomatis dengan PHP

Membuat ID otomatis dengan PHP
Pada umumnya untuk urusan ID atau Primary Key pada tabel di mysql kita biasa menggunakan Auto Increment(A.I) dimana dengan A.I tersebut id atau key yang di inginkan akan bertambah otomatis setiap kali record bertambah.

Namun, pada kasus2 lain seperti NIM (No Induk Mahasiswa), NIP atau sejenisnya sering kita jumpai format seperti ini : 8020070233 dimana setiap angka mempunyai arti masing2:
80 : sebagai identifikasi jurusan
2007 : Tahun pendaftaran
0233 : jumlah mahasiswa

dari format diatas, jumlah maksimal mahasiswa yang akan mendaftar ditentukan dengan 4 digit, artinya tidak bisa lebih dari 9999 orang. Untuk kasus seperti NIM diatas, tentu tidak bisa menggunakan fungsi A.I pada MySql, maka dari perlu dibuat suatu fungsi agar NIM tersebut bisa bertambah secara otomatis setiap kali data di inputkan.

langsung ke pokok permasalah. Untuk kasus NIM seperti 8020070233, kita pisahkan terlebih dahulu NIM tersebut dengan fungsi SUBSTR
$id_old = 8020070233;
$jurusan = substr($id_old,0,2); //mengambil angka jurusannya
$jumlah_mhs = substr($id_old,6,4); //mengambil angka jumlah mahasiswa
$tahun = date("Y"); //mengambil tahun dari sistem.

setelah itu, tambahkan jumlah mahasiswa dengan 1
$hasil = $jumlah_mhs + 1;
lalu hitung jumlah karakter dari $hasil dan simpan di $pk_n
$pk_n = strlen($hasil);


langkah berikutnya adalah membuat kondisi penambahan 0 di belakang $hasil berdasarkan jumlah karakter hasil penambahan ($pk_n).
if($pk_n == 1){
$jumlah_mhs = "000".$hasil;
}else if($pk_n == 2){
$jumlah_mhs = "00".$hasil;
}else if($pk_n == 3){
$jumlah_mhs = "0".$hasil;
}else if($pk_n == 4){
$jumlah_mhs = $hasil;
}else{
$jumlah_mhs = "Data Error";
}

Dari kondisi diatas dapat diartikan seperti ini jika jumlah karakternya ($pk_n) = 1 maka jumlah mahasiswa 000 digabungkan dengan $hasil yang berarti jika $hasil adalah 2 maka $jumlah_mhs berisi 0002.

dan jika $hasil=10, berarti $pk_n = 2 (2 karakter) maka $jumlah_mhs = 0010 dst sampai dengan kondisi terakhir dimana jika jumlah karatkter ($pk_n) tidak 1,2,3 atau 4 berarti $jumlah_mhs=Data Error.

lalu langkah terakhir kita gabungkan kembali jurusan, tahun dan jumlah mahasiswa
$primary = $jurusan.$tahun.$jumlah_mhs;

dan didapatkanlah ID baru setelah ditambah 1 dari id yang lama.

Untuk lebih jelasnya, silahkan coba script dibawah:
file index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>@nix</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="proses.php">
<table width="657" border="0">
<tr>
<td width="122">Nama</td>
<td width="519"><input name="nama" type="text" id="nama" /></td>
</tr>
<tr>
<td>Jurusan</td>
<td><select name="jurusan" id="jurusan">
<option value="80">TI</option>
<option value="40">SK</option>
<option value="30">SI</option>
</select>
</td>
</tr>
<tr>
<td>Alamat</td>
<td><label>
<textarea name="alamat" id="alamat"></textarea>
</label></td>
</tr>
<tr>
<td><input type="submit" name="Submit" value="Simpan" /></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>
</form>
</body>
</html>





file proses.php
<?php

include "function.php";

mysql_connect("localhost","root","");

mysql_select_db("test");

$nama = $_POST['nama'];

$jur = $_POST['jurusan'];

$alamat = $_POST['alamat'];

$tahun = date("Y");

$query = mysql_query("select * from registrasi where

substr(nim,1,2) = '$jur' order by nim desc");

$data = mysql_fetch_assoc($query);

$id_old = $data['nim'];

if(mysql_num_rows($query) == 0){

$primary = $jur.$tahun."0001";

}else{

$primary = getId($id_old);

}

$qinput = mysql_query("insert into registrasi (nim,nama,alamat) values

('$primary','$nama','$alamat')");

if($qinput){

header("location:./view.php");

exit;

}

?>


file function.php
<?php

function getId($id_old){

$jurusan = substr($id_old,0,2);

$tahun = date("Y");

$jumlah_mhs = substr($id_old,6,4);

$hasil = $jumlah_mhs + 1;

$pk_n = strlen($hasil);

if($pk_n == 1){

$jumlah_mhs = "000".$hasil;

}else if($pk_n == 2){

$jumlah_mhs = "00".$hasil;

}else if($pk_n == 3){

$jumlah_mhs = "0".$hasil;

}else if($pk_n == 4){

$jumlah_mhs = $hasil;

}else{

$jumlah_mhs = "Data Error";

}

return $primary = $jurusan.$tahun.$jumlah_mhs;

}

?>


file view.php

<?php

include "koneksi.php";

$query = mysql_query("select * from registrasi where

substr(nim,1,2) = '40' order by nim desc");

echo "<h2>Jurusan SK</h2>";

while($data = mysql_fetch_assoc($query)){

echo "<br />Nim : $data[nim]";

echo "<br />Nama : $data[nama]";

echo "<br />Alamat : $data[alamat]";

echo "<hr color=blue>";

}


$query = mysql_query("select * from registrasi where

substr(nim,1,2) = '80' order by nim desc");

echo "<h2>Jurusan TI</h2>";

while($data = mysql_fetch_assoc($query)){

echo "<br />Nim : $data[nim]";

echo "<br />Nama : $data[nama]";

echo "<br />Alamat : $data[alamat]";

echo "<hr color=blue>";

}$query = mysql_query("select * from registrasi where

substr(nim,1,2) = '30' order by nim desc");

echo "<h2>Jurusan SI</h2>";

while($data = mysql_fetch_assoc($query)){

echo "<br />Nim : $data[nim]";

echo "<br />Nama : $data[nama]";

echo "<br />Alamat : $data[alamat]";

echo "<hr color=blue>";

}

?>



Pada contoh yang saya buat diatas, untuk setiap jurusan diwakilkan dengan angka.
80 : Untuk Jurusan TI
40 : Untuk Jurusan SK
30 : Untuk Jurusan SI

Jika pada kasus lain, diperlukan id seperti ini 80-2009-0002 atau lc/produk/01 maka cara nya sama saja, hanya saja kita lebih mudah menggunakan fungsi explode untuk memisahkan tiap karakter.
Semoga bermanfaat :D

15 komentar:

  1. :)) :)] ;)) ;;) :D ;) :p :(( :) :( :X =(( :-o :-/ :-* :| 8-} ~x( :-t b-( :-L x( =))

    BalasHapus
  2. itu include "koneksi.php" di view.php dari mana y??????

    BalasHapus
  3. kan tinggal di buat sendiri, tergantung kebutuhan, database dan tabel serta field2nya

    BalasHapus
  4. makasih banyak tutorialnya om..
    baru belajar nih..
    haha::)::)

    BalasHapus
  5. mmm..klo gapake jurusannya aja..hanya diawali tahun,bulan,dan jmlh siswa..bisa ga?

    thanks

    BalasHapus
  6. bisa donk bro, tinggal di kurangi aja, pahami satu-satu dah fungsi substr,strlen nya biar mudah untuk kasus-kasus yang lain

    BalasHapus
  7. om mau nanya klo misalkan sistem itu di akses oleh beberapa komputer pas nyimpan akan terjadi masalah gmn penyelesaiannya??

    BalasHapus
  8. @muchamad => dulu saya pernah nanya seperti itu juga dengan yang lebih senior... kira2 jawabannya seperti ini, "itu urusan program databasenya, umumnya program database modern punya kemampuan untuk mengunci sesi ketika akan menyimpan sebuah data pada tabel, jadi selama proses penyimpanan siapa yang duluan akan tetap duluan lalu ada proses lock dan ketika data sudah tersimpan baru sesi dibuka lagi dan begitu seterusnya...

    BalasHapus
  9. ijin copas artikelnya gan :)

    BalasHapus
  10. Mas, saya kan mau bikin ID siswa bimbel nih, kalo misalnya ID itu terdiri dari 'jurusan','pilihan hari', 'kelompok jam masuk', dan 'cabang bimbel'

    cara nambahin 'pilihan hari', 'kelompok jam masuk' dan 'cabang bimbel' di file proses.php-nya gimana ya? Kayaknya harus diotak-atik di bagian ini ya mas:
    $query = mysql_query("select * from registrasi where

    substr(nim,1,2) = '$jur' order by nim desc");

    $data = mysql_fetch_assoc($query);

    $id_old = $data['nim'];

    if(mysql_num_rows($query) == 0){

    $primary = $jur.$tahun."0001";

    tapi gimana ya kira2? Kalo boleh, mohon dibantu ya mas m(_ _)m
    Makasih banyak sebelumnya mas...^^

    BalasHapus
  11. makasih mas tutorialny sngt membantu

    BalasHapus