2016-11-28 17 views
1

あなたは私の質問の無知を許さなければなりません。私は、PHP、HTML、およびCSSの使用にかなり精通しています。しかし、私は小さなプロジェクト用の単純な統計コレクタを作成しようとしています。私は、これのためにjQueryまたはAjaxを使用する多くの異なる例を紹介しました。私は最初のアプローチとしてjQueryを使用することに決めました。目標は、getinfo.phpファイルから値をインポートし、変数に割り当て、収集された情報を後で分析するためにデータベースにポストすることです。しかし、私はちょっとした不具合に遭遇しました。私はこのPHPファイルを引き出すために$ .GETリクエストを使用しています。

GETINFO.PHP私例えば

<?php 
$browserID = $_SERVER ['HTTP_USER_AGENT']; 
$ip = $_SERVER ['REMOTE_ADDR']; 
$url = $_SERVER ['REQUEST_URI']; 

echo $browserID; 
echo $ip; 
echo $url; 
?> 

かなりまっすぐ進む、非常に派手な何も。私のjQueryのリクエストに対して、私はこれを書いています。

<script type="text/javascript"> 
     $(document).ready(function(){ 

      // Define variables to send 
      var pageTag = "Test Text"; 

      // Retrieve PHP variables 
      $.get("getinfo.php", function (data) { 

       alert("Data:" + data) 

       // Post data to database 
       $.post("process.php",{ 
         page: pageTag 

        }, 
        function (response,status){//required callback function 
         alert("*----Received Data----*\n\nResponse : " + response+"\n\nStatus : " + status); 
         //"response" receives - whatever written in echo of above PHP script. 

       }); 
      }); 
     }); 
    </script> 

わかりましたように、私は初心者ですが、それ以外は混乱しています。とにかく、別々にこれらの2つのコードはうまく動作します。しかし、それらを組み合わせようとすると、私は必要な結果を得られません。私のvar pageTag = "Test Text";は、実際の投稿が行われたときにサーバーにプッシュされていません。今私のPostgreSQLデータベースはタイムスタンプを保存する空白のエントリを取得していますが、それはprocess.phpファイル自体によって送信されています。

PROCESS.PHPので

<?php 
    #Creds to access the database 
    require_once("connection.php"); 

    /* Log page and get filenames */ 
    #$page = input($_GET['page']) or die('ERROR: Missing page ID'); 
    $page = json_decode(stripslashes($_POST['page'])); 
    $ip_add = json_decode(stripslashes($_POST['ip_addy'])); 
    $browser = json_decode(stripslashes($_POST['browser'])); 
    $timestampInSeconds = $_SERVER['REQUEST_TIME']; 
    $date = date("Y-m-d h:i:s", $timestampInSeconds); 

    $sql = "INSERT INTO stats (page, date, ip, browser) VALUES ('$page','$date','$ip_add','$browser')"; 
    pg_query($db,$sql); 

    echo $page; 
    echo $ip_add; 
    echo $date; 

    $query="SELECT COUNT(*) total FROM stats WHERE page= '$page'"; 
    $result = pg_query($db,$query); 
    $row = pg_fetch_array($result,0,PGSQL_NUM); 
    $count = $row[0]; 

    $query = "SELECT count(distinct IP) FROM stats WHERE page= '$page'"; 
    $result = pg_query($db,$query); 
    $row = pg_fetch_array($result,0,PGSQL_NUM); 
    $UniaquCount = $row[0]; 
    pg_close($db); 

    exit(); 

、簡単にまとめについて。私はgetinfo.phpを使ってクライアント側からいくつかのデータを取得し、それらの要求をjquery経由でprocess.phpに送信してデータベースに配信する必要があります。どんな助けでも大歓迎です!

+0

JSONでProcess.phpのレスポンスをエンコードするようにしてください。もう一度考えてみてください。レスポンスは送信されません。 – progrAmmar

答えて

0

大変ありがとうございました。ここで私はAjaxのリクエストのために使用されるコードの最後のスニペットは次のとおりです。

<script type="text/javascript"> 
     $(document).ready(function(){ 

      // Create the AJAX request 
      $.ajax({ 
       type: "GET",          // Using the POST method 
       url: "getinfo.php",         // The file to call 
       dataType: "json",         // Our data to pass 

       success: function (data) {        // What to do on success 
        //On success define the following variables from getinfo.php 
        var ip = JSON.stringify(data["ip"]); 
        var url = JSON.stringify(data["url"]); 
        var browser = JSON.stringify(data["browser"]); 

        $.ajax({ 
         type: "POST",  //Using the POST method 
         url: "process.php", //The php file used to submit data to database 
         dataType: "text", // Our data to pass 
         cache: false, 
         data: { 
          page: url, 
          browser: browser, 
          ip_addy: ip, 

         }, 
         success: function (response, status) { 
          alert("*----Received Data----*\n\nResponse : " + response + "\n\nStatus : " + status); 

         } 
        }); 

       }, 
      }); 
     }); 
    </script> 

AJAXリクエストはPostgeSQLデータベースにそのデータをポストその後、要求されたデータに引っ張ります。みんなありがとう!私はこれがこの同じ問題を理解しようとしている誰かを助けることを願っています。

1

Process.phpファイルに何も返信しません。

は、以下のことを試してみてください。

$data = /** whatever you're serializing **/; 
header('Content-Type: application/json'); 
echo json_encode($data); 

は、すべてのデータを準備した後process.phpの終わりにこれを使用します。必ずしもstatusパラメータが必要なわけではありません。必要な形式でデータを作成してください。

+0

私はあなたが何を意味するかわからない、私と一緒に裸をしてください私はこれを取得しようとしています。私はprocess.phpを使ってデータをデータベースに送ります。 $ .get要求を除外して$ .postだけを使うとうまくいきます。だから、私はjQueryのリクエストに「戻る」必要があるのか​​どうか分かりません。あなたが私に言っていることを誤解していない限り。 – Tastedalgory

+0

あなたのProcess.phpはAJAXに返信しません。 process.phpの最後で、次のコードをコピーして '$ data =" Test Response "を貼り付けます。ヘッダー( 'Content-Type:application/json'); echo json_encode($ data); '何が起こるかを確認 – progrAmmar

+0

もあなたのPOST変数から' json_decode'を削除して試してみてください – progrAmmar

1

多くの間違いがあります。

まず、 "getinfo.php"に、jsonを正しく使用してください。 Like:

$data = array(
      "browserid"=>$browserID, 
      "ip"=>$ip, 
      "url"=>$url, 
      ); 
header('Content-Type: application/json'); 
echo json_encode($data); 

次に、jQuery Ajaxで、データ型を "json"に設定して解析します。 Like:

$.ajax({ 
    type: "GET", 
    dataType: "json", 
    url: "getinfo.php", 
    success: function(data) { 
     var browserid = data["browserid"]; 
     var ip = data["ip"]; 
     var url = data["url"]; 
     // 
     // Continue, the POST part (or) whatever you want here.. 
     // 
    } 
}); 
+0

皆さん、私の返信で長い間お待ちしておりますことをお詫び申し上げます。私はちょうど今このコードに戻ります。私はgetinfo.phpに変更を加え、今はjson出力を得ています。私は@夏期劇場の提案に合わせて私のアヤックスも変えました。私は 'alert();'を使うと出力を得ることに成功しました。この時点で、コードのポスティング部分について作業しています。これとは別に、うまくいきますが、一度ネストされると、$ .GETリクエストからデータを受け取っていません。それが私の今のところです。 – Tastedalgory

関連する問題