首页 > 解决方案 > 在php中删除重复的复选框

问题描述

我有两张名为 bookings 和 packages 的桌子。选中的复选框是从预订表中检索的,并且工作正常。但我还需要包表中未选中的复选框。问题是选中的复选框值再次显示。

这是显示屏幕截图

<?php

$get_pro = "select * from booking";
$result = mysqli_query($con, $get_pro);

$book_packages = $row_pro['Book_Packages'];
$book_packages = substr(trim($book_packages) , 0, -1);
$split_pkg = (explode(",", $book_packages));
if (!empty($split_pkg)) {
    foreach ($split_pkg as $book_pkg) {
        $checked = (in_array($book_pkg, $split_pkg)) ? 'checked="checked"' : '';
?>
                        
        <input type="checkbox" name="pkg_list_name[]" value="<?php echo $book_pkg; ?>" size="17" <?php echo $checked; ?>> <?php echo $book_pkg; ?> <br>
<?php
    }
}

$get_pros = "select * from package";
$results = mysqli_query($con, $get_pros);

while ($row_pros = mysqli_fetch_array($results)) {
    $package_name = $row_pros['Pkg_Name'];

    if ($package_name != $split_pkg) {
        echo "<input type='checkbox' data-parsley-required='true' value='$package_name' data-parsley-trigger='click' id='checkbox1' name='pkg_list_name[]'>&nbsp;&nbsp;
            <label>$package_name</label><br> ";
    } else {

    }
}
?>

标签: phpmysqlcheckbox

解决方案


你不应该有两个循环。package您应该只从表中创建复选框。创建这些复选框时,checked="checked"如果包名称在$split_pkg.

$book_packages = trim($row_pro['Book_Packages']);
$split_pkg = array_map('trim', explode(',', $book_packages));

$get_pros = "select * from package";
$results = mysqli_query($con, $get_pros);

while ($row_pros = mysqli_fetch_array($results)) {
    $package_name = $row_pros['Pkg_Name'];

    $checked = (in_array($package_name, $split_pkg)) ? 'checked="checked"' : '';
    echo "<label><input type='checkbox' data-parsley-required='true' value='$package_name' data-parsley-trigger='click' name='pkg_list_name[]' $checked>&nbsp;&nbsp;
        $package_name</label><br> ";
}

顺便说一句,将逗号分隔的值放在数据库列中不是一个好主意。您应该为每个预订单独设置一行。然后,您将能够轻松地加入这两个表。


推荐阅读