【问题标题】:how would I pull the data out of the database and re-check the checkboxes that were originally checked and submitted?如何从数据库中提取数据并重新检查最初检查并提交的复选框?
【发布时间】:2016-08-24 18:38:15
【问题描述】:

我使用下面的代码将复选框值输入到数据库中。当用户想稍后查看复选框时,如何将数据从数据库中拉出并重新选中最初选中并提交的复选框?

从下面的代码中输入数据如下:DATA1|DATA2|DATA3|

var checkbox_value = "";
    $(":checkbox").each(function () {
        var ischecked = $(this).is(":checked");
        if (ischecked) {
            checkbox_value += $(this).val() + "|";
        }
    });

现在我如何获取 DATA1|DATA2|DATA3|并重新勾选相应的复选框?

这是我如何从普通输入文本框中获取其他数据并重新显示它:

$.ajax({
  url: 'ajax/example/example.php',
  data: "findval="+carrier+"&column="+column,
  dataType: 'json',                
  success: function(data)         
  {

    var auto_id = data['id'];
    var auto_name = data['name'];
    var auto_address = data['address'];
    var auto_trailer_types = data['trailer_types'];

$('#output_autocomplete_forms').html("<form id='example' class='form-horizontal'><input type='hidden' name='auto_id' id='auto_id' class='form-control' value="+auto_id+">......<div class='form-group'>
<div class='checkbox'><label><input type='checkbox' name='trailer_kinds[]' value='DATA1'>DATA1</label></div>
<div class='checkbox'><label><input type='checkbox' name='trailer_kinds[]' value='DATA2'>DATA2</label></div>
<div class='checkbox'><label><input type='checkbox' name='trailer_kinds[]' value='DATA3'>DATA3</label></div> 

var auto_trailer_types = data['trailer_types'];

现在我该如何获取 DATA1|DATA2|DATA3|并重新勾选相应的复选框?

【问题讨论】:

  • 您可以使用 AJAX 将该字符串发送到数据库。同样,您可以使用 AJAX 来检索它(如果您愿意,也可以在服务器上执行时获取它)并通过 | 拆分值并设置保存这些值的复选框的选中属性。我建议您使用更标准的格式来保存数据,JSON 可能是最好的选择。
  • 您能告诉我如何拆分值并设置选中的属性吗?我是否做类似 php explode 之类的事情,然后在 checkbox 属性中做一个 if 语句?
  • 我的回答对您解决问题有帮助吗?如果是这样,请单击复选标记以接受答案,如果您认为这是合理的,可以选择单击向上箭头进行投票。 否则,请通过在我的回答下方留下评论或编辑您的问题并提供更多信息来提供有关我们如何进一步帮助您的反馈。

标签: php jquery ajax checkbox


【解决方案1】:

所以,我猜测存储在数据库中的字符串类似于0|0|1|0,您需要将复选框恢复到该状态。

如前所述,您可以为此使用 AJAX。首先,您需要一个触发器来启动 AJAX 例程——通常是单击按钮:

<button id="mybutt">Update Checkboxes</button>

您的 AJAX 例程将如下所示:

var rowID = $(this).closest('tr').attr('id');
alert(rowID); //this datum must allow you to identify the row in the database
$.ajax({
    type: 'post',
     url: 'another_php_file.php',
    data: 'id=' +rowID,
    success: function(recd){
        var arrCB = recd.split('|');
        for (var n=0; n<arrCB.length; n++){
            var z = n+1;
            $('#cb'+ z).val( arrCB[n] );
        }
    }
});

另一个_php_file.php:

<?php
    $id = $_POST['id'];

    $pseudo_query = "SELECT `field_name` FROM `table_name` WHERE `id` = '$id' ";

    echo $pseudo_query_result;

您回显的pseudo_query_result 应该是您原来的0|0|1|0。 PHP echo 将该数据发送回 jQuery AJAX 例程的 success 函数。 重要提示:接收到的数据在该成功函数之外不可用。如上例所示,您必须在成功函数中使用该数据做您想做的事情。

在上面的代码中,.split() 用于将0|0|1|0 字符串转换为数组,然后我们使用 for 循环(甚至只是手动编写每个复选框更新的代码)。

【讨论】:

  • 我不太明白这行代码在做什么:$('#cb'+ z).val(arrCB[n]);你能把它分解吗?我想我应该从拆分中得到的数组中取一个值,然后看看它是否与输入的值匹配?我只是不知道我是怎么得到这个的: var arrCB = recd.split('|'); ...这给了我这个... arrCB ["DATA1","DATA2","DATA3"],然后查看看起来像 ...等,并确定是否需要检查。谢谢!
  • 在 for 循环中,n 增加了 .length 倍。最初,n = 0,所以第一次通过该行读取的循环:Inject the first value (element zero) of the array called arrCB into the element with ID="#cb1"。 arrCB 是由split()ing 通过 ajax 接收到的字符串创建的,应该如下所示:0|0|1|0。因此,数组 arrCB 应如下所示: [0][0][1][0] -- 因为数组是从零开始的,arrCB[0] = 0arrCB[1] = 0arrCB[2] = 1
  • 请注意,我在您的复选框中添加了 ID 属性,以便更轻松地定位它们。如果没有 ID,您将不得不 do something like $(':checkbox:eq(n)').val()(选择第 n 个复选框)。更容易使用 ID。
【解决方案2】:

使用 ajax 来解决这个问题。但在尝试在JSON 中编码您的php 查询响应之前

$.ajax({
url: "test.php" //Your request URI
 }).done(function(data) { 
   //data (you can name it whatever you want) is the data that you get from your request.
   //eg. if(data.checkbock){ //do something }
 });

更多信息here

【讨论】:

  • 所以如果 var auto_trailer_types = data['trailer_types'];给我返回 DATA1|DATA2|DATA3|...我是否将它们分解成一个数组,然后在每个复选框中执行 if 语句以查看数据是否对应,然后检查或不检查?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-13
  • 2012-06-11
  • 1970-01-01
  • 2011-10-07
相关资源
最近更新 更多