Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách thêm nhiều lựa chọn hộp kiểm vào cơ sở dữ liệu của tôi bằng php

Hộp kiểm đại diện cho một danh sách các giá trị. Người dùng có thể chọn nhiều hộp kiểm, có nghĩa là đối với mỗi bản ghi người dùng, bạn có thể có một danh sách các giá trị. Vì lý do này, bạn yêu cầu một bảng khác trong cơ sở dữ liệu của mình để lưu trữ các tùy chọn này. Trên thực tế, bạn có thể cần tổng cộng ba bảng:người hiến máu, hoạt động, hoạt động_per_donor. Để biết thêm thông tin, hãy xem Cách tốt nhất để lưu trữ Giá trị hộp kiểm trong Cơ sở dữ liệu MySQL là gì?

Cách thiết kế bảng tùy thuộc vào bạn nhưng activity_per_donor của bạn cần có ít nhất hai cột:user_id và activity. Bạn cũng nên tạo một khóa chính tổng hợp trên cả hai cột để tránh các giá trị trùng lặp. Cột hoạt động phải tham chiếu đến danh sách hoạt động được xác định trước của bạn từ bảng thứ ba để người dùng không thể chèn hoạt động không hợp lệ.

Khi biểu mẫu của bạn được tạo đúng cách và các hộp kiểm của bạn được đặt tên là một mảng (tức là name="act[]" ) thì bạn sẽ nhận được một mảng đã chọn các giá trị trong PHP trong $_POST['act'] Biến đổi. Nếu không có giá trị nào được chọn thì biến này sẽ không được đặt, vì vậy bạn cũng cần kiểm tra điều đó. Bạn cần xử lý mảng này và chèn mỗi phần tử dưới dạng một hàng mới vào bảng activity_per_donor

Cách lưu trữ nhiều hộp kiểm bằng PDO

Hầu hết thời gian bạn sẽ sử dụng PDO để tương tác với cơ sở dữ liệu. Để chèn các giá trị, bạn cần thực hiện một câu lệnh đã chuẩn bị. Bạn cần chèn dữ liệu của nhà tài trợ vào một bảng và các hoạt động của họ vào một bảng khác, điều này yêu cầu bạn phải kết hợp cả hai lần chèn trong một giao dịch.

$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();
}

Cách lưu trữ nhiều hộp kiểm bằng mysqli

Nếu bạn phải sử dụng mysqli, bạn vẫn có thể đạt được điều tương tự với một mã rất giống nhau. Một lần nữa, chúng tôi bắt đầu một giao dịch và thực hiện 2 câu lệnh đã chuẩn bị sẵn và sau đó cam kết nó vào cơ sở dữ liệu.

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();
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn con MySQL trả về nhiều hơn một hàng

  2. MySQL INSERT mà không cần phải chỉ định mọi trường không phải là trường mặc định (# 1067 - Giá trị mặc định không hợp lệ cho 'bảng')

  3. Mệnh đề tương đương CHỈ TRONG () MySQL

  4. Lỗi nghiêm trọng:Gọi đến phương thức không xác định mysqli ::bind_param () trong

  5. MySQL chọn SUM kết quả với LIMIT