微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript-序列化表格-输入名称相同

我有以下代码

<form id="sendobj">
        <table class="no-border hover list">
          <tbody class="no-border-y">';
            while($pendingTransfers = MysqL_fetch_assoc($getPending)){
                $id = $pendingTransfers['id'];
                echo '
            <tr class="items">
              <td style="width: 10%;"><span class="label label-primary">'.$counter++.'</span></td>
              <td class="text-left"><p>'.$pendingTransfers['NumarInventar'].'</p></td>
              <td class="text-left"><p><strong>'.$pendingTransfers['DenumireArticol'].'</strong></p></td>
                <input type="hidden" name="id" value="'.$pendingTransfers['id'].'" />
                <td class="text-center"><input type="hidden" name="depID" class="getDep" data-placeholder="Selecteaza destinatie" />  <i style="color:red" title="Sterge din lista" onclick="deleteLista('.$pendingTransfers['id'].');" class="text-right fa fa-times-circle fa-lg"></i></td>
            </tr>';}
                echo '
           </tbody>
        </table>
            </form>     
<div class="text-center"><button id="BtnSendobj" type="submit" class="btn btn-primary btn-success"><i class="fa fa-check color-inverse fa-lg"></i> Finish transfers</button></div>

上面的代码为每个记录插入了DB ID,并在上表的每一行上提供了一个select选项,用户可以选择一些值.当用户完成操作时,他将按下“完成传输”按钮,并且所有输入必须进行序列化.问题是我有多个具有相同名称的输入,并且我无法将它们全部分组,因为以后可以在PHP中使用它们.例如,在每个输入的第1行上,我可以有5行.因此结果将为id = 1 DepId = 3456,id = 2 DepId = 5432,依此类推.

$('#BtnSendobj').on('click', function(event) {
    event.preventDefault();
    var data;
    var a = $('#sendobj').serializeArray();

    $.each(a, function () {
    var depID = $('input[name=depDestinatie]').serializeArray();
    var id = $('input[name=id]').serializeArray();

     data =[{"id":id, "depID":depID}];  
    }); 

    //The above will output something like :
    // [Object]0: Object
    //depId: Array[4]0: Object1: Object2: Object3: Object...
    // id: Array[4]0: Object1: Object2: Object3: Object

    // Like this i cannot handle them togerther in PHP.
    // I think it should look like an array of objects so like this i would   //be able to acces them easly , i think that both id's should be in same object //, but this is were i dont kNow how to proceed.
    $.ajax({
        url: 'subpages/data/transferObjects.PHP',
        data: {data: data},
        type: 'POST',
        success:function(data, textStatus, jqXHR){
            console.log('AJAX SUCCESS');
            console.log(data);
        }, 
        complete : function(data, textStatus, jqXHR){

        }
});
});

在这里,我处理ajax帖子.

我要实现的目标是将数据发送到PHP文件,在该文件中,我将使用表单中的值更新数据库.

PHP文件如下所示:

//some connection 
        if(isset($_POST['data']))
    {
    $updateObjects = MysqL_query("UPDATE transactions SET IDDepartamentDestinatie = '$_POST['depID'] WHERE id = '{$_POST['id']}'");

    }

但是像这样,它只会更新表单中的最后一条记录,因为我不会遍历所有输入.

如果有人有什么想法,我该怎么做,我已经尝试过找到有关serializeArray或serialize的所有示例,但没有为我工作.

解决方法:

对于这种情况,还有另一种可能性-用[]附加名称来命名这些输入:

<input type="hidden" name="id[]" value="'.$pendingTransfers['id'].'" />
<input type="hidden" name="depID[]" class="getDep" data-placeholder="Selecteaza destinatie" />

然后在$_POST [‘id’]和$_POST [‘depId’]中,您将自动拥有数组.因此,无需额外的麻烦,您只需将其作为数据放入ajax函数中,如下所示:

data: $.param($('#sendobj').serializeArray())

PHP中,您可以利用以下事实:相应值对的两个数组中的键相同:

if(isset($_POST['depID'])){
    foreach($_POST['depID']) as $k => $v){
        MysqL_query("UPDATE transactions SET IDDepartamentDestinatie = '$v' WHERE id = '{$_POST['id'][$k]}'");
    }
}

还请记住,应该使用MysqL_real_escape_string来清理$_POST值,更好的是,使用PDO进行MysqL处理.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐