2011-03-11 41 views
1

有点困惑如何在一个表中动态保存复选框的值!php jquery动态保存复选框

数据库:

id PERSON check 
-------------------- 
1 Person1 1 
2 Person2 1 
3 Person3 1 
4 Person4 0 

HTML代码:

<form id="availability"> 
Person1 <input type="checkbox" id="person1" value="1" checked> 
Person2 <input type="checkbox" id="person2" value="1" checked> 
Person3 <input type="checkbox" id="person3" value="1" checked> 
Person4 <input type="checkbox" id="person4" value="0"> 
</form> 

的jQuery:

$('#availability').submit(function(){ 
    $.post('include/setting.php', { 
     person1: $('#person1').val(), 
     person2: $('#person2').val(), 
     person3: $('#person3').val(), 
     person4: $('#person4').val(), 
    }, function(data){ 

    if(data.success) { 

    } else { 

    } 
    }, 'json'); 
    return false; 
}) 

PHP:

$person1 = $_POST['person1']; 
$person2 = $_POST['person2']; 
$person3 = $_POST['person3']; 
$person3 = $_POST['person4']; 
$db->query("UPDATE person SET id='???"); 
+1

你为什么要保存的价值,而不是检查状态?如果你想检查状态,你可以使用'$('#person1')。is(':checked');' – justkt

+0

我想保存/更新多个复选框(如果选中或没有)到数据库 – tonoslfx

+0

就我所知,您的复选框的值不是检查状态,而是值。你想保存检查状态吗? – justkt

回答

3

你的做法是不干净的或最模块化的,但它可以工作。以下是直接修改你的代码,这应有助于它:

HTML

<form id="availability"> 
    Person1 <input type="checkbox" id="person1" value="1"> 
    Person2 <input type="checkbox" id="person2" value="1"> 
    Person3 <input type="checkbox" id="person3" value="1"> 
    Person4 <input type="checkbox" id="person4" value="1"> 
</form> 

的JavaScript

$('#availability').submit(function() 
{ 
    $.post(
     'include/setting.php', 
     { 
      persons: { 
       person1: ($('#person1:checked').length ? 1 : 0), 
       person2: ($('#person2:checked').length ? 1 : 0), 
       person3: ($('#person3:checked').length ? 1 : 0), 
       person4: ($('#person4:checked').length ? 1 : 0) 
      } 
     }, 
     function(data) 
     { 
      if(data.success) 
      { 

      } 
      else 
      { 

      } 
     }, 
     'json' 
    ); 

    return false; 
}); 

PHP

<?php 
foreach($_POST['persons'] as $personIdentifier => $checked) 
{ 
    //DO PROPER CHECKS AND ESCAPING OF INCOMING DATA!!!!!!! 
    $db->query("UPDATE person SET check = {$checked} WHERE PERSON = '{$personIdentifier}'"); 
} 
+0

感谢您的帮助。我试过你的代码,它没有更新数据库值:(任何想法为什么? – tonoslfx

+0

如果没有访问您的服务器来验证您给我们的所有信息并排除故障,不,我没有任何想法。 – JAAulde

+0

是否可用于聊天。所以我诅咒给你尽可能多,如果你嗯OK :) http://chat.stackoverflow.com/rooms/11/php – tonoslfx

2

要传递0,如果选中,则可以使用is方法与:checked selector确定检查值为布尔值,然后使用ternary operator将JSON值设置为1或0,具体取决于结果。

$('#availability').submit(function(){ 
    $.post('include/setting.php', { 
     "person1" : $('#person1').is(':checked') ? 1 : 0, 
     "person2" : $('#person2').is(':checked') ? 1 : 0, 
     "person3" : $('#person3').is(':checked') ? 1 : 0, 
     "person4" : $('#person4').is(':checked') ? 1 : 0, 
    }, function(data){ 

    if(data.success) { 

    } else { 

    } 
    }, 'json'); 
    return false; 
}) 
+0

谢谢!以及如何将它传递给PHP?并保存值0和1? – tonoslfx

+0

你已经把它发布到你的PHP文件,对吗?看看你的PHP文件是否正在接收正确的数据,首先,然后遍历并保存,如上所示。 – justkt

3

您不需要一次处理所有输入的表单,而只需要发送修改字段的请求而不使用任何形式。

$('input:checkbox').change(function() { 
    $.post('include/setting.php', { 
    id: this.id, 
    value: $(this).attr("checked")?1:0 
    }, function(data){ 
    if(data.success) { 
    } else { 
    } 
    }, 'json'); 
    return false; 
}); 

和PHP:

$db->query("UPDATE person SET value=".$_POST['value']." WHERE id=".$_POST['id']); 

还记得总是逃避与mysql_real_escape_string查询()

+0

这绝对有意义,但前提是OP的意图是在每次检查时更改值或取消选中,但情况可能并非如此。 – justkt

+0

那么什么意思“如何动态保存复选框值”? –

+0

@justkt谢谢。像我想要的东西。我跟着你的代码,但它不会更新数据库。它没有拿起id – tonoslfx