我尝试解决问题。
这是我的代码。
<?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);
}
?>
答案 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()设置了复选框。