sql >> Database teknologi >  >> RDS >> Mysql

Sådan tilføjer du flere afkrydsningsfelter til min database ved hjælp af php

Afkrydsningsfelter repræsenterer en liste over værdier. En bruger kan markere flere afkrydsningsfelter, hvilket betyder, at du for hver brugerpost kan have en liste med værdier. Af denne grund kræver du en anden tabel i din database for at gemme disse muligheder. Faktisk har du måske brug for tre tabeller i alt:bloddonor, aktiviteter, aktiviteter_per_donor. For mere information se Hvad er den bedste måde at gemme afkrydsningsfeltværdier i MySQL-databasen?

Det er op til dig, hvordan du designer tabellerne, men dine aktiviteter_per_donor skal have mindst to kolonner:bruger_id og aktivitet. Du bør også oprette en sammensat primærnøgle på begge kolonner for at undgå duplikerede værdier. Aktivitetskolonnen skal referere til din foruddefinerede liste over aktiviteter fra den tredje tabel, så en bruger ikke kan indsætte en ugyldig aktivitet.

Når din formular er oprettet korrekt, og dine afkrydsningsfelter er navngivet som en matrix (dvs. name="act[]" ), så vil du modtage en række udvalgte værdier i PHP i $_POST['act'] variabel. Hvis der ikke er valgt nogen værdier, vil denne variabel ikke blive indstillet, så du skal også tjekke for det. Du skal behandle dette array og indsætte hvert element som en ny række i tabellen Activities_per_donor

Sådan gemmer du flere afkrydsningsfelter ved hjælp af PDO

Det meste af tiden ville du bruge PDO til at interagere med databasen. For at indsætte værdierne skal du udføre en forberedt erklæring. Du skal indsætte donordata i én tabel og deres aktiviteter i en anden, hvilket kræver, at du pakker begge indstik i en transaktion.

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

Sådan gemmer du flere afkrydsningsfelter ved hjælp af mysqli

Hvis du skal bruge mysqli, kan du stadig opnå det samme med en meget lignende kode. Endnu en gang starter vi en transaktion og udfører 2 forberedte erklæringer og commiterer den derefter i databasen.

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. Rækkeversionering i MySQL

  2. multibillede upload forkert antal ved fil-upload

  3. Opret PDF-filer med PLSQL i Oracle

  4. hvordan henter man mysql-data i vb.net?