我正在尝试使用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 ispdfs where assocProp = '".$_POST['id']."'");
$newResult=mysql_fetch_array($newQuery);
foreach ($newResult as $showPP_ids) {
$val = (int) isset($_POST['showPP_ids']);
mysql_query("UPDATE ispdfs SET showPP = $val WHERE id = ".mysql_real_escape_string($showPP_ids));
}
答案 0 :(得分:3)
此处没有任何内容可将值设置为零。未检查的框只会在$ _POST数组中不存在。
您需要单独列出所有复选框的名称并循环显示这些复选框,并将它们与$ _POST数组进行比较。
编辑:不打算编写任何代码,但是:
$allids = array('id1','id2','id3');
foreach ($allids as $oneid) {
$val = (int) isset($_POST[$oneid]); // will be 0 or 1
mysql_query("UPDATE istable SET showPP = $val WHERE id = ".mysql_real_escape_string($oneid));
}
请注意,我们并不真正需要mysql_real_escape_string,因为我们知道所有id值都是安全的,但这是一个很好的做法,以防有人稍后出现并不小心更改$ allids数组。
再次编辑:假设我们不知道要查找哪些内容。
mysql_query("UPDATE istable SET showPP = 0");
foreach ($_POST as $oneid=>$nothing) {
mysql_query("UPDATE istable SET showPP = 1 WHERE id = ".mysql_real_escape_string($oneid));
}
答案 1 :(得分:2)
未选中时,您的复选框值可能不会被发送。在PHP代码中通过print_r($_POST)
确认
因此,你的情况
if (isset($_POST['showPP_ids'])) {
foreach ($_POST['showPP_ids'] as $showPPId) {
永远不会找到未选中的复选框。
正如awm正确说明的那样(+1),您不会将字段showPP
设置为0
。这样做:
$ppsql=mysql_query("UPDATE istable SET showPP = '0' WHERE id = ".mysql_real_escape_string($showPPId));
当您要将sql字段设置为0时。
由于未选中复选框时不会发送,因此您需要了解更多有关所需复选框的信息。
您可以(重复使用查询代码)
$query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$found = false;
foreach($_POST['showPP_ids'] as $showPPId)
{
if($showPPId == $row['id'])
{
// checkbox found
$found = true;
break;
}
}
$ppsql=mysql_query("UPDATE istable SET showPP = '"
.($found ? '1' : '0')
."' WHERE id = ".mysql_real_escape_string($showPPId));
}
<input type="hidden">
并更改其值复选框变了。如果您对此方法有疑问,请发表评论 - 我之前已经使用了一段时间...... 另一种方法
保持代码,你可以使用这种简单的方法(但请不要......):
// first, set all fields to zero
/* long version
$query = "SELECT * FROM istable WHERE assocProp = '".$_POST['id']."'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$ppsql=mysql_query("UPDATE istable SET showPP = '0' WHERE id = ".$row['id']);
}
*/
// or short version:
$ppsql=mysql_query("UPDATE istable SET showPP = 0");
// now, update these rows that appear in `$_POST['showPP_ids']`
// (using the code you provided)
if (isset($_POST['showPP_ids'])) {
foreach ($_POST['showPP_ids'] as $showPPId) {
$ppsql=mysql_query("UPDATE istable SET showPP = '1' WHERE id = ".mysql_real_escape_string($showPPId));
}
}