0

在本页面...

http://lab.2toria.com/reflex/index2.php

当用户将块拖放到网格上时,我希望能够以某种形式将位置发送到 php 脚本,该脚本会将它们保存到仅记录坐标的表中(例如“x1y2”、“x1y3”、等)成行。到目前为止,我表中的字段非常简单(blockID、blockCoords)

最好的方法是什么?我在听你对两件事的看法:-

1) 使用 jQuery ajax,如何发送包含坐标的字符串作为列表?最好是创建一个xml字符串,还是有另一种我没有想到的方式......我将如何做到这一点

和..

2)基于用于发送数据的方法(xml或其他),我将如何处理接收php脚本中的数据以将数据保存到表中。我知道如何保存记录等,只是想知道如何最好地处理这种情况。

4

2 回答 2

1
$('element').droppable({
    drop:function(event, ui){
        $.ajax({
            url: '/path/to/my/file.php',
            type: 'POST',
            data: {'left' : ui.helper.position().left,
                   'top': ui.helper.position().top},
            success: function(data){
              //do something with the response from the server
            }
        });
    }
});

而在/path/to/my/file.php

if(isset($_POST['left'])):
    $db = new mysqli('connection info here');
    $q = $db->prepare('INSERT INTO some_table (left, top) VALUES (?,?)'); //prepare the statement
    $q->bind_param('ss', $_POST['left'], $_POST['top']); //safe binding
    if(FALSE !== $q->execute()):
        return 'Query Executed!';
    endif; //execute the statement
    return false;
endif;

因此,在 php 文件中,我们只是检查$_POST变量是否存在left。我们假设 top 也将可用。我们建立一个 mysqli 连接,准备一个安全语句,将参数绑定为strings,使用$_POSTleft/topvalues。然后我们检查执行是否没有返回假(返回真/假),如果没有,我们传递一个值并一起退出条件。如果没有,默认情况下会触发 return false。

编辑

从您的评论中,您希望保存用户执行的操作,直到准备好实际执行插入,这也很容易实现。

var dc = 0,
    drops = {};

dc将是dropcount,并且drops将是一个对象。

$('element').droppable({
    drop: function(event, ui){
        drops[dc] = {'left' : ui.helper.position().left, 'top' : ui.helper.position().top};
        dc++;
    }
});

在上面,我们简单地通过drops对象递增,存储每个 drop 的 left/top 值的信息。

$('.save').click(function(e){
    e.preventDefault();
    $.ajax({
        url: 'test.php',
        type: 'POST',
        data: {'drops': drops},
        success: function(data){
            console.log(data);  
        }
    });
});

在这里,我们有一个保存类的保存按钮,我们阻止默认操作,然后我们将 drop 对象发送到服务器。

if(isset($_POST['drops'])):
    //same process as outlined above, use a helper function to insert the rows
endif;

现在我们检查 $_POST 变量 'drops' 的存在,我们将采用与上面相同的策略。我会简单地推荐一个 helper function saveDrops($obj),迭代返回的 drop 并对传入的每个 obj 执行保存。

于 2013-04-27T21:31:51.900 回答
0

1) 是的,使用 jQuery ajax 发布坐标和块 ID。

2) 它们将在 $_POST 变量中可供 php 使用。

请参阅:jQuery 帖子

于 2013-04-27T21:29:28.573 回答