Checkbox Php : 提交 Get 表单后仅选中选中的复选框

Checkbox Php : Keep checked only the checked checkbox after submitting Get form

这是我的代码

<?php foreach ($categories as $cat) {  ?>
    <li>
    <input id="category" name="category[]"  type="checkbox" value="<?= $cat->term_id; ?>" 
    <?php if (isset($_GET['category'])) echo "checked='checked'"; ?>><?= $cat->name ?></input>
    </li>
<?php } ?>

但是当我提交表单时,复选框都被选中了,我不想让我只选中我选中的复选框而不选中其他复选框 下面的例子

请看一下这段代码,我认为它解决了你的问题。

<input type="checkbox" name="small" class="checkbox" <?=(isset($_POST['small'])?' checked':'')?> /> Small
<input type="checkbox" name="medium"  class="checkbox" <?=(isset($_POST['medium'])?' checked':'')?> >  Medium<br>

问题是因为这一行,

<?php if (isset($_GET['category'])) echo "checked='checked'"; ?>> ...
         ^^^^^^^^^^^^^^^^^^^^^^^^^^

提交表单后 $_GET['category'] 将被设置,因此此条件 isset($_GET['category']) 将适用于所有复选框。这就是为什么无论您之前选中了哪个复选框,所有复选框都会被选中。所以你的 foreach 循环应该是这样的:

<?php foreach ($categories as $cat) {  ?>
    <li>
    <input id="category" name="category[]"  type="checkbox" value="<?= $cat->term_id; ?>" 
    <?php if (isset($_GET['category']) && in_array($cat->term_id, $_GET['category'])) { echo "checked='checked'"; } ?>><?= $cat->name ?></input>
    </li>
<?php } ?>