Php PDO多个复选框插入或删除

Php PDO多个复选框插入或删除,php,checkbox,pdo,Php,Checkbox,Pdo,我需要帮助通过复选框链接三个表: 功能表(id、标题、sulg) posts表(id、标题、slug、已添加) post_功能(fea_id、post_id) 如果从帖子中取消选中(删除)功能 提前感谢。未选中的复选框不会发送到PHP。因此,当您遍历$\u POST['featuresid']时,您将只看到选中的复选框。这意味着删除未选中的要素实际上意味着删除不在选中组中的所有要素 首先,插入所选功能:重要不要在循环中执行DB查询;他们会让你的剧本慢下来。相反您还应该使用参数化查询;切勿将用户提

我需要帮助通过复选框链接三个表:

功能表(id、标题、sulg)

posts表(id、标题、slug、已添加)

post_功能(fea_id、post_id)

如果从帖子中取消选中(删除)功能


提前感谢。

未选中的复选框不会发送到PHP。因此,当您遍历
$\u POST['featuresid']
时,您将只看到选中的复选框。这意味着删除未选中的要素实际上意味着删除不在选中组中的所有要素

首先,插入所选功能:重要不要在循环中执行DB查询;他们会让你的剧本慢下来。相反您还应该使用参数化查询;切勿将用户提供的值直接插入数据库查询

插入后,删除未选择的要素:

DELETE FROM posts_features WHERE fea_id NOT IN (?, ?, ?, ?)
每个
对应于
$\u POST['featuresid']


另一种选择是,如果您希望PHP为每个功能接收一个显式的选中/未选中值,则可以为HTML中的每个功能使用是/否单选按钮或下拉列表。

复选框如果未选中,则不会显示(
$\u POST
),因此您将无法查看(无论如何,从
$\u POST
)哪些功能未选中

有几种方法可以做到这一点,但是如果没有关于应用程序的更多信息,就很难提出“最佳”建议,但是这里有一种方法可以利用
$\u POST

添加额外的“隐藏”输入,以及相应的
$features->id
,以设置“现有”条目:

注意:我在上面的代码中遵循您的约定来演示这一点,尽管它们显然是伪代码,无法正常工作

<input type="checkbox" name="featuresid[]" value="$features->id">
<input type="hidden" name="existing[]" value="$features->id">

回答得好。我考虑过这一点,但担心复选框列表可能只是所有post_功能的子集,而不是完整列表。(例如,如果分页)。
$sql = $dbh->prepare("delete form posts_features where ........
DELETE FROM posts_features WHERE fea_id NOT IN (?, ?, ?, ?)
<input type="checkbox" name="featuresid[]" value="$features->id">
<input type="hidden" name="existing[]" value="$features->id">
foreach ($_POST['featuresid'] as $choice) {
    $sql = $dbh->prepare("INSERT INTO posts_features (fea_id, post_id) VALUES ($choice, $id)");
    $sql->execute();
}

// loop through ALL feature ids listed on the page
foreach( $_POST['existing'] AS $features_id ) {
    // if the feature id wasn't in the checkboxes, then delete
    if ( ! in_array( $features_id, $_POST['featuresid'] ) ) {
        $sql = $dbh->prepare("DELETE FROM posts_features WHERE ........");
    }
}