Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да добавя множество селекции на квадратчета за отметка към моята база данни с помощта на php

Клетките за отметка представляват списък със стойности. Потребителят може да постави множество квадратчета за отметка, което означава, че за всеки потребителски запис може да имате списък със стойности. Поради тази причина се нуждаете от друга таблица във вашата база данни, за да съхранявате тези опции. Всъщност може да ви трябват общо три таблици:кръводарител, дейности, дейности_на_донор. За повече информация вижте Какъв е най-добрият начин да съхранявате стойностите на квадратчетата за отметка в MySQL база данни?

От вас зависи как ще проектирате таблиците, но вашите activities_per_donor трябва да имат поне две колони:user_id и activity. Трябва също така да създадете съставен първичен ключ в двете колони, за да избегнете дублиращи се стойности. Колоната за активност трябва да препраща към вашия предварително дефиниран списък с дейности от третата таблица, така че потребителят да не може да вмъкне невалидна дейност.

Когато вашият формуляр е създаден правилно и вашите квадратчета за отметка са наименувани като масив (т.е. name="act[]" ) тогава ще получите масив от избрани стойности в PHP в $_POST['act'] променлива. Ако не са избрани стойности, тази променлива няма да бъде зададена, така че трябва да проверите и това. Трябва да обработите този масив и да вмъкнете всеки елемент като нов ред в таблицата activities_per_donor

Как да съхранявате множество квадратчета за отметка с помощта на PDO

През повечето време ще използвате PDO за взаимодействие с базата данни. За да вмъкнете стойностите, трябва да изпълните подготвен оператор. Трябва да вмъкнете данните за донорите в една таблица и техните дейности в друга, което изисква да обвиете и двете вмъквания в транзакция.

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

Как да съхранявате множество квадратчета за отметка с помощта на mysqli

Ако трябва да използвате mysqli, все още можете да постигнете същото с много подобен код. Още веднъж стартираме транзакция и изпълняваме 2 подготвени оператора и след това я записваме в базата данни.

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. Сортирайте sql заявка и нулиране на ID и стартирайте в числов ред всеки път, когато направя заявка или сортирам от маркер <th>

  2. Как да създадете json формат с group-concat mysql?

  3. Получаване на списък с имена на всички колони в таблица, които нямат NULL като стойност по подразбиране?

  4. PHP отнема 90 пъти повече време за изпълнение на заявка от MySQL клиента

  5. Защо да използвате MySQL над плоски файлове?