チェックボックスは値のリストを表します。ユーザーは複数のチェックボックスを選択できます。つまり、すべてのユーザーレコードに値のリストがある場合があります。このため、これらのオプションを格納するには、データベースに別のテーブルが必要です。実際、blooddonor、activitys、activitys_per_donorの合計3つのテーブルが必要になる場合があります。詳細については、チェックボックスの値をMySQLデータベースに保存する最良の方法は何ですか?
テーブルの設計方法はあなた次第ですが、activity_per_donorには少なくともuser_idとactivityの2つの列が必要です。また、値の重複を避けるために、両方の列に複合主キーを作成する必要があります。ユーザーが無効なアクティビティを挿入できないように、アクティビティ列は3番目のテーブルの事前定義されたアクティビティのリストを参照している必要があります。
フォームが正しく作成され、チェックボックスに配列として名前が付けられている場合(つまり、name="act[]"
)次に、選択されたの配列を受け取ります $_POST['act']
のPHPの値 変数。値が選択されていない場合、この変数は設定されないため、それも確認する必要があります。この配列を処理し、各要素を新しい行としてactivities_per_donorテーブルに挿入する必要があります
PDOを使用して複数のチェックボックスを保存する方法
ほとんどの場合、PDOを使用してデータベースを操作します。値を挿入するには、プリペアドステートメントを実行する必要があります。ドナーデータを1つのテーブルに挿入し、それらのアクティビティを別のテーブルに挿入する必要があります。これには、トランザクションで両方の挿入をラップする必要があります。
$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();
}