从previous post开始,我正在尝试使用1或0更新数据库字段,具体取决于是否选中了复选框。
选中复选框时似乎有效,但空时则无效。
任何想法如何解决这个问题?代码如下。非常感谢,S。
以下是我表单中的代码:
$query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
echo '<li>
<label for="changePP'.$row['id'].'"><input id="changePP'.$row['id'].'" type="checkbox" name="showPP_ids[]" value="'.$row['id'].'"'.($row['showPP']=='1' ? ' checked="checked"':NULL).' /> Display</label>
</li>'. PHP_EOL;
}
php进程代码(更新):
$newQuery=mysql_query("select * from istable where assocProp = '".$_POST['id']."'");
$newResult=mysql_fetch_array($newQuery);
foreach ($newResult as $showPP_ids) {
$val = (int) isset($_POST['showPP_ids']);
mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($showPP_ids));
}
答案 0 :(得分:3)
$val = (int) isset($_POST['showPP_ids']);
是一个数组。它应该是
foreach ($newResult as $showPP_ids) {
$val = (int) isset($_POST['showPP_ids'][$showPP_ids]);
我想
答案 1 :(得分:1)
我认为代码不能以这种方式为您工作...问题是,如果您没有勾选页面上的复选框,则其值不会与表单数据一起提交,因此您无法在数据库中将 showPP 设置为 0
我有两种可能的解决方案:
如果页面上打勾的除之外的所有记录都应设置为0,则可以这样做:
$values = mysql_real_escape_string(implode(',', $showPP_ids));
mysql_query("UPDATE istable SET showPP = 1 WHERE id IN('$values')");
mysql_query("UPDATE istable SET showPP = 0 WHERE id NOT IN('$values')");
另一个解决方案是将所有ID存储在HTML页面上的隐藏字段中,并检查您在$ showPP_ids数组中获取哪些ID - 这些将设置为1 - 并且该变量中缺少哪些 - 将设置为0
$query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo '<li>
<label for="changePP'.$row['id'].'">
<input id="changePP'.$row['id'].'" type="checkbox" name="showPP_ids[]" value="'.$row['id'].'"'.($row['showPP']=='1' ? ' checked="checked"':NULL).' /> Display
</label>
<input type="hidden" name="original_ids[]" value="'.$row['id'].'" />
</li>'. PHP_EOL;
}
...在PHP文件中(根本不需要MySQL SELECT):
foreach ($_POST['original_ids'] as $id) {
if (isset($_POST['showPP_ids']) && in_array($id, $_POST['showPP_ids'])) {
$val = 1;
} else {
$val = 0;
}
mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($id));
}
答案 2 :(得分:0)
如果未选中复选框,则不会将该值提交给server.Pls
请使用isset($_POST['id'])
检查值是否存在。
答案 3 :(得分:0)
您正在测试是否设置了数组$ _POST ['showPP_ids'],它始终是。
我认为您的测试应该是:
$val = (int) isset($_POST['showPP_ids'][$showPP_ids]);