sql >> Databáze >  >> RDS >> Mysql

Jak přidat více výběrů zaškrtávacích políček do mé databáze pomocí php

Zaškrtávací políčka představují seznam hodnot. Uživatel může vybrat více zaškrtávacích políček, což znamená, že pro každý uživatelský záznam můžete mít seznam hodnot. Z tohoto důvodu potřebujete další tabulku ve vaší databázi pro uložení těchto voleb. Ve skutečnosti můžete potřebovat celkem tři tabulky:dárce krve, aktivity, aktivity_na_dárce. Další informace viz Jaký je nejlepší způsob uložení hodnot Checkbox v databázi MySQL?

Je na vás, jak si tabulky navrhnete, ale vaše activities_per_donor musí mít alespoň dva sloupce:user_id a activity. Měli byste také vytvořit složený primární klíč v obou sloupcích, abyste se vyhnuli duplicitním hodnotám. Sloupec aktivity by měl odkazovat na váš předdefinovaný seznam aktivit ze třetí tabulky, aby uživatel nemohl vložit neplatnou aktivitu.

Když je formulář správně vytvořen a vaše zaškrtávací políčka jsou pojmenována jako pole (tj. name="act[]" ), pak obdržíte pole vybraných hodnoty v PHP v $_POST['act'] proměnná. Pokud nejsou vybrány žádné hodnoty, tato proměnná nebude nastavena, takže ji musíte také zkontrolovat. Toto pole musíte zpracovat a vložit každý prvek jako nový řádek do tabulky activities_per_donor

Jak uložit více zaškrtávacích políček pomocí PDO

Většinu času byste k interakci s databází používali PDO. Chcete-li vložit hodnoty, musíte provést připravený příkaz. Musíte vložit data dárců do jedné tabulky a jejich aktivity do druhé, což vyžaduje, abyste oba vložky zabalili do transakce.

$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 uložit více zaškrtávacích políček pomocí mysqli

Pokud musíte použít mysqli, stále můžete dosáhnout stejného s velmi podobným kódem. Ještě jednou zahájíme transakci a provedeme 2 připravené příkazy a poté ji zapíšeme do databáze.

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. AKTUALIZOVAT pomocí INNER JOIN nebo MIN?

  2. Dynamická změna barvy tabulky PHP (Datum) na základě platnosti

  3. Jak mohu zavést více podmínek v operátoru LIKE?

  4. hodnocení položek v tabulce mysql