Tolong pilih kategori sesuai, jenis posting (pertanyaan atau bukan) dan sertakan tag/topik yang sesuai misal komputer, php, mysql, dll.
Promosi atau posting tidak pada tempatnya akan kami hapus.
Mencantumkan kode program di posting Anda, tolong ikuti aturan yang sesuai, baca http://diskusiweb.com/discussion/39204/aturan-cara-menyisipkan-kode-program-di-diskusiweb

Baca cara posting gambar/image di post Anda: http://www.diskusiweb.com/discussion/47345/cara-menyisipkan-menyertakan-image-pada-posting/p1

Kode Otomatis

Para sesepuh PHP, saya minta pencerahan dari teman2.
Langsung saja ingin membuat penomoran otomatis di Form input untuk listingnya saya menggunakan script di bawah.
<pre lang="php">
<?php
$qry_id = mysql_query("SELECT max(kode) as maxID FROM kodeotomatis");
$row_id = mysql_fetch_array ($qry_id);
$kode = "$row_id[maxID]";
$noUrut = (int)substr($kode,1,5);
$noUrut++;
$newID = sprintf("%05s",$kode);
echo"<input type='text' name='a' value='$newID'>";
?>
</pre>

Untuk kode di atas sudah jalan sesuai harapan. Tapi maslah timbul ketika user yg mengakses form lebih dari 2, kode otomatis yg di dapat pasti sama. mis: 00001. Mohon pencerahan supaya kedua user atau lebih tdak mendapatkan kode yg sama.

Tanggapan

  • * ... paling benci baca "gan" ... ngeloyor pergi ... *
  • * ... paling benci baca "gan" ... ngeloyor pergi ... *
    Maaf saya blum tahu peraturan2 untuk membuat pertanyaan..
  • edited October 2012
    kalo liat koding na ...
    gw kok kagak liat urgensi generate kode lewat script
    kenapa kagak pake AUTOINCREMENT saja + mengaktifkan ZEROFILL ?

  • saya tdak pake generete kode, karena kodenya harus berurut mis : 00001, 00002 ... dan seterusx.
    Maslhx kodex di haruskan muncul di text box.
    Mohon pencerahan..
  • AUTOINCREMENT di database -> otomatis urut
    ZEROFILL -> otomatis menambah '0' di depan value field

    kalo masalah kode diharuskan muncul di text box ...
    boleh tau kasus nya sebenernya kaya apa ?

    belom pernah tau ada kasus ID harus nungul sebelum di entri
  • Owh. baru tau kalau fungsin ZEROFILL. Makasih ilmunya.

    Kasusnya form input data barang di mana kode barang itu otomatis dan berurut berdasarkan inputan.
  • ini kasus, dipahami dolo, jika rencana situ mau dilakukan :

    - 2 orang entri bersamaan
    - taruh kata bisa generate kode yg berbeda
    - si A dapet kode 00005
    - si B dapet kode 00006
    - si B simpan data
    - si A batal

    wal hasil, kode 00005 tidak akan pernah digunakan untuk seterusnya
    bakal jadi masalah atau kagak ?
  • Pemikiran saya ketika kode di dapat itu tdak di simpan ke database sampai di tekan tombol save.

    Tpi bener juga sih dari pemikiran mas(maaf kalau salah panggil).
    Bisa jadi masalah karena ada 1 nomor yang tdak terpakai.. kalau Tergenerete mungkin kecil kemungkinan.
  • edited October 2012
    ya pilihan ...

    kalo mau harus ditampilkan di form kaya yg situ mau
    RESIKO : kalo batal save, id bakal tidak terpakai
    id bisa juga loncat kalo ada proses DELETE di data yg ada di urutan sebelum id terakhir

    kalo gak perlu ditampilkan,
    bisa AUTOINCREMENT di database
    id hanya loncat kalo ada proses DELETE di data yg ada di urutan sebelum id terakhir

    pilih yg mana ?

    kalo masalah '0' di depan id, pake aja ZEROFILL
    koding situ cuma buang step

    btw,

    $a='00005';
    echo sprintf("%05s",$a+1);

    coba aja ...
  • edited October 2012
    Kalau field id yg AUTOINCREMENT ttp saya pakai mas cman ada field kode lagi sebagai tambahan pengenal ttpi bkan primary key.

    Seprtinya saya mau pakai jalan kode barangx generete(random kode).

    Makasih banyak masukan nya Mas Boo..
  • edited October 2012
    Kalau field id yg AUTOINCREMENT ttp saya pakai mas cman ada field kode lagi sebagai tambahan pengenal ttpi bkan primary key.

    Seprtinya saya mau pakai jalan kode barangx generete(random kode).
    ini maksudnya gimana lagi ?

    field
    ID -> id row, AUTOINCREMENT
    KODE -> random, jadi kode yg ditampilkan di form

    gitu ?
    kalo iya, gitu lebih baik ...

    cuma masalahnya ... se-random-random-nya angka, tetep bisa ketemu angka yg sama
    apalagi kalo panjang string angka nya sedikit, dan variasi karakternya cuma 10 (hanya angka : 0-9)
  • field
    ID -> id row, AUTOINCREMENT
    KODE -> random, jadi kode yg ditampilkan di form
    Iya begitu rancangan tabel saya mas.

    Nah, itu dia yg sempat terpikir mas.
    Mungkin lebih baik kodenx di dapat pada saat penyimpanan data ke database saja.
  • edited October 2012
    Mungkin lebih baik kodenx di dapat pada saat penyimpanan data ke database saja.
    umum nya sih emang gitu ...


    kalo mau pake random kode, kalo semisal pilihan variasi karakter nya cuma angka 0-9
    ya pilihannya tinggal panjangin string random kode nya, jangan cuma 5
    semakin panjang, kemungkinan sama semakin kecil

    tapi bukan berarti total gak bakal ada yg kembar,
    masih mungkin kembar, cuma kemungkinannya diperkecil
  • Sipp mas.
    Makasih banyak sudah di temani sharing pendapat..
  • edited October 2012
    FYI, gw terusin dikit ... kalo mau tau logika buat masalah awal ... dengan mengabaikan resiko yg sdh gw tulis

    langkah yg bisa dilakuin :
    - table punya field-field : ID | ... field-field data lain ... | SAVED
    - ID -> AUTOINCREMENT, ZEROFILL
    - SAVED -> default : 0
    - saat buka form, INSERT -> data kosong semua, kecuali SAVED diisi 0 (data belum disimpan)
    - ambil id ter-generate dari database pake mysql_insert_id()
    - otomatis antara form satu dan lainnya ID-nya tidak akan pernah sama, meskipun dibuka secara bersamaan
    - simpan data = UPDATE id yg bersangkutan, dan SET SAVED=1

    resikonya ya itu tadi, ada id yg tidak terisi jika batal save
    bisa diakali, tapi jadinya nanti lucu kalo berhubungan dgn TANGGAL
    dan akal-akalannya justru bisa menyebabkan dapet ID kembar lagi :D ( mesti diakali pake cara lain lagi :))  dan bikin tambah muter-muter)

    cara mengakali id yg batal dipake :
    - ambil pake SELECT MIN(id) ... WHERE SAVED=0 LIMIT 1
    - cek pake mysql_num_rows(), kalo 0 berarti id sudah terpake semua dan urut, kalo 1 id yg dimaksud masih kosong dan bisa dipake
    - otomatis dapet id terkecil yg batal dipake (ini bisa kemungkinan kembar kalo dibuka bersamaan)
    - save tetep sama : UPDATE id yg bersangkutan, dan SET SAVED=1

    cuma yg jadi lucu :
    - misal ada user menyimpan data dan dapat id : 12345 , tersimpan tanggal 31-12-2011
    - id terkecil yg masih kosong 00005
    - jika pake cara di atas, otomatis id 00005 bisa dipake
    - cuma kalo disimpan, id 00005 akan bertanggal (misal) hari ini : 24-10-2012

    jadinya lucu, id lebih kecil tapi tanggal lebih baru
    pake MAX() pun tetep sama ... id lebih kecil tapi tanggal lebih baru



    pertimbangkan aja sendiri pilihan yg paling baik ...
  • langkah yg bisa dilakuin :
    - table punya field-field : ID | ... field-field data lain ... | SAVED
    - ID -> AUTOINCREMENT, ZEROFILL
    - SAVED -> default : 0
    - saat buka form, INSERT -> data kosong semua, kecuali SAVED diisi 0 (data belum disimpan)
    - ambil id ter-generate dari database pake mysql_insert_id()
    - otomatis antara form satu dan lainnya ID-nya tidak akan pernah sama, meskipun dibuka secara bersamaan
    - simpan data = UPDATE id yg bersangkutan, dan SET SAVED=1
    1. Buat ZEROFILL g mana carannya mas? Mohon petunjuk. Maklum awam
    2. Bisa minta example listingx Mas.

    Misal
    Field :
    ID : AUTOINCREMENT, ZEROFILL
    KODEBR : VARCHAR, 5
    NAMABR : VARCHAR, 40

    Listing Form
    <pre lang="php">
    <?php
    Minta Penjelasan listing pembuatan kodenya mas...
    ?>

    Kode : <input type="text" name="kode" value="......" />
    Nama Barang : <input type="text" name="namab" />
    </pre>.

    Mohon pencerahan.
  • edited October 2012
    yg ZEROFILL ...

    CREATE TABLE `...` (
      `id` BIGINT(5) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,
    ...
    ...
      `saved` int(1) UNSIGNED DEFAULT '0',
    ) ... AUTO_INCREMENT=1 ...;



    yg laen ntar ... gw mo klayapan dolo ...
  • edited October 2012
    tampil form :
    <?php
    ...
    ...
    mysql_query('INSERT INTO ... (`saved`) VALUES ("0")');
    $id=mysql_insert_id();
    ...
    ...
    ?>
    ...
    ...
    Kode : <input type="text" name="kode" value="<?php echo $id; ?>" />
    //kalo $id ternyata tidak mengikutkan ZEROFILL nya, pake fungsi sprintf(),
    //tapi jangan hapus attribut ZEROFILL, masih bermanfaat utk SELECT nya
    ...
    ...


    simpan :
    <?php
    ...
    ...
    mysql_query('UPDATE ... SET ...=...,`saved`="1"  WHERE id="..."');
    ...
    ...
    ?>
  • Tapi maslah timbul ketika user yg mengakses form lebih dari 2, kode otomatis yg di dapat pasti sama. mis: 00001. Mohon pencerahan supaya kedua user atau lebih tdak mendapatkan kode yg sama.
    bukannya tinggal diksh cegatan, setiap ngesave ada pengecekan lagi, jika si A ngesave duluan, maka begitu si B ngesave maka di cek, jika 00001 sudah ada di db maka no si B berubah menjadi 00002.

    kalo gw sih biasanya ada tabel counter, khusus yg isi field2nya sesuai no bukti terakhir.

    contoh, fieldInvoice, fieldSO

    dlm kasus ini, begitu si A save 00001, maka akan simpan juga di tablecounter, begitu si B ngesave, maka cek di table counter ini.

    begitu kira2

  • edited October 2012
    bukannya tinggal diksh cegatan, setiap ngesave ada pengecekan lagi, jika si A ngesave duluan, maka begitu si B ngesave maka di cek, jika 00001 sudah ada di db maka no si B berubah menjadi 00002.
    ya kagak lucu dong pli ... :D

    ibarat, elo dateng ke loket ...
    karena sistemnya "ngaco", elo ama gw sama2 dapet nomer urut 10
    begitu display nungul angka 10, diharap maju ke depan ...
    elo mau digeser jadi nomer 11 ? soalnya gw ogah ... =))
    lha tiyus, ternyata no 11 yg sudah dipegang ama yugo ... lha apa kagak kejadian KDRT di tempat ? =))


    masalahnya, ada keinginan tuh nomer sudah nungul di form sebelum di submit - analoginya - nomer antrian sudah dipegang sebelum dipanggil
  • @mas boo
    memang ada case yg seperti itu mas, jadi waktu bikin transaksi baru, no dimunculkan.
  • edited October 2012
    jangan tanya gw ... gw aja nanya :
    kalo masalah kode diharuskan muncul di text box ...
    boleh tau kasus nya sebenernya kaya apa ?

    belom pernah tau ada kasus ID harus nungul sebelum di entri
    soalnya gw pribadi gak pernah ngadepin

    tapi disisi gw ya tetep harus komit, kalo dikasih nomer urut 00005, ya 00005 itu harus valid
    soalnya bisa ngaruh ke urutan berikutnya ...
    iya kalo concurent cuma 2, lha kalo 10 ? 100 ? semua dapet nomer urut 00005

  • edited October 2012
    jangan tanya gw ... gw aja nanya
    gw gk nanya mas, komen gw khan gak ada tanda '?' nya, hehe

    salah satunya gini mas, kertas kwitansi yg kita pesan di percetakan 1 dus yg di tampilan kertasnya ada formatnya, contoh, kw001 - kw999.

    kalo kita liat diawal transaksi tampilannya kw021, sedangkan di kertas kwitansi yg ada dimulai kw009, ini akan dilakukan pengecekan sebelum ngesave, apa ada transaksi gk cetak kwitansi.

    begitu kira2

  • lha tiyus, ternyata no 11 yg sudah dipegang ama yugo ... lha apa kagak kejadian KDRT di tempat ? =))
    selalu aja yayank nya disebut2 :))

  • edited October 2012
    ya kalo gw sih, kalo semisal data itu gak ada gunanya ditampilkan (toh ndak valid),
    ya ndak usah ditampilin aja ... useless ...

    kalo semisal itu permintaan manajemen / clien ... ya debat aja kalo ndak logis
    dari sisi manfaat juga kagak ada


    bah ... gitu yoooo ... gw doa'in aja dah biar kalian berdua balikan ... =))
    poligami kagak dilarang kok pli ... =))
  • bah ... gitu yoooo ... gw doa'in aja dah biar kalian berdua balikan ... =))
    poligami kagak dilarang kok pli ... =))
    masa' poligami sama batangan juga :))
  • bila user concurent, dan id tergenerate otomatis biasanya sih gak ditampilkan saat form input,
    kecuali mau pake id yang tergenerate dari timestamp waktu server.
Sign In or Register to comment.