复选框不使用AJAX和PHP将false替换为false

时间:2017-06-12 03:34:18

标签: javascript php jquery html ajax

我有一个应用程序,用户将检查输入复选框,该值将被发送到数据库而无需重新加载页面;它做的。但是,当我取消选中相同元素的隐藏类型时;其中包含值0,未提交,而是仍然从复选框中提交值1。

输入是动态创建的:

function build_something(it, src){


  var something = it;
  var htag = it+"-header";


  var ctr = document.createElement('div');
  ctr.setAttribute('class', 'interest_container');

  var lbl = document.createElement('label');
  lbl.setAttribute('for', something);

  var img = document.createElement('img');
  img.setAttribute('src', src);

  var title = document.createElement('h2');
  title.setAttribute('id', htag);

  var inp_f =document.createElement('input');
  inp_f.setAttribute('type', 'hidden');
  inp_f.setAttribute('name', something);
  inp_f.setAttribute('value', 0);

  var inp = document.createElement('input');
  inp.setAttribute('type', 'checkbox');
  inp.setAttribute('id', something);
  inp.setAttribute('name', something);
  inp.setAttribute('value', 1);


  lbl.appendChild(img);
  ctr.appendChild(lbl);
  ctr.appendChild(inp_f);
  ctr.appendChild(inp);
  ctr.appendChild(title);

  var elem = document.getElementById('idk');
  elem.appendChild(ctr);

  document.getElementById(htag).innerHTML = it;
}

绑定最近的元素抓取输入和onchange post checked元素:

$('#interests').on('change', 'input', function (e){
  e.preventDefault();

  $.ajax({
    type: 'POST',
    url:  'some.php',
    async:  true,
    data: $(this).serialize(),
    success:  function (msg) {
      console.log(msg);

    }
  });
})

storeData是some.php调用的函数:

function storeData($form_data, $table_name, $cxn){
  if(!is_array($form_data)){
    return false;
    exit();
  }
  $types = str_repeat("s", count($form_data));
  $params = array();
  $params[] = &$types;
  $keys = array_keys($form_data);
  $values = array_values($form_data);
  for ($i = 0; $i < count($values); $i++) {
    $params[] = &$values[$i];
  }

  $sql = "INSERT INTO $table_name (" . implode(',', $keys) . ") VALUES (" .
  implode(',', array_fill(0, count($values), '?')) . ")
  ON DUPLICATE KEY UPDATE ";
  $updates = implode(',', array_map(function($col) {
    return "$col = VALUES($col)";
  }, $keys));
  $sql .= $updates;

  $stmt = mysqli_prepare($cxn, $sql);
  call_user_func_array(array($stmt, 'bind_param'), $params);
  return mysqli_stmt_execute($stmt);
}

当我检查输入框时,它会提交值并存储它;但是,当我取消选中相同的元素时,它应该发送一个值0,但它不会。

编辑:我的问题不同,因为其他解决方案建议下拉列表。我不要那个。

1 个答案:

答案 0 :(得分:-1)

因为如果取消选中复选框,则不会向服务器发送请求值。在PHP中使用isset()检查值是否可用。