2014-09-17 2 views
0

Я работаю с живым флажком, поэтому, когда мне нужно установить ON (1) или OFF (0) один флажок, установите флажок обновить значение в БД, и все в порядке ... но сейчас Я работаю с live checkbox в списке пользователей (который у меня уже есть сейчас 100 пользователей) ... так что проблема в том, что когда я пытаюсь поместить кого-то в запрет, флажок работает только с последним, а не с другими пользователи ... не могли бы вы мне помочь?save multi checkbox по id

Вот форма:

<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; 
}); 

И это код к БД:

<?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; 
?> 

ответ

2

Причина только последний становится что вы не можете назначить один и тот же идентификатор нескольким элементам.

Изменение: <form class="form-horizontal" method="post" name="ban" id="ban">

To: <form class="form-horizontal ban" method="post">

Затем обновите ваш селектор JQuery в $("form.ban")

Наконец, в вашем PHP: if($_POST['banned']==on) { Должно быть: if($_POST['banned']=='on') {

Edit: В стороне -номер, та же проблема затронет GIF-загрузчик AJAX, предположив, что у вас есть загрузчик AJAX в каждом строки, но это выходит за рамки этого вопроса.

+0

Ваше решение будет работать нормально, хотя в качестве предложения для joaquin, чтобы сделать общий код проще, является форма на все необходимое. Если ему нужно обновить статус пользователя на флажке, то на нем может быть установлен флажок без формы и иметь атрибут данных в качестве идентификатора пользователя. Затем щелчок по любому флажку можно обрабатывать и обрабатывать так же, как это делается на данный момент. – nitigyan

+0

@Ben Chamberlin приятно !, спасибо, сейчас работает! ... и да, загрузчик AJAX все еще показывает мне только в первом ... –