Tolong pilih kategori sesuai, jenis posting (diskusi atau bukan) dan sertakan tag/topik yang sesuai seperti komputer, java, php, mysql, dll. Promosi atau posting tidak pada tempatnya akan kami hapus!
- Bagi Anda yang ingin mendaftar, baca link berikut:
http://diskusiweb.com/discussion/50491/how-to-registrasi-diskusiweb-com-baca-ini-terlebih-dahulu
- Cara menyisipkan kode program supaya tampil rapi dan terformat dengan baik di diskusiweb.com: http://www.diskusiweb.com/discussion/50415/cara-menyisipkan-kode-program-di-diskusiweb-com
- Cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

Membuat NIK unik & otomatis di codeigniter

Pagi master, mau nanya ni.
Lg bikin aplikasi pake CI, di kantor format untuk nik karyawan itu, contoh : 0000 & kalau ada nik baru jadi 0001. Nah kalau nik terakhir 0009 pas ada nik baru harus jadi 0010. Nah untuk pemberian nomor NIK di lakukan setelah form di klik save (Proses input ke database). Struktur tabelnya kaya gini :

id | NIK | Nama
1 | 0001 | Ucep
2 | 0002 | Devi
......
10 | 0010 | Anto

selama ini input nik manual di form, cuman si user harus tau nomor nik terakhir & itu ga efektif banget. Minta tolongnya master.

Controller
<?php
public function save(){
$data = $this->input->post(null,true);
$send = $this->data_karyawan_model->save($data);
if($send)
redirect('karyawan/data_karyawan');
}
?>

Model
<?php 
private $_table = 'karyawan';
public function save($data){
$arr = array(
'nik' => $data['nik'],
'nama_lengkap' =>data['nama_lengkap']
);
$this->db->trans_begin();
$this->db->insert($this->_table,$arr);
?>

Comments

  • id auto increment kan? ambil aja dari id trus niknya di
    $nik = sprintf('%4d',$data['id'])

  • Sy coba dulu ya master.. Makasih tanggapannya.
  • Pagi mas,
    saya balik lagi dan ada yang mau di tanyain lagi, misalkan gini mas, saya punya data

    id | NIK | Nama
    1 | 01 | Joko
    2 | 08 | Ucep
    3 | 14 | Samsul
    4 | 20 | Sainusi
    5 | 67 | Iin
    ......

    Saya mau saat user input form, tidak input NIK, NIK otomatis kebentuk saat simpan ke database. Kalau saya pake caranya @bigson16 . Saya input karyawan baru. nanti NIK nya 00006. Seharusnya NIK karyawan tersebut jadi 68. Jadi prinsip NIK nya ikut kaya ID (AI) cuman NIK yang lama uda ga urut mas.
    Ada yang bisa bantu ?

  • edited June 2016
    kalo mau otomatis, harus ada rumusnya,
    yg dipake dasar adalah nilai yg telah ada sebelumnya

    kalo autoincrement, dasarnya adalah +1 dari nilai sebelumnya

    lha yg ini rumusnya bagaimana ?

    lalu format NIK juga berpengaruh
    misal NIK kaya begini :
    ABC123456789
    ada huruf di dalam NIK
    itu mesti dipisah dulu hurufnya
  • edited June 2016
    Jadi format NIK nya jadi angka semua mas. Contoh 12345.
    Contoh NIK terakhir sekarang di 67. Nanti ada karyawan baru jadi 68. Terus begitu mas.

    Ia mas jadi NIK terakhir +1.
  • Misalkan format nik
    00020

    1. select nik yang teralhir. Pakai order by dan limit 1
    2. jika hasil nggk ada maka otomatis 00001
    3. Jika ada maka tampung dalam variable misalkan. Milsakkan $no=$res->nik
    4. Konversi ke integer pakai (int). Lalu tambahkan satu
    5. Gunakapan fungsi str_pad untuk menambah string 0 didepan angka.
  • contoh:
    SELECT 
    IFNULL(LPAD(MAX(CAST(RIGHT(karyawan_nik, 7) AS SIGNED) + 1), 7, '0'), '0000001') AS nik_number
    FROM karyawan
  • edited June 2016
    jangan di CAST signed, Dan :D

    mending UNSIGNED

    NIK ndak mungkin negatif

    tapi tanpa CAST juga bisa kok, ndak masalah
    mysql type variabel nya kaya php dan js, bebas di ubah-ubah type nya

    SELECT RIGHT("987654321",4)+1

    hasilnya bener : 4322
    type jadi numerik



    btw, itu urutan prosesnya apa ndak salah ?

    di RIGHT dulu ? 7 char ?

    taruh kata NIK 12 digit sudah ada kaya begini :
    123499999998
    123499999999
    123500000000
    123500000001

    harusnya berikutnya : 123500000002

    RIGHT, 7 :
    99999998
    99999999
    00000000
    00000001

    CAST ndak masalah, cuma ubah type ...

    +1 (type numerik)
    99999999
    100000000
    00000001
    00000002

    MAX ?
    ini dong : 100000000
    soalnya itu type sudah numerik

    kalo pun dianggap string, kena yg ini : 99999999

    MAX harusnya yg urutannya paling dalam
  • edited June 2016
    aduh.. aduh.. maap mas mas semua.
    Saya ada revisi sedikit untuk masalah penomoran NIK.
    Jadi format NIK sekarang ga pake "0" lagi di depannya. Jadi langsung mas nomor NIK nya.

    id | NIK | Nama
    1 | 1 | Joko
    2 | 8 | Ucep
    3 | 14 | Samsul
    4 | 20 | Sainusi
    5 | 67 | Iin

    Nik yang sebelumnya ternyata saya yang salah. Jadi sekarang NIK terakhir ada di '67' jika ada karyawan baru dapat NIK '68' mas. Jadi saya pake cara yang mana mas ?
    #:-S
  • @kepiting

    Cuma contoh pak boo, asal ngetik..tapi itu tujuannya nik yg isinya varchar, 
    Bisa jadi nik nya KY0000001, KY0000002. saya ambil hanya 7 karakter di belakang, saya jadiin signed 
    biar nantinya +1 hehehe. 
  • edited June 2016
    Ok mas uda fix, saya pake punyanya mas @Goku. Kebetulan tipe datanya int jadi bisa langsung mas.
    $sql2 = $this->db->query( "SELECT * FROM karyawan ORDER BY nik DESC LIMIT 1");	
    foreach ($sql2->result_array() as $row)
    {
    $row['nik'];
    }
    $new_nik = $row['nik'] + 1;

    Makasih ya mas-mas masukannya 
    :-bd
  • ???

    salah mas kalo proses di php ...
    diambil diawal pula, pake SELECT ...

    ini elo pasti pake asumsi pengguna cuma 1
    coba elo pikir kalo pengguna 2 orang sajalah, pake bersamaan ...

    A & B pake aplikasi bersamaan
    A buka, B buka
    NIK terakhir 10
    A dapet 10+1 = 11
    B dapet 10+1 = 11
    tau lanjutannya ?
    NIK bakal kembar

    proses itu di mysql nya
    saat SIMPAN
    INSERT, sekaligus generate NIK
    itu yg bener

    ndak ada logikanya siswa dapat NIS saat pendaftaran
    yg ada siswa dapat NIS setelah diterima sekolah

    ndak ada logikanya pegawai dapat NIK saat isi form identitas baru
    yg ada pegawai dapat NIK setelah disimpan di db
  • edited June 2016
    ia mas pembentukan NIK sebelum di insert ke db & setelah user input form.

    <?php
    $sql2 = $this->db->query( "SELECT * FROM karyawan ORDER BY nik DESC LIMIT 1");
    foreach ($sql2->result_array() as $row)
    {
    $row['nik'];
    }
    $new_nik = $row['nik'] + 1;
     
    $arr = array(
    'nik' =>$new_nik,
    'nama_lengkap' =>$data['nama_lengkap'] );
    $this->db->insert($this->_table,$arr);

    Kalau saya taro di situ bener ga mas ?
  • edited June 2016
    riskan
    ada proses pindah data dari db ke php dan php ke db
    ada jeda waktu lebih panjang

    napa to ndak begini saja :

    INSERT INTO tbl_pegawai (nik,nama,alamat,id_agama) SELECT MAX(nik)+1,"ali","jakarta",1 FROM tbl_pegawai LIMIT 1

    SELECT sekaligus INSERT
    tanpa jeda
    tanpa pindah pindah data
  • ok mas saya coba dulu
Sign In or Register to comment.