<?php
if(isset($_POST['chkStatus'])){
for ($i=0;$i<count($_POST['chkStatus']);$i++) {
$count = count($_POST['chkStatus']);
list($txtClientId, $txStatusValue) = explode('-', $_POST['chkStatus'][$i], 2);
$stmtChkStatus=$con->query("SELECT id,status FROM users WHERE id=$txtClientId");
$SRow = $stmtChkStatus->fetch();
if($SRow['status']!=$txStatusValue) {
if($txStatusValue==0) $stmtStatus=$con->query("UPDATE users SET status='0' WHERE id=$txtClientId");
else $stmtStatus=$con->query("UPDATE users SET status='1' WHERE id=$txtClientId");
}
}
}
?>
<html>
<body>
<dl>
<?php $stmtUsers=$con->query("SELECT id,status FROM users");
while($UsersRow = $stmtUsers->fetch()){
echo "<dt>$UsersRow[name]</dt>
<dd><input type='checkbox' name='chkStatus[]' value='$UsersRow[id]-$UsersRow[status]'";
if($CRow['status']==0) echo " checked";
echo " onchange='this.form.submit()'>
</dd>";
?>
</dl>
</body>
</html>
我的代码的问题是它只执行选中的复选框。我需要一段代码来更改我单击(onchange(的复选框的SQL数据库中的状态。
您可以使用 $con->query("SELECT id,status FROM users")
获取所有可能的值并遍历这些值,而不是遍历$_POST['chkStatus']
。然后,您可以检查是否为相应的值设置了$_POST['chkStatus']
。
此时,您将所有复选框值发送到服务器。您只能发送感兴趣的值。快速和肮脏的解决方案:
-
将复选框拆分为单独的表单,并仅提交您需要的表单:
while($UsersRow = $stmtUsers->fetch()){ echo "<dt>$UsersRow[name]</dt> <form .... > <!-- Here required attributes --> <dd><input type='checkbox' name='chkStatus[]' value='$UsersRow[id]-$UsersRow[status]'"; if($CRow['status']==0) echo " checked"; echo " onchange='this.form.submit()'> </form> </dd>";
-
在
inclick
属性中,获取复选框的 id 或名称并添加到请求中。