1

わかりました、これをもう一度試してみます。何度も尋ねましたが、自分自身を明確にしていないようです。

まず、ゲームからデータを抽出できる Web ページで 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.');

?>

データは、このオンライン ゲームのプレイ中にローカルで実行した .js ファイルから解析されています。作成者は PHP の例を投稿しました。これを使用して必要なコードを switch/case ステートメントに追加し、データを操作することを意図していることは明らかです。

ここで、データを検証するためだけに、さまざまなオプション ($_POST、または $POST('data' または PHP で定義されている変数)) を指定して json_decode を使用してデータを抽出するためだけのテストとして試みました。何も機能しません。

var_dump が機能しないのは、クライアント js が提供されているものからサーバー側の PHP のコードを変更できないためです。クライアントは、サーバーへの送信機能をトリガーする前に応答を探します。

私は何が間違っているのでしょうか。HTML POST 出力からわかるように、Google リンク データ転送されています。このデータにアクセスして操作するにはどうすればよいですか? 私の最終的な目標は、データが SQL データベースに入力されるときにデータを解析することですが、最初にそれを確実に処理する必要があります。

私の環境 - 現在、開発中はローカル マシン、Linux OS で実行されている 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);

もう1つの情報-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

少し混乱したと思います。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

私があなたの質問を正しく理解していれば、$_POST[] を読むことはできません。JavaScript が正しいデータを送信していると確信していますか? いいえの場合、jqueryを使用します:

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

これにより、正しいデータが送信されます。これがあなたの質問でない場合は、すみません。

于 2013-03-30T19:08:47.723 に答える