到目前为止,我的代码将mysql表中的数据作为清单输出到一个网站上,但我在设置可以签出多少个选项的限制时遇到了问题,即如果我只想签出5个框中的3个,我如何在php中做到这一点?
注意:复选框限制的大多数答案都显示了这样的例子:在html中手动创建了一个检查表,然后使用javascript对可以被选中的框的数量进行了限制。但是,在我的代码中并非如此;我的代码输出一个清单,该清单不是用html手动创建的,而是使用php从预先设置的mysql数据库中自动创建的(如下所示)。在这种情况下,我怎样才能限制复选框的数量?有代码的解决方案/示例将不胜感激!
这是我的php代码:

<?php

    $username = "root";
    $password = "";
    $hostname = "localhost";

    $dbname = "major_degrees";
    $str='';

    // Create connection
    $conn = new mysqli($hostname, $username, $password, $dbname);

    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }

    $sql = "SELECT degree_name FROM majors";
    $result = $conn->query($sql);

    $out = '';
    $cnt = 0;
    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            $cnt++;
            $out .= '<input id="cb_' .$cnt. '" class="someclass" type="checkbox" />' .$row['degree_name']. '<br/>';
        }
        echo $out;
    }
    $conn->close();


?>

最佳答案

就像@shadouts说的,你不能从php中控制复选框,你需要javascript。要创建列表,请像在html标记中那样回显查询的输出。为了这个例子,我不包括查询返回的复选框内容,而是简单的增量数据。

<form action="some_file" method="">
    <div id="checkboxes">
    <?php
        for($i = 0; $i < 8; $i++) {
            echo "<input class='checkChange' type='checkbox' name='check' value='ch".($i+1)."'>check ".($i+1)."<br>";
        }
    ?>
    </div>

    <input type="submit" value="Submit">
</form>

这将创建8个简单的复选框(在您的示例中是复选框,每个复选框都有适当的值和文本)。一个更好的方法是用ajax填充复选框列表,但是由于您似乎是这些技术的新手,所以我将尽量保持它的简单性。
所以现在我们的复选框可以在浏览器中看到。剩下的就是控制他们。我们将使用jquery实现这一点。
在一些脚本标记中,我们有以下内容:
$('.checkChange').change(function() {
    var count = 0;

    $('#checkboxes input:checked').each(function() {
        count++;
    });

    if (count >= 3) {
        $('#checkboxes input:not(:checked)').each(function() {
            $(this).attr("disabled", true);
        });
    } else {
        $('#checkboxes input:not(:checked)').each(function() {
            $(this).removeAttr('disabled');
        });
    }
});

让您知道,像$('.checkChange')这样的东西是jquery选择器。这意味着我们可以按类、id或其他方式选择一些html元素。要按类选择元素,.+classname。按id#+id选择元素。现在我们解码上面的代码示例:
首先,每当单击复选框(或更准确地说,更改)时,都会调用.change函数:$('.checkChange').change
$('#checkboxes input:checked').each:对于选中的每个复选框,我们将计数值增加一。
如果用户选中了3个复选框,则禁用($(this).attr("disabled", true);)所有未选中($('#checkboxes input:not(:checked)').each)复选框。
如果没有,请启用它们:$(this).removeAttr('disabled');
为了在html标记中使用php,文件必须是.php。所以文件-比如checkbox.php-如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Checkboxing</title>
</head>
<body>

<form action="action.php" method="post">
    <div id="checkboxes">
    <?php
        for($i = 0; $i < 8; $i++) {
            echo "<input class='checkChange' type='checkbox' name='check' value='ch".($i+1)."'>check ".($i+1)."<br>";
        }
    ?>
    </div>

    <input type="submit" value="Submit">
</form>

</body>
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
    $('.checkChange').change(function() {
        var count = 0;

        $('#checkboxes input:checked').each(function() {
            count++;
        });

        if (count >= 3) {
            $('#checkboxes input:not(:checked)').each(function() {
                $(this).attr("disabled", true);
            });
        } else {
            $('#checkboxes input:not(:checked)').each(function() {
                $(this).removeAttr('disabled');
            });
        }
    });
</script>
</html>

要查看上面描述的功能,请查看我创建的this fiddle

10-08 07:40
查看更多