我尝试制作复选框。当我单击复选框时,如果我单击选中的复选框,它使得isPremium = 0
但是:当我点击选中的复选框时,它不起作用..
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
require 'connectDB.php';
$mysql = new mysql();
$mysql->connect();
$dbResult = mysql_query("select * from profiles");
echo "<form action='#' method='post'>";
$dbResult = mysql_query("select * from profiles");
while ($info = mysql_fetch_array($dbResult)) {
if ($info['isPremium'] == 0)
echo "<input type=checkbox name='check2[]' id='check2' value=" . $info['id'] . ">";
else
echo "<input type=checkbox name='check1[]' id='check1' value=" . $info['id'] . " checked>";
echo $info['profileName'] . "<br />";
}
echo "<p><input type='submit' name='btnPremium' /></p>";
echo "</form>";
if (isset($_POST['btnPremium'])) {
if (isset($_POST['check2'])) {
$arrPremium = $_POST['check2'];
foreach ($arrPremium as $result) {
mysql_query("UPDATE profiles set isPremium=1 where id=" . $result . "");
}
}
else
{
$arrPremium = $_POST['check1'];
foreach ($arrPremium as $result2) {
mysql_query("UPDATE profiles set isPremium=0 where id=" . $result2 . "");
}
}
}
?>
当我单击选中的复选框时,它会使另一个复选框取消选中。
这是复选框页面
答案 0 :(得分:2)
我已将您的代码重构为:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
require 'connectDB.php';
$mysql = new mysql();
$mysql->connect();
$update = (isset($_POST['check']) && is_array($_POST['check']));
$dbResult = mysql_query("select * from profiles");
echo "<form action='#' method='post'>";
while ($info = mysql_fetch_array($dbResult))
{
if ($update)
{
$info['isPremium'] = (in_array($info['id'], $_POST['check']) ? 1 : 0);
mysql_query("UPDATE profiles SET isPremium = " . $info['isPremium'] . " WHERE id = " . $info['id']);
}
echo "<input type=checkbox name='check[]' value=" . $info['id'] . ($info['isPremium'] == 0 ? "" : "checked") . " />";
echo htmlspecialchars($info['profileName']) . "<br />";
}
echo "<p><input type='submit' name='btnPremium' /></p>";
echo "</form>";
?>
原始代码存在一些问题:
具有相同ID的多个HTML input
元素。这是错的。我们可以使用具有相同name
属性的多个元素,但id
属性对于每个元素应该是唯一的。
数据库UPDATE
代码在显示表单后运行。这是错的。在这种情况下,我们应该将数据库之前更新为生成HTML输出。
重要提示:不需要两个不同的POST
数组(check1和check2)。我们只需一个数组。浏览器将发布已选中框。浏览器未选中框不会发布。由于 id 是值,我们可以使用in_array
函数来验证项目的复选框是否已选中。
最好将转义从数据库中输出为HTML的内容。否则,应用程序容易受到某种攻击。函数htmlspecialchars
可用于此目的。
答案 1 :(得分:1)
如果我理解你想要实现的目标,那么你的代码就会变得非常复杂。您应该使用isset
来检查复选框的值是否包含在$_POST
数组中。如果是,则选中该复选框。
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
require 'connectDB.php';
$mysql = new mysql();
$mysql->connect();
echo "<form action='#' method='post'>";
$dbResult = mysql_query("SELECT * FROM profiles");
$profileid = array();
while ($info = mysql_fetch_array($dbResult)) {
echo "<input type=\"checkbox\" name=\"" . $info['id'] . "\" " . ($info['isPremium'] != 0 ? "checked " : "") . "/>";
echo $info['profileName'] . "<br />";
$profileid[] = $info['id'];
}
echo "<p><input type='submit' name='btnPremium' /></p>";
echo "</form>";
if (isset($_POST['btnPremium'])) {
foreach ($profileid as $id) {
if (isset($_POST[$id])) {
mysql_query("UPDATE profiles SET isPremium=1 WHERE id=" . $id);
} else {
mysql_query("UPDATE profiles SET isPremium=0 WHERE id=" . $id);
}
}
}
?>
答案 2 :(得分:-1)
复选框通常会将值"on"
发送到服务器,而不管是否设置了value
属性。如果可以,请尝试使用单选按钮,因为它们会将正确的value
发送到服务器。如果这不是一个选项,请将复选框的名称设为check1[".$info['id']."
并访问array_keys($_POST['check1'])
。