Kotak centang mewakili daftar nilai. Seorang pengguna dapat memilih beberapa kotak centang, yang berarti bahwa untuk setiap catatan pengguna, Anda mungkin memiliki daftar nilai. Untuk alasan ini, Anda memerlukan tabel lain di database Anda untuk menyimpan opsi ini. Sebenarnya Anda mungkin memerlukan tiga tabel secara total:donor darah, aktivitas, aktivitas_per_donor. Untuk informasi lebih lanjut, lihat Apa cara terbaik untuk menyimpan Nilai Kotak Centang di Database MySQL?
Terserah Anda bagaimana Anda mendesain tabel tetapi aktivitas_per_donor Anda harus memiliki setidaknya dua kolom:user_id dan aktivitas. Anda juga harus membuat kunci utama komposit pada kedua kolom untuk menghindari nilai duplikat. Kolom aktivitas harus mereferensikan daftar aktivitas yang telah ditentukan sebelumnya dari tabel ketiga sehingga pengguna tidak dapat menyisipkan aktivitas yang tidak valid.
Saat formulir Anda dibuat dengan benar dan kotak centang Anda dinamai sebagai array (yaitu name="act[]"
) maka Anda akan menerima larik terpilih nilai dalam PHP di $_POST['act']
variabel. Jika tidak ada nilai yang dipilih maka variabel ini tidak akan disetel, jadi Anda perlu memeriksanya juga. Anda perlu memproses larik ini dan menyisipkan setiap elemen sebagai baris baru ke dalam tabel aktivitas_per_donor
Cara menyimpan beberapa kotak centang menggunakan PDO
Sebagian besar waktu Anda akan menggunakan PDO untuk berinteraksi dengan database. Untuk memasukkan nilai, Anda perlu melakukan pernyataan yang disiapkan. Anda perlu memasukkan data donor ke dalam satu tabel dan aktivitasnya ke tabel lain, yang mengharuskan Anda membungkus kedua sisipan dalam suatu transaksi.
$pdo = new \PDO("mysql:host=localhost;dbname=test;charset=utf8mb4", 'user', 'password', [
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
\PDO::ATTR_EMULATE_PREPARES => false
]);
if (isset($_POST["name"], $_POST["gender"], $_POST["dob"], $_POST["weight"], $_POST["contact"], $_POST["bloodtype"], $_POST["adress"])) {
$pdo->beginTransaction();
// Insert blood donor
$stmt = $pdo->prepare('INSERT INTO blooddonor(name,gender,dob,weight,contact,bloodtype,adress) VALUES (?,?,?,?,?,?,?)');
$stmt->execute([
$_POST["name"],
$_POST["gender"],
$_POST["dob"],
$_POST["weight"],
$_POST["contact"],
$_POST["bloodtype"],
$_POST["adress"],
]);
$donor_id = $pdo->lastInsertId();
// Insert donor's acitvities
if(isset($_POST['act'])) {
$stmt = $pdo->prepare('INSERT INTO activities_per_donor(donor_id, activity) VALUES (?,?)');
$stmt->bindValue(1, $donor_id);
$stmt->bindParam(2, $activity);
foreach ($_POST['act'] as $activity) {
$stmt->execute();
}
}
$pdo->commit();
}
Cara menyimpan banyak kotak centang menggunakan mysqli
Jika Anda harus menggunakan mysqli, Anda masih dapat mencapai hal yang sama dengan kode yang sangat mirip. Sekali lagi, kami memulai transaksi dan melakukan 2 pernyataan yang disiapkan dan kemudian memasukkannya ke dalam database.
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'user', 'password', 'test');
$mysqli->set_charset('utf8mb4'); // always set the charset
if (isset($_POST["name"], $_POST["gender"], $_POST["dob"], $_POST["weight"], $_POST["contact"], $_POST["bloodtype"], $_POST["adress"])) {
$mysqli->begin_transaction();
// Insert blood donor
$stmt = $mysqli->prepare('INSERT INTO blooddonor(name,gender,dob,weight,contact,bloodtype,adress) VALUES (?,?,?,?,?,?,?)');
$stmt->bind_param('sssssss', $_POST["name"], $_POST["gender"], $_POST["dob"], $_POST["weight"], $_POST["contact"], $_POST["bloodtype"], $_POST["adress"]);
$stmt->execute();
$donor_id = $mysqli->insert_id;
// Insert donor's acitvities
if(isset($_POST['act'])) {
$stmt = $mysqli->prepare('INSERT INTO activities_per_donor(donor_id, activity) VALUES (?,?)');
$stmt->bind_param('ss', $donor_id, $activity);
foreach ($_POST['act'] as $activity) {
$stmt->execute();
}
}
$mysqli->commit();
}