繁体   English   中英

PHP Checkbox-选中和取消选中

[英]Php Checkbox - making check and uncheck

我试图解决一个问题。

在此处输入图片说明

这是我的代码。

<?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>";

如果用户单击复选框,我将向数据库发送查询以进行查询1.但是,当用户取消选中复选框时,会出现以下错误: 未定义的索引:C:\\ xampp \\ htdocs \\ googleAnalytics \\ GAPI \\ choosePremium.php中的check2在第43行,我尝试在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);
}
?>

您的错误似乎来自:

$arrPremium2 = $_POST['check2'];

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

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

您应该养成一些不良习惯:

例如, 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或使用准备好的语句。

如果选中复选框,则仅为您提供一个值。 否则,表单不会发送任何值。 您可以设置一些默认值,也可以使用隐藏的输入技巧。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM