[英]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.