我正在使用实时复选框,因此当我需要将一个复选框置于ON(1)或OFF(0)时,该复选框会立即更新数据库中的值,并且一切正常。但是现在我正在使用一个实时复选框。用户列表(我现在已经有100个用户)...所以问题是当我尝试禁止某人时,此复选框仅适用于最后一个用户,而不适用于其他用户...您能帮忙吗我?

形式如下:

<form class="form-horizontal" method="post" name="ban" id="ban">
     <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
     <?php if ($row['banned'] == '1') {
         echo '<input type="checkbox" name="banned" data-no-uniform="true" class="iphone-toggle" value="on" checked>';
         } else {
         echo '<input type="checkbox" name="banned" data-no-uniform="true" class="iphone-toggle" value="off" >';
         } ?>
</form>
<div id="gif" style="display:none;" align="center"><img src="img/ajax-loaders/ajax-loader-1.gif" /></div>


这里的JS:

$("#ban").click(function(){
  $.ajax({
    type:"POST",
    url:"includes/ban.php?ts=" + new Date().getTime(),
    dataType:"text",
    data:$(this).serialize(),
    beforeSend:function(){
      $("#gif").show();
    },
    success:function(response){
        $("#gif").hide();
    }
  })
  return false;
});


这是DB的代码:

<?php
include('con.php');
if($_POST['banned']==on) {
    try{
        $id = $_POST['id'];
        $banned = '0';
        $sql = "UPDATE BANS SET
        banned = :banned
        WHERE id= :id";
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':banned', $banned, PDO::PARAM_STR);
        $stmt->bindParam(':id', $id, PDO::PARAM_INT);
        $stmt->execute();
        echo "<div class='alert alert-block alert-success fade in'>
                <button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;</button>
                the ban is off!.
            </div>";
    }catch(PDOException $exception){
        echo "Error: " . $exception->getMessage();
    }
} else {
    try{
        $id = $_POST['id'];
        $banned = '1';
        $sql = "UPDATE BANS SET
        banned = :banned
        WHERE id= :id";
        $stmt = $conn->prepare($sql);
        $stmt->bindParam(':banned', $banned, PDO::PARAM_STR);
        $stmt->bindParam(':id', $id, PDO::PARAM_INT);
        $stmt->execute();
        echo "<div class='alert alert-block alert-danger fade in'>
                <button type='button' class='close' data-dismiss='alert' aria-hidden='true'>&times;</button>
                the ban is on!
            </div>";
    }catch(PDOException $exception){
        echo "Error: " . $exception->getMessage();
    }
}
$dbh = null;
?>

最佳答案

仅提交最后一个的原因是因为您不能将相同的ID分配给多个元素。

更改:<form class="form-horizontal" method="post" name="ban" id="ban">

收件人:<form class="form-horizontal ban" method="post">

然后将您的jQuery选择器更新为$("form.ban")

最后,在您的PHP中:if($_POST['banned']==on) {
应为:if($_POST['banned']=='on') {

编辑:作为一个旁注,同样的问题将影响AJAX加载器GIF,再次假设您在每行中都有一个AJAX加载器,但这不在此问题的范围内。

10-06 07:47