Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak dodać wiele zaznaczeń pól wyboru do mojej bazy danych za pomocą php

Pola wyboru reprezentują listę wartości. Użytkownik może zaznaczyć wiele pól wyboru, co oznacza, że ​​dla każdego rekordu użytkownika możesz mieć listę wartości. Z tego powodu do przechowywania tych opcji potrzebna jest inna tabela w bazie danych. W rzeczywistości możesz potrzebować w sumie trzech tabel:Blooddonor, Activities, Activities_per_donor. Aby uzyskać więcej informacji, zobacz Jak najlepiej przechowywać wartości pól wyboru w bazie danych MySQL?

Od Ciebie zależy, w jaki sposób zaprojektujesz tabele, ale Twój activity_per_donor musi mieć co najmniej dwie kolumny:user_id i activity. Należy również utworzyć złożony klucz podstawowy w obu kolumnach, aby uniknąć zduplikowanych wartości. Kolumna aktywności powinna odnosić się do wstępnie zdefiniowanej listy działań z trzeciej tabeli, aby użytkownik nie mógł wstawić nieprawidłowej aktywności.

Gdy formularz jest poprawnie utworzony, a pola wyboru są nazwane jako tablica (np. name="act[]" ), otrzymasz tablicę wybranych wartości w PHP w $_POST['act'] zmienny. Jeśli nie wybrano żadnych wartości, ta zmienna nie zostanie ustawiona, więc musisz to również sprawdzić. Musisz przetworzyć tę tablicę i wstawić każdy element jako nowy wiersz do tabeli activity_per_donor

Jak przechowywać wiele pól wyboru za pomocą PDO

Przez większość czasu używałbyś PDO do interakcji z bazą danych. Aby wstawić wartości należy wykonać przygotowaną instrukcję. Musisz wstawić dane dawcy do jednej tabeli, a ich działania do drugiej, co wymaga umieszczenia obu wstawek w transakcji.

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

Jak przechowywać wiele pól wyboru za pomocą mysqli

Jeśli musisz użyć mysqli, nadal możesz osiągnąć to samo za pomocą bardzo podobnego kodu. Jeszcze raz rozpoczynamy transakcję i wykonujemy 2 przygotowane zestawienia, a następnie wprowadzamy je do bazy danych.

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. Jak skonfigurować encję (doktrynę) dla widoku bazy danych w Symfony 2?

  2. Istniejące praktyki/wytyczne dotyczące tworzenia nieznormalizowanych tabel podczas procesu normalizacji?

  3. MySQL/MariaDB - uporządkuj według podzapytania wewnątrz

  4. Uwzględnianie wartości NOT FOUND w wynikach zapytania MySQL

  5. Nie można połączyć się z serwerem MySQL na „127.0.0.1” (10061) (2003)