Php - Checkbox不起作用

时间:2012-02-22 14:39:19

标签: php

我尝试制作复选框。当我单击复选框时,如果我单击选中的复选框,它使得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 . "");
        }
    }



}
?>

当我单击选中的复选框时,它会使另一个复选框取消选中。

这是复选框页面

enter image description here

3 个答案:

答案 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>";

?>

原始代码存在一些问题:

  1. 具有相同ID的多个HTML input元素。这是错的。我们可以使用具有相同name属性的多个元素,但id属性对于每个元素应该是唯一的。

  2. 数据库UPDATE代码在显示表单后运行。这是错的。在这种情况下,我们应该将数据库之前更新为生成HTML输出。

  3. 重要提示:不需要两个不同的POST数组(check1和check2)。我们只需一个数组。浏览器将发布已选中框。浏览器未选中不会发布。由于 id 是值,我们可以使用in_array函数来验证项目的复选框是否已选中。

  4. 最好将转义从数据库中输出为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'])