Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 解码JSON$\u POST_Php_Mysql_Arrays_Http Post - Fatal编程技术网

Php 解码JSON$\u POST

Php 解码JSON$\u POST,php,mysql,arrays,http-post,Php,Mysql,Arrays,Http Post,好的,我会再试一次,多次被问到,但我似乎没有说清楚 首先,我在网页上运行了一个AJAX脚本,它允许我从游戏中提取数据 然后使用POST方法将这些数据发送到PHP“api”页面 我可以在浏览器的控制台中看到数据实际上正在传输 以下是数据流示例: 现在我的问题是: 我可以看到数据正在被解析到PHP。PHP代码如下: <?php // set headers for API header('Access-Control-Allow-Origin: '.$_SERV

好的,我会再试一次,多次被问到,但我似乎没有说清楚

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

然后使用POST方法将这些数据发送到PHP“api”页面

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

以下是数据流示例:

现在我的问题是:

我可以看到数据正在被解析到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.');

?>
另一点信息——根据我所能理解的,javascript中的send to server函数调用如下:

// 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表中?如果定期更新/刷新我创建的表,我将如何消除数据库中的重复数据?

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

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

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

我想你有点困惑了。您正在尝试解码未在JSON中编码的POST变量。JSON将在脚本末尾输出:

// Respond
die(json_encode($json));
基本上,您担心的是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>;
$sender=$\u POST['sender'];
$alliance=$_POST['alliance'];
$request=$\u POST['data\u type'];
$data=$_POST['data'];
回声';
var_dump($数据);
回声';
或者试试这个:

$log_to_file = print_r($_POST,$return=true);
$f = fopen("/var/www/aix/data/member.txt", "w");
fwrite($f, $log_to_file);
fclose($f);
foreach($dataInfo形式的数据){
foreach($dataInfo作为$key=>$info){
回显$key.:.$info.
; } 回声“
”; }
经过一些实验后,我发现这很有效

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
        )

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


你在$data数组上做过var_转储吗?我试过了,但在黑暗中拍摄有点困难。如果我更改了PHP并且它没有将数据发送回客户端,那么我可以运行导出来测试catch 22。它不会将数据发送回客户端,因为任何输出都会破坏输出的JSON。如果您正在执行var_转储,则它应仅用于调试目的。在这些情况下,我临时更改了GET方法,以便查看发送的是什么,不是什么。您是对的,我无法读取$POST[]。但是,我可以合理地确定jquery是好的,因为PHP确实能够识别通过的数据,并将成功消息发送回客户端。我没有太多关于javascript的文档,因为创建者没有对javascript中的代码进行注释,但我会看一看。按照javascript的设置方式,我必须在客户端窗口中输入目标PHP地址,因此它是动态的。那里没有指向PHP文件的静态链接。尝试第二个链接,我会在浏览器的控制台窗口中返回此链接,只需在此处发布一些记录:id:10879179
所有者id:140
所有者:玩家1
coords:'203:166
名称:N23\u 00A
得分:11580
城市类型:城堡
位置:水
所有者id:10682590
所有者id:140
所有者:玩家1
坐标:222:163
名称:C23\u 0AC
得分:11425
城市类型:城堡
位置:土地
id:10748124
所有者id:140
所有者:robwiz
坐标:220:164
名称:C23\u 0AM
得分:10580
城市类型:城堡
位置:土地
谢谢,现在我有一个关于我正在处理的结构的完整输出转储。玩了它,所以我有一个更小的数据集,所以我可以拉一切$log\u to\u file=print\r($\u POST,$return=true);$f=fopen(“/var/www/aix/data/member.txt”,“w”);fwrite($f,$log_到_文件);外国法郎(f美元);将$log_回送到_文件;
$log_to_file = print_r($_POST,$return=true);
$f = fopen("/var/www/aix/data/member.txt", "w");
fwrite($f, $log_to_file);
fclose($f);
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
        )

)