Postingan lainnya
Bagaimana membuat form dengan id yang sama dengan php mysql
hai saya menggunakan bahasa program php dan mysql, saya ingin bertanya, jadi saya punya lebih dari 1 page form, contoh seperti ini: form 1: isi nama (page nama) form 2: isi umur (page umur) form 3: isi alamat (page alamat)
bagaimana menyatukan data tersebut dan menghindari data tabrakan semisalnya ada contoh kasus seperti ini
(misal ID Auto_increment)
user1 input nama ke database dengan hasil id=1 user2 input nama ke database dengan hasil id=2
dan pada saat ini user2 mendahului user1 input umur, hasilnya yang harusnya user2 input umur untuk dirinya sendiri malah masuk ke data umur user1, contoh seperti ini,
user2 input umur ke database dengan hasil id=1 user1 input umur ke database dengan hasil id=2
jadi itu yang harus saya cegah, mohon bantuannya memberikan ide dan jalan keluarnya terimakasih untuk yang mau menjawab
1 Jawaban:
Jawaban Terpilih
Jadi kamu punya 3 buah form.
form 1: isi nama (page nama) form 2: isi umur (page umur) form 3: isi alamat (page alamat)
Pengertian saya soal pertanyaan agan:
-
Kalau ceritanya ini mau daftar akun. permasalahan siapa yang akan memiliki id=1 atau id=2 bukan menjadi masalah.
-
Tetapi kalau ceritanya user telah login dan ingin mengupdate nama/umur/alamat user, kemungkinan bisa salah update. Cukup ambil id_user atau field unique lain dari user yang login kemudian saat melakukan update umur/nama/alamat jadikan id_user atau field unique tadi sebagai parameter WHERE clause-nya contoh query di PHP: <pre> UPATE nama_table SET nama = $nama, umur = $umur, alamat = $alamat WHERE id_user = $_SESSION['id_user']; </pre>
-
Dan apabila ada contoh kasus, agan mau melakukan sesuatu pada data yang baru saja anda insert ke database dalam SATU PROSES, sementara banyak orang yang melakukan penambahan data di table yang sama dan di waktu yang sama, bisa jadi agan salah ambil data kalau hanya memanfaatkan query:
<pre> SELECT * FROM tbl_name ORDER BY id DESC
atau
SELECT a.* FROM tbl_name a WHERE a.id = (SELECT MAX(aa.id) FROM tbl_name aa. WHERE a.id = aa.id) </pre>
untuk penyelesaiannya anda bisa memanfaatkan $_SESSION pengguna atau dengan metode TRANSACTION.
- dengan bantuan $_SESSION: <pre> $data_user = mysql_fetch_assoc(mysq_query(SELECT * FROM tbl_order WHERE id_pemesan = $_SESSION['id_user'] ORDER BY id_order DESC)); UPATE tbl_bayar SET norek = '".$norek."', nominal = $nominal, tgl_trans = CURDATE() WHERE id_pemesan = "'.$data_user['id_pemesan']."'"; </pre>
- dengan metode TRANSACTION: Pastikan semua ENGINE table dinamis adalah InnoDB (Googling kalau belum tahu cara update ENGINE, insyaallah ada). <pre> // Turn autocommit off $mysqli -> autocommit(FALSE);
// Insert some values $mysqli -> query("SELECT * FROM tbl_order WHERE id_pemesan = '".$_SESSION['id_user']."' ORDER BY id_order DESC"); $mysqli -> query("UPATE tbl_bayar SET norek = '".$norek."', nominal = $nominal, tgl_trans = CURDATE() WHERE id_pemesan = '".$data_user['id_pemesan']"'");
// Commit transaction if (!$mysqli -> commit()) { // Rollback transaction $mysqli -> rollback();
echo "Commit transaction failed"; exit(); } </pre>
Commit akan menyimpan perubahan, sementara Rollback akan mengembalikan semua data ke state awal apabila terjadi kesalahan dalam proses.
Sumber : <a href='https://www.w3schools.com/php/func_mysqli_rollback.asp'>https://www.w3schools.com/php/func_mysqli_rollback.asp</a>
Saya biasanya pakai mysqli prepare statement kalau pakai TRANSACTION. Referensi saya : <a href='https://stackoverflow.com/questions/10642635/how-can-i-use-prepared-statements-combined-with-transactions-with-php'>stackoverflow</a>