1

我已经研究了 2 天,但还没有找到适当的解决方案来解决我的问题。本质上,我正在尝试使用 jQuery 基于多个复选框按 ID “链接”数据库行,但这里有点棘手:

背景:

  • 我有一个positions显示为 HTML 表 ( #ct) 的数据库表 (),每行旁边都有复选框。
  • 一次最多可以检查四 (4) 行并相互“链接”(但不必担心可以检查的框数限制)
  • positions从SHOULD链接行创建一个新行,covered_positions其中包含列id(PK), linked_id1, linked_id2, linked_id3,linked_id4

已经做了什么:

  • 每个复选框已经将其值分配idpositions
  • 一个下拉选择框已经触发了 Javascript 函数ctActions()

认为需要的:

  • ctActions()使用以下方法在复选框值中创建一个数组:

    var linked_ids = [];
    
    $("#ct input[type='checkbox']:checked").each(function() {
        linked_ids.push(this.value);
    });
    
  • 将数据编码并发送到 PHP:

    var linked_ids_json = JSON.stringify(linked_ids);
    
    $.post('link-positions.php', { linked_ids_json: linked_ids_json } );
    

  • 在我的link-positions.php

    // Get & explode array
    $array = json_decode($_POST['linked_ids_json']);
    
    // Test whether each value is set -- Not sure if needed
    $linked_id1 = (isset($array[0]) ? $array[0] : "");
    $linked_id2 = (isset($array[1]) ? $array[1] : "");
    $linked_id3 = (isset($array[2]) ? $array[2] : "");
    $linked_id4 = (isset($array[3]) ? $array[3] : "");
    
    include('../mysqli-connect.php');
    $conn = dbConnect();
    
    $sql = "INSERT INTO `covered_positions` (
        linked_id1,
        linked_id2,
        linked_id3,
        linked_id4)
        VALUES (?, ?, ?, ?)";
    
    $stmt = $conn->prepare($sql);
    $stmt->bind_param('iiii',
                $linked_id1,
                $linked_id2,
                $linked_id3,
                $linked_id4);
    
    $stmt->execute();
    
    $conn->close();
    

但在这一切之后,什么都没有发生。我确定我的代码中有一些明显的错误,所以我想我会发布它以供一些更有经验的人看。

更新

  • 已修复但仍未解决问题$stmt->execute$stmt->execute()
4

3 回答 3

0

AJAX如果请求成功完成或出现任何错误,请检查 FireBug 。

接下来,检查您在服务器上获取的数据print_r($_POST);

考虑到您的 HTML 就像

<form id="form1">
    <input class="cb" type="checkbox" value="a" name="cbTest[]" />
    <input class="cb" type="checkbox" value="b" name="cbTest[]" />
    <input class="cb" type="checkbox" value="c" name="cbTest[]" />
    <input class="cb" type="checkbox" value="d" name="cbTest[]" />
</form>

我建议您通过使用来获取检查值

// if the form only contains checkboxes
var linked_ids_json = $('#form1').serialize();

// Or
var linked_ids_json = $('.cb').serialize();
$.ajax({
    type: 'post',
    url: 'link-positions.php',
    data: linked_ids_json,
    success: function () {
        // callback
    }
});

在 PHP 中使用,例如,

$array = $_POST['linked_ids_json'];

您将能够访问以下值$linked_id[0];

于 2013-02-15T18:58:59.167 回答
0

由OP解决。这最初被编辑到问题正文中:

我发现 link-positions.php 文件在错误的目录中!下面的代码工作得很好。

于 2013-02-15T19:10:33.370 回答
0

我设法解决了这个问题。代码工作正常,只是 link-positions.php 位于错误的目录中。希望代码可以帮助其他人完成类似的任务。

于 2013-02-15T19:25:11.313 回答