sql >> Databasteknik >  >> RDS >> Mysql

Hur man lägger till flera kryssrutor till min databas med php

Kryssrutor representerar en lista med värden. En användare kan markera flera kryssrutor, vilket innebär att du för varje användarpost kan ha en lista med värden. Av denna anledning behöver du en annan tabell i din databas för att lagra dessa alternativ. Faktum är att du kanske behöver tre tabeller totalt:blodgivare, aktiviteter, aktiviteter_per_givare. För mer information se Vad är det bästa sättet att lagra kryssrutavärden i MySQL-databasen?

Det är upp till dig hur du utformar tabellerna men dina aktiviteter_per_donator måste ha minst två kolumner:användar-id och aktivitet. Du bör också skapa en sammansatt primärnyckel på båda kolumnerna för att undvika dubbletter av värden. Aktivitetskolumnen bör referera till din fördefinierade lista över aktiviteter från den tredje tabellen så att en användare inte kan infoga en ogiltig aktivitet.

När ditt formulär är korrekt skapat och dina kryssrutor är namngivna som en array (dvs. name="act[]" ) så får du en array med valda värden i PHP i $_POST['act'] variabel. Om inga värden väljs kommer denna variabel inte att ställas in, så du måste kontrollera det också. Du måste bearbeta denna array och infoga varje element som en ny rad i tabellen Activities_per_donor

Hur man lagrar flera kryssrutor med PDO

För det mesta skulle du använda PDO för att interagera med databasen. För att infoga värdena måste du utföra ett förberett uttalande. Du måste infoga givardata i en tabell och deras aktiviteter i en annan, vilket kräver att du slår in båda bilagorna 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();
}

Hur man lagrar flera kryssrutor med mysqli

Om du måste använda mysqli kan du fortfarande uppnå samma sak med en mycket liknande kod. Än en gång startar vi en transaktion och utför 2 förberedda uttalanden och lägger sedan in den 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. Finns det något som liknar Wamp Server?

  2. Finns det ett alternativ till TOP i MySQL?

  3. Hur man laddar upp flera bilder med hjälp av codeigniter

  4. Omskrivning av URL med .htaccess gör dubbletter av mysql-poster