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!
seleksi data kembar pada database
Selamat sore para pakar, saya ingin tanya pada para pakar bagaimana cara proses penyimpanan jika ada masalah seperti ini :
ada id = 60 60 70 --> pada database
pertanyaannya bagaimana id2 ini bisa di kasih penomoran otomatis yang di proses saat dalam penyimpanan ke database ?
jadi,
id | No otomatis
60 | 1
60 | 1
70 | 2
Terima kasih atas bantuannya sebelumnya..saya masih newbi..mohon maaf jika ada kata yang tidak di pahami.
Comments
atau mau disimpan juga di database ?
kalo di simpan di database, resikonya :
- nomer bisa lompat kalo ada data yg dihapus
- nomer bisa ndak urut sesuai urutan ID kalo semisal maunya urut ascending / descending by ID
masalah yg nomer 2 itu muncul karena ID nya ndak unik
kalo cuma muncul di tampilan, ndak harus disimpan di db
ndak beda dgn penomeran baris biasa
cuma ada IF nya
yang nantinya akan di tampilkan jg nonya..
untuk data nya c tidak ada yang di hapus pak laba-laba, untuk proses ini sudah melewati beberapa proses..tp saya kebingungan untuk tahapan ini.
untuk id ini saya panggil kembali dari data base, sehingga id muncul dan di pilih melalui cekbox,..
untuk sebelumnya saya memang sudah berhasil membuat penomoran ini..
hanya masih belum tepat karena no yang saya dapatkan jadi berurutan.
contoh yang saya dapatkan sebelumnya:
id | No otomatis
60 | 1
60 | 2
70 | 3
harusnya seperti yang saya contohkan sebelumnya,
id | No otomatis
60 | 1
60 | 1
70 | 2
nah itu yg saya bingung pak, karena bagaimana cara nya membuat kondisi id atas dan id dbawahnya bs di cek, jika id atas dan id setelahnya sama maka no sama, jika id atas dan id setelahnya berbeda maka no bertambah 1..
saya ucapakan terima kasih ya pak, untuk bantuannya dan infonya kepada saya.
ada relasi ke table lain pake id itu ?
jadi gini maklum pemula..
id yang saya contohkan td it bukan id utama..
saya bikin beberapa tabel
tbl angkutan
id_pa | nama_pa
50 | pa. andi
51 | pa. joko
52 | pa. budi
....
tbl transaksi angkutan
id_tx | id_pa | nama_pa
60 | 50 | pa. andi
61 | 51 | pa. joko
62 | 52 | pa. budi
....
70 I 50 | pa. andi
tbl pembayaran
id_pem | id_tx | id_pa | nominal | status pph 23 | no pjk
60 | 60 | 50 | 500.000 | blm setor |
61 | 60 | 50 | 300.000 | blm setor |
62 | 61 | 51 | 500.000 | blm setor |
....
80 | 70 | 50 | 500.000 | blm setor |
tbl grand total
id_gd | id_tx | id_pa | total
60 | 60 | 50 | 800.000
61 | 61 | 51 | 500.000
....
70 | 70 | 50 | 500.000
tbl pembayaran di panggil dengan kriteria status pph 23 = "blm setor" dan id_pa ="50"
muculah form dengan perintah sql seperti di bawah ini,
id_pem | id_tx | status pph 23 | no pjk |
60 | 60 | blm setor | ? |
61 | 60 | blm setor | ? |
80 | 70 | blm setor | ? |
dan melalui chekbox saya mengupdate nilai status pph 23 di tabel pembayaran dari status "blm setor" menjadi "sdh setor" kemudian no pajak ini otomatis terupdate + 1 jika id_tx bawahnya beda sedangkan jika id_tx sama nopjk ya sama. ya contohnya jd,
tbl pembayaran
id_pem | id_tx | id_pa | nominal | status pph 23 | no pjk
60 | 60 | 50 | 500.000 | sdh setor | 1
61 | 60 | 50 | 300.000 | sdh setor | 1
62 | 61 | 51 | 500.000 | blm setor |
....
80 | 70 | 50 | 500.000 | sdh setor | 2
ini hanya gambaran kasarnya pak,..
tapi lekatkan ke table tbl transaksi angkutan
karena di table tbl transaksi angkutan id_tx nya unik
atau elo bisa bikin konsep lain ...
itu nomor masuk pake proses INSERT atau UPDATE ?
no pjk = 1 terdiri dari 2 data
prosesnya juga proses UPDATE
kenapa ndak bisa nempel di tbl transaksi angkutan ?
nempel di tbl transaksi angkutan juga belum berarti field nomor harus ada isinya
elo tetap bisa isi field itu berdasarkan kondisi IF yg elo mau
dan elo juga tau kenapa mestinya nempelnya di tbl transaksi angkutan
karena di tbl transaksi angkutan itu id_tx nya unik
pertanyaannya jadi ...
apa ada data di tbl pembayaran, yg id_tx nya sama, tapi nomor nya beda ?
Sesuai dengan pertanyaanmu, maka:
select idtx, no_pajak from table x where idtx = id_tx_baru;
if hasil > 0 {
a = no_pajak
inset intp table x (idx,noPajak) values (id_tx_baru,a)
} else {
select max(no_pajak) from table x
b=max_no_pajak + 1
inset intp table x (idx,noPajak) values (id_tx_baru,b)
}
memang benar untuk penomoran cara mudahnya tinggal memberikan field lagi di tabel yang mempunyai id unik seperti table grand total mungkin, tetapi di sini program sudah berjalan cukup lama dan ada permintaan dari rekan saya untuk penambahan no pajak, yang selama ini no pajak di lihat dari buku manual (bulan kemaren sudah sampai pelaporan no berapa di buku trus d lanjut lagi untuk penulisan sptnya).
nah, dari permasalahan itu saya mencoba menyanggupi untuk memberikan nopjk yang saya tambahkan di table pembayaran. untuk permasalahan berikutnya adalah di mana setiap pph dari pembayaran angkutan ini dipilah kembali berdasarkan pa angkutan dan dipilih mana nominal pph yang akan diinput kedalam spt bulan, makanya dari pertanyaan pak laba2 "id itu bisa kembar, asal muasal datanya bagaimana ?ada relasi ke table lain pake id itu ?"
saya menjelaskan dan memberikan gambaran bahwa,
tbl pembayaran di panggil dengan kriteria status pph 23 = "blm setor" dan id_pa ="50"
muculah form dengan perintah sql seperti di bawah ini,
id_pem | id_tx | status pph 23 | no pjk |
60 | 60 | blm setor | ? |
61 | 60 | blm setor | ? |
80 | 70 | blm setor | ? |
dan melalui chekbox saya mengupdate nilai status pph 23 di tabel pembayaran dari status "blm setor" menjadi "sdh setor" kemudian no pajak ini otomatis terupdate + 1 jika id_tx bawahnya beda sedangkan jika id_tx sama nopjk ya sama.
ini sedikit kodingan ecek2 saya pada proses pengupdatetan status pph23 dari blm setor menjadi sdh setor.
$jumlah = count($_POST['status']);
$addnopjk = 0;
for($i=0; $i < $jumlah; $i++)
{
$kode = $_POST["status"][$i];
$id_temp = $_POST["id_tx"][$i];
$tes = "select nopjk from pembayaran order by nopjk desc limit 1";
$dtbs = mysql_query($tes) or die("Query gagal");
while($hsldtbs = mysql_fetch_array($dtbs))
{ $no_pjk = $hsldtbs["nopjk"]; }
$testing = "select id_tx from tx_pa ";
$dt_base = mysql_query($testing) or die("Query gagal");
while($hsl_dtbase = mysql_fetch_array($dt_base))
{ $id_tempnm = $hsl_dtbase["id_tx"]; }
$data = array($id_temp);
foreach($data as $value) {
if(@$data[$value+1]['id_tx'] != $id_tempnm)
{ $addnopjk = $no_pjk + 1; }
}
$sql = "update pembayaran set status_setorpjk = 'Telah di Setor, nopjk = '$addnopjk' WHERE id_pem ='$kode'";
$q = mysql_query($sql) or die (mysql_error());
}
if ($q)
{
//ini ada kondisi balik ke tampilan form = id_pa
}
else
{
echo"Data Gagal Disimpan";
}
jangan ngakak ya pak laba2 liat koding ecek2 saya..koding dia atas ini jika saya pilih cek box data yang mau disetor itu penomoran otomatis bertambah 1 tanpa memperdulikan id_tx ada yang sama ato tidak, begitu pak.
untuk pak Christoph Manao, terima kasih untuk jawabnnya tapi program ini berjalan saat proses update data.
jika id_tx sudah ada di db, maka no_pajak harus sama dengan.
jika id_tx belum ada di db, maka no_pajak tambah 1
atau bagaimana ?
saya tambahkan
proses pertama:
perubahan status 'blum setor' ke 'setor' action ---> update
proses kedua:
no_pajak ---> action: insert, soalnya klo update angka 60 (ip_tx) tidak mungkin lebih dari 1.
$jumlah = count($_POST['status']); $addnopjk = 0; for($i=0; $i < $jumlah; $i++) { $kode = $_POST["status"][$i]; $id_temp = $_POST["id_tx"][$i]; $tes = "select nopjk from pembayaran order by nopjk desc limit 1"; $dtbs = mysql_query($tes) or die("Query gagal"); while($hsldtbs = mysql_fetch_array($dtbs)) { $no_pjk = $hsldtbs["nopjk"]; } $testing = "select id_tx from tx_pa "; $dt_base = mysql_query($testing) or die("Query gagal"); while($hsl_dtbase = mysql_fetch_array($dt_base)) { $id_tempnm = $hsl_dtbase["id_tx"]; } $data = array($id_temp); foreach($data as $value) { if(@$data[$value+1]['id_tx'] != $id_tempnm) { $addnopjk = $no_pjk + 1; } } $sql = "update pembayaran set status_setorpjk = 'Telah di Setor, nopjk = '$addnopjk' WHERE id_pem ='$kode'"; $q = mysql_query($sql) or die (mysql_error()); } if ($q) { //ini ada kondisi balik ke tampilan form = id_pa } else { echo"Data Gagal Disimpan"; }
semoga nda tambah pusing ya pak..
id_pem | id_tx | id_pa | nominal | status pph 23 | no pjk
60 | 60 | 50 | 500.000 | blm setor | ?
61 | 60 | 50 | 300.000 | blm setor | ?
62 | 61 | 51 | 500.000 | blm setor | ?
....
80 | 70 | 50 | 500.000 | blm setor | ?
klo di insert maka tampilannya jd
id_pem | id_tx | id_pa | nominal | status pph 23 | no pjk
60 | 60 | 50 | 500.000 | sdh setor | 1
| | | | sdh setor | 2
61 | 60 | 50 | 300.000 | sdh setor | 3
| | | | sdh setor | 4
62 | 61 | 51 | 500.000 | blm setor | ?
....
80 | 70 | 50 | 500.000 | blm setor | ?
| | | | sdh setor | 5
soalnya di skripmu,
1. semua proses setelah
while($hsldtbs = mysql_fetch_array($dtbs))
{ $no_pjk = $hsldtbs["nopjk"]; }
seharusnya ikut masuk ke dalam perulangan.
2. kondisi klo id_tx tidak sama belum kamu set.
yg dihadapi user kan aplikasi nya, bukan db nya
jadi ndak masalah kalo nomor ditempelkan di tbl transaksi angkutan
ini gw ngomong ditempel di tbl transaksi angkutan bukan cuma sekedar gampang atau enggak nya
tapi juga dgn pertimbangan beban yg ditanggung database
yg efeknya bisa mempengaruhi lama eksekusi aplikasi
[2]
koding elo, jujur, gw bingung baca alur logika nya ...
tapi ntar aja, drpd benerin 1-1, mending bongkar sekalian
elo posting aja <form> / koding elo buat bikin <form>
yg ada checkbox yg elo maksud
jadi gw bisa baca cara inputnya kaya apa
ok pak laba2..
makanya diset dikondisi jika id_tx sama maka no_pajak juga harus sama.
selebihnya ya.. ditambah 1
http://www.diskusiweb.com/discussion/50487/update-field-pada-database-gagal-menggunakan-checkbox
lalu poin ini :
itu loop juga pake for, pake checkbox juga tapi gagal update ... salah update malah ...
gw baca struktur yg sama di koding elo, pake checkbox juga gw curiga koding elo juga bakal mengalami masalah yg sama
jadi ... <form> elo posting kemari
lalu posting kemari url nya
select * from angkutan where jnspjk like 2 order by nama ASC
lebih baik
select * from angkutan where jnspjk=2 order by nama ASC
[2]
itu form yg pertama, yg pake <select>
kalo niatnya ganti pilihan langsung submit ...
ndak perlu pake input submit
mending langsung pake event onchange di <select> nya
itu kalo niatnya ... pilih-langsung submit
tapi kalo enggak, ya tetep pake model sekarang ya ndak apa
[3]
extract($row);
kayanya ndak ada gunanya elo pake ...
lha di bawahnya tetap elo tulis 1-1 tiap variable yg elo butuhkan yg nilainya tetap elo ambil dari $row[]
[4]
<input name="id" type="hidden" value="<?php echo "$idx";?>" />
<input name="id" type="hidden" value="<?php echo "$idx";?>" />
tuh ketulis dobel
[5]
koding elo di atas ...
$id_temp = $_POST["id_tx"][$i];
gw bandingin dgn form nya ...
ndak ada <input> yg "name"-nya "id_tx" ...
lalu $_POST["id_tx"] dapat nilai dari mana ?
cek ulang
[6]
bener, masalah elo kemungkinan bisa sama ...
"name" juga pake []
tapi ambil data pake for
kesalahan bakal kejadian kalo
- yg elo check ndak urut
- yg elo cek bukan yg awal (akhir, tengah, atau lompat-lompat)
ubah pake foreach, baca tret yg satunya
sudah gw tulis detil di situ
bahas 1-1 dulu, koreksi sambil dibenerin
kalo sudah, posting ulang kode yg sudah elo perbaiki
biar bisa dilihat progres perbaikannya
yg nomer [5] jadi ...
di form elo :
<input name="id_tempnm" type="text" value="<?php echo $row['id_tx'];?>" />
itu bukan array ...
kalo array, "name" nya pake []
sementara yg menerima ...
$id_temp = $_POST["id_tempnm"][$i];
ndak bakal ketemu ...
ini error reporting elo mati kah ?
soalnya kalo hidup pasti php nya sudah ngomong ...
Notice: Undefined index: ... in ...\ubah_status_pph.php on line ...
gara-gara index [$i] ndak ada
sudah, dibenerin dulu, baca tret yg satunya ...
- benerin name nya pake [$index] ...
$index ini terserah elo namakan apa,
baca di tret yg satunya, sdh gw jelasin kenapa harus dipake dan cara bikinnya
- lalu ganti proses nya pake foreach
name bukan cuma [], tapi juga beneran harus ada nomor nya sejenis [$index]
lalu proses pake foreach, bukan pake for
http://www.diskusiweb.com/discussion/50487/update-field-pada-database-gagal-menggunakan-checkbox
KONDISI AWAL
masih pake for ...
$kembali itu asalnya dari
$kembali= $_POST['kembali'];
$_POST['kembali'] asalnya dari
<input type='checkbox' name='kembali[]' value='2'>
DIUBAH
pake foreach ...
$kembali tetap asalnya dari
$kembali= $_POST['kembali'];
$_POST['kembali'] asalnya berubah dari
<input type='checkbox' name='kembali[".$no."]' value='2'>
dan kalo di lihat di tret yg satunya ...
ndak cuma input checkbox yg ditambah $no
semua input yg pake [], semua ditambah $no $no asalnya dari
$no++;
urut sesuai nomor baris data elo
inisialisasi di awal sebelum bikin baris data
$no=1;
ndak mesti harus mulai dari 1, dari 0 juga boleh
kalo koding elo ...
yg checkbox itu
<input name="status[]" type="checkbox" value="<?php echo "$id_detail";?>" />
diterima di
$kode = $_POST["status"][$i];
tapi ada beda beda dikit nulis nya
di tret yg satunya ada assignment $kembali= $_POST['kembali']; sebelum FOR
di koding elo ndak ada ...
tapi ndak masalah, bisa aja foreach nya elo tulis jadi
foreach($_POST["status"] as $index=>$value) {
di dalam foreach tinggal elo ubah
$kode = $_POST["status"][$index];
yg lainnya ngikut ...
atau tetap mau pake $i juga ndak masalah ...
foreach($_POST["status"] as $i=>$v) {
lha wong elo bikin nama variable itu bebas
kepake apa enggak ?
posting ulang kodingnya
biar bisa di periksa progres perbaikannya kaya apa
[1]
$tabel = ""select * from pembayaran p inner join gd_total gd on p.id_tx = gd.id_tx WHERE gd.status_byr='Telah di Cek' and p.id = ".$_POST['angkutan'];
cek ulang quote nya
[2]
if(true) {
$pphnya = $row["nilaipjk"];
$totalnya += $pphnya;
$jdtotalnya = number_format($totalnya,0,',','.');
}
buat apa pake if(true) ? kan pasti selalu TRUE
napa ndak langsung begini aja ...
$pphnya = $row["nilaipjk"];
$totalnya += $pphnya;
$jdtotalnya = number_format($totalnya,0,',','.');
[3]
<input name="kode" type="hidden" value="<?php echo "$id_detail";?>" />
<input name="id" type="hidden" value="<?php echo "$idx";?>" />
ndak ada gunanya ditulis ...
di proses nya gw ndak liat elo ambil
$_POST['kode']
$_POST['id']
[4]
<select name="tahun[<?php $i; ?>]">
<option>2018</option>
<option>2019</option>
<option>2020</option>
</select>
kalo masalah pilihan, kalo elo buat fix kaya gitu ...
apa ya tiap tahun mesti ganti kode manual ?
napa ndak begini aja ...
<select name="tahun[<?php $i; ?>]">
<?php
for($thn = date('Y'); $thn < date('Y') + 3; $thn++) {
echo '<option>'.$thn.'</option>';
}
?>
</select>
tahun berubah, otomatis pilihan juga berubah sendiri
bulan juga bisa elo buat sejenis
atau sekalian langsung bikin pilihan 12 bulan, ndak berubah-ubah
hambok sabar
besok juga masih hari minggu