1

好的,我会再试一次,多次询问,但似乎并没有让自己清楚。

首先,我在网页上运行了一个 AJAX 脚本,允许我从游戏中提取数据。

然后使用 POST 方法将此数据发送到 PHP 'api' 页面。

我可以在浏览器的控制台中看到数据实际上正在运行。

这是数据流示例:https ://docs.google.com/document/d/1FLHiWBSBqqm7N8LvzISmiedQKxsqYM572iAT4CQpjP8/edit?usp=sharing

现在这是我的问题:

我可以看到数据正在被解析为 PHP。PHP代码如下:

<?php
        // set headers for API
        header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']);
        header('Access-Control-Allow-Methods: POST, GET, OPTIONS');
        header('Access-Control-Max-Age: 1000');
        header('Access-Control-Allow-Headers: Content-Type');
        header('Content-type: application/json');


$m = false;

if(preg_match('/http\:\/\/prodgame([0-9]+)\.lordofultima\.com/',$_SERVER['HTTP_ORIGIN'],$m))
    { $m = $m[1]; }

if(empty($m)) { die('Invalid Origin.'); }

if(!empty($_POST['data_type']))
        {
        $sender     = $_POST['sender'];
        $alliance   = $_POST['alliance'];
        $request    = $_POST['data_type'];
        $data       = $_POST['data'];

        // Response to Alliance Info Exporter
        $json       = array(
            'message'   => 'recieved.',
            'data'      => array(),
            'error'     => false
        );

        // handle data types

        switch($request)
            {
            case 'connection_test': $json['message'] = 'Welcome to our server2. Your are connected!'; break;
            case 'member'   : /* Code for member request */         break;
            case 'city' :   /* Code for member request */ break;
            case 'support'  : /* Code for support request */        break;
            default         :  $json['message'] = 'Nothing Done.';  break;
            }



        // Respond
        die(json_encode($json));
        }
die('No Access.');

?>

数据是从我在玩这个在线游戏时在本地运行的 .js 文件中解析出来的。创建者发布了 PHP 示例,显然是希望使用它的人将所需的代码添加到 switch/case 语句中以操作数据。

现在,我尝试使用带有各种选项($_POST 或 $POST('data' 或 PHP 中定义的变量)的 json_decode 来提取数据,只是为了验证数据。没有任何效果。

var_dump 对我不起作用,因为客户端 js 确实使我无法根据提供的内容修改服务器端 PHP 上的代码 - 客户端在我触发发送到服务器功能之前会查找响应。

我可能做错了什么。正如您从 google 链接数据中的 HTML POST 输出中看到的那样,正在传输数据。如何访问和操作这些数据?我的最终目标是在数据进入 SQL 数据库时对其进行解析,但我需要确保首先处理它。

我的环境 - 现在在开发中我正在使用本地机器,在 Linux 操作系统上运行的 Apache 上的 PHP。我也加载了 mySql,但现在没有播放。所有最新版本,昨天刚刚安装了开发环境。

更多信息 - 我尝试在 case 语句以及文档前面的代码中插入此代码,使用此或 var_export 获得的最佳输出是 0 字节文件或仅显示 NULL 的文件:

$data1 = json_decode($_POST, $assoc = null);
$f = fopen("/var/www/aix/data/alliance6.txt", "w");
fwrite($f, $data1);
fclose($f);

另一点信息 - 从我可以看出 javascript 中的发送到服务器函数的调用如下:

// send to server
req = main.ajax.send({
alliance : {
    id : a.id,
    name : a.name,
    members : a.members,
    score : a.total_score                                       
},
data_type:type,
data:json
});                 
if(req){
req.success(function(x){
main.aix.set_loading(tab.index,"Data sent to server!",1000);
main.aix.get_saved(id,type).sent = true;

});
}
});
}
else
{ main.aix.set_loading(tab.index,"This data has already been sent.",2000); }
}
if(typeof callback == "function")
{ callback(json); }
}
},

所以对上面的更新:下面 Wayne 提供的 echo 命令确实给了我 $data 变量的数据结构。现在是一个后续问题:如何将我获取的所有数据(发送方、数据阵列等)转换为 SQL 表?如果定期更新/刷新我创建的表,我将如何对数据库中的数据进行重复数据删除?

4

3 回答 3

0

如果我理解您的问题,您将无法阅读 $_POST []。您确定 javascript 正在发送正确的数据吗?如果没有,我会使用 jquery:

$.post("script.php",$("#FormForExample").serialize());

这将发送正确的数据。如果这不是你的问题,请原谅。

于 2013-03-30T19:08:47.723 回答
0

我想你自己有点糊涂了。您正在尝试解码未以 JSON 编码的 POST 变量。JSON 在脚本末尾输出:

// Respond
die(json_encode($json));

基本上,您会担心 JSON,即使您的脚本在所有处理完成后将其转储到页面上时才处理 JSON。

如果您希望操作传入的数据,您应该更仔细地查看 $data 数组:

$sender     = $_POST['sender'];
$alliance   = $_POST['alliance'];
$request    = $_POST['data_type'];
$data       = $_POST['data'];

顺便说一句,从您链接的 POST 数据来看, $data 将是一个多维数组。

执行以下操作,您应该会看到正在处理的结构类型:

$sender     = $_POST['sender'];
$alliance   = $_POST['alliance'];
$request    = $_POST['data_type'];
$data       = $_POST['data'];

echo '<pre>';
var_dump($data);
echo '</pre>;

或者试试这个:

foreach($data as $dataInfo){
    foreach($dataInfo as $key => $info){
        echo $key . ': ' . $info . '<br>';
    }
    echo '<hr>';
}
于 2013-03-30T19:11:39.133 回答
0

经过一些实验,我发现这很好用

$log_to_file = print_r($_POST,$return=true);
$f = fopen("/var/www/aix/data/member.txt", "w");
fwrite($f, $log_to_file);
fclose($f);

通过运行它并使用已知的较小数据集,我能够提取正在解析的数组的完整结构。我不得不使用一个较小的数据集,因为 print_r() 有一个它返回的行缓冲区,之后它会被切断。我确信有办法解决这个问题,但我现在得到了我需要的东西,所以不得不推迟进一步的实验。

Array
(
    [alliance] => Array
        (
            [id] => 134
            [name] => Alliance1
            [members] => 9
            [score] => 17187
        )

    [data_type] => city
    [data] => Array
        (
            [0] => Array
                (
                    [id] => 16515340
                    [owner_id] => 3475
                    [owner] => Player1
                    [coords] => '268:252
                    [name] => AC2013
                    [score] => 11863
                    [city_type] => castle
                    [location] => land
                )

            [1] => Array
                (
                    [id] => 16515335
                    [owner_id] => 3475
                    [owner] => Player1
                    [coords] => '263:252
                    [name] => AC2013
                    [score] => 7
                    [city_type] => castle
                    [location] => water
                )

            [2] => Array
                (
                    [id] => 17891610
                    [owner_id] => 3523
                    [owner] => Player2
                    [coords] => '282:273
                    [name] => City of Repoman9900
                    [score] => 1978
                    [city_type] => castle
                    [location] => water
                )

            [3] => Array
                (
                    [id] => 10616856
                    [owner_id] => 73
                    [owner] => Player2
                    [coords] => '024:162
                    [name] => 1killer
                    [score] => 1308
                    [city_type] => castle
                    [location] => water
                )

            [4] => Array
                (
                    [id] => 10813465
                    [owner_id] => 2862
                    [owner] => Player3
                    [coords] => '025:165
                    [name] => City of vuvuzea991
                    [score] => 1091
                    [city_type] => castle
                    [location] => land
                )

            [5] => Array
                (
                    [id] => 17367317
                    [owner_id] => 84
                    [owner] => Player4
                    [coords] => '277:265
                    [name] => Dreadland
                    [score] => 776
                    [city_type] => castle
                    [location] => water
                )

            [6] => Array
                (
                    [id] => 2162850
                    [owner_id] => 2989
                    [owner] => Player5
                    [coords] => '162:033
                    [name] => City of Dinoeyez
                    [score] => 157
                    [city_type] => castle
                    [location] => water
                )

            [7] => Array
                (
                    [id] => 2818192
                    [owner_id] => 556
                    [owner] => Player6
                    [coords] => '144:043
                    [name] => City of wildfire123
                    [score] => 7
                    [city_type] => castle
                    [location] => water
                )

        )

    [sender] => Array
        (
            [world] => Array
                (
                    [id] => 232
                    [name] => Server 4 
                    [number] => NaN
                )

            [alliance] => Array
                (
                    [id] => 2
                    [name] => Alliance2
                )

            [player] => Array
                (
                    [id] => 98
                    [name] => SuperUser
                )

            [browser] => Array
                (
                    [type] => Chrome
                    [version] => 25.0.1364.160
                )

            [aix_version] => 1.00
        )

)
于 2013-04-02T15:53:42.423 回答