选择多个复选框并使用提交按钮更新数据库

时间:2014-05-26 08:15:33

标签: javascript php ajax checkbox

我刚刚使用ajax在多个复选框上完成了小项目。但现在我想使用提交按钮进行过滤选项。因此,现在选择了多个复选框并点击了sumbit按钮后,只有它应该在手机数据库中更改。有帮助吗?谢谢。 这是我的代码: 的index.php

<script>


 function makeTable(data){
    var tbl_body = "";
    $.each(data, function() {
      var tbl_row = "",
          currRecord = this;

      $.each(this, function(k , v) {
        if(k==='model'){
          v = "<a href='content.php?id=" + currRecord['id'] +"'>" + v + "</a>";
        } else if (k==='price'){
          v = "<span class='price'>" + v + "</span>";
        }
        tbl_row += "<td>"+v+"</td>";
      })
      tbl_body += "<tr>"+tbl_row+"</tr>";
    })

    return tbl_body;
  }

  function getPhoneFilterOptions(){
    var opts = [];
    $checkboxes.each(function(){
      if(this.checked){
        opts.push(this.id);
      }
    });

    return opts;
  }


  function updatePhones(opts){
    if(!opts || !opts.length){
      opts = allBrands;
    }

    $.ajax({
      type: "POST",
      url: "submit.php",
      dataType : 'json',
      cache: false,
      data: {filterOpts: opts},
      success: function(records){
        $('#phones tbody').html(makeTable(records));
        updatePrices();
      }
    });
  }

  function subsidyIsValid(){
    var amount1 = $("#amount1").val(),
        amount2 = $("#amount2").val(),
        regex = /^\d+$/,
        inputValid = false;

    if(regex.test(amount1) && regex.test(amount2)){
      var newTotal = Number(amount1) + Number(amount2)
      $("#total").text(newTotal);
      inputValid = true;
    }

    return inputValid
  }

  function updatePrices(){
    var subsidyTotal = Number($("#total").text());

    $(".price").each(function(){
      var origVal = Number($(this).text())
      $(this).text(origVal - subsidyTotal)
    })
  }

 $("#submitFilter").on("click", function(){
    var opts = getPhoneFilterOptions();
    updatePhones(opts);
        })

  $("#apply").on("click", function(){
    if(subsidyIsValid()){
      $(this).prop("disabled", true);
      $(this).next().prop("disabled", false);
      updatePrices();
    } else {
      alert("Subsidy invalid!")
    }
  });

  $("#remove").on("click", function(){
    $("#amount1").val("");
    $("#amount2").val("");
    $("#total").text("0");
    $(this).prop("disabled", true);
    $(this).prev().prop("disabled", false);

    $checkboxes.trigger("change");
  });

  var allBrands = [];
  $("input[type=checkbox]").each(function(){
    allBrands.push($(this)[0].id)
  })

  updatePhones();
  updatePrices();
</script> 

Submit.php

<?php 
require 'Database.php';
#### TEMP SET NAMES FÜR UTF8 ###################################################
include 'Json.php';
  $opts = $_POST['filterOpts'];
  $tmp = array();
  foreach ($opts as $opt) {
        $tmp[] = '"'.$opt.'"';
  }
         $query = 
      'SELECT mobile_phone.id, name, model, price FROM mobile_phone INNER JOIN brand ON brand_id = brand.id WHERE name IN ('.implode(",", $tmp).')';


  $result = mysql_query($query);
  $data   = array();
  while ($row = mysql_fetch_assoc($result)) {
  $data[] = $row;
  }

echo json_encode($data);
?>

1 个答案:

答案 0 :(得分:0)

首先,删除此侦听器:

$checkboxes.on("change", function(){
    var opts = getPhoneFilterOptions();
    updatePhones(opts);
  });

您不希望在检查复选框时更改表格中的数据,但只有在单击提交按钮后才能更改。我没有看到任何&#34;提交&#34; &#34;应用&#34;以外的按钮这似乎与补贴选项有关,而不是过滤,所以添加一个&#39;提交&#39;第一个(实际上只是一个按钮):

(...)
<div>
  <input type="checkbox" id="Nokia">
  <label for="Nokia">Nokia</label>
</div>
<button id="submitFilter">Filter</button>
(...)

然后将你在复选框监听器中的内容丢给onClick of submitFilter。

 $("#submitFilter").on("click", function(){
     var opts = getPhoneFilterOptions();
     updatePhones(opts);
 });

我更新了小提琴,以便更准确地满足您的需求。 Check it here

编辑:

要打开新标签页:

var win = window.open(url, '_blank');
win.focus();

其中网址显然是您要打开的网址。您也可以将其设置为表单目标并将要传递的数据放入表单中,并将过滤器设置为提交。