到目前为止,我的代码将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。