Php Checkbox - 进行检查和取消选中

时间:2012-02-22 13:34:59

标签: php

我尝试解决问题。

enter image description here

这是我的代码。

<?php

require 'connectDB.php';
print<<<_A_
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
_A_;
$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>";

如果用户点击复选框,我发送db查询以使其成为1.但是,当用户取消选中复选框时,我会收到以下错误:未定义的索引:C中的check2:\ xampp \ htdocs \ googleAnalytics第43行\ GAPI \ choosePremium.php 我试图在arrPremium2中取消选中:S

if (isset($_POST['btnPremium'])) {

    $arrPremium = $_POST['check1'];
    foreach($arrPremium as $result)
    {
        mysql_query("UPDATE profiles set isPremium=1 where id=".$result."");
    }

    $arrPremium2 = $_POST['check2'];
    print_r($arrPremium2);
}
?>

3 个答案:

答案 0 :(得分:2)

您的错误似乎来自:

$arrPremium2 = $_POST['check2'];

因为如果没有名为'check2'的复选框'checked',那么就没有$ _POST元素(因此未定义索引)。通过执行以下操作来检查它是否存在:

if(isset($_POST['check2'])) {
    $arrPremium2 = $_POST['check2'];
    // do something
} else {
    // no check2's, do something else
}

一些不良做法你应该养成以下习惯:

e.g。 checked="checked"是将复选框标记为已选中的正确方法。

你真的应该:

 ?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php

代替。

$arrPremium = $_POST['check1'];
    foreach($arrPremium as $result)
    {
        mysql_query("UPDATE profiles set isPremium=1 where id=".$result."");
    }

不要这样做,你自己容易受到MySQL注入。在使用它更新数据库之前转义$ result,或使用预准备语句。

答案 1 :(得分:1)

复选框仅在检查时为您提供值。否则,表单中没有发送任何值。您可以设置一些默认值或使用隐藏的输入技巧。

dafaults很容易:

$foo = isset($_POST['foo']) ? $_POST['foo'] : 0;

通过这种方式,您可以获得所有价值。事情就是这样,你必须知道那些复选框。

我建议去隐藏输入。对于每个复选框,您的HTML将如下所示:

<input type="hidden" name="foo" value="0" />
<input type="checkbox" name="foo" />

这样,如果选中该复选框,浏览器将发送foo=1,覆盖隐藏字段的值。否则,复选框将根本不发送任何值,而是回退到隐藏输入的foo=0

答案 2 :(得分:0)

首先,请清理您的数据库查询,您当前的代码可以轻松利用。将mysql_real_escape_string()放在mysql_query()调用中的$ result变量周围。

其次,如果用户取消选中该值,则不会将其作为POST变量发送。相反,您需要检查isset()是否存在。

if(isset($_POST['check2'])){ echo 'user checked this box'; }

始终检查是否使用isset()设置了复选框。