2016-11-28 2 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 get 및 post 요청을 위해 나는 이것을 썼다.

<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> 

여러분도 알다시피 난장판입니다. 초보자이고 저는 예외입니다. 어쨌든, 이렇게 두 조각의 코드가 잘 작동합니다. 그러나, 그들을 결합하려고 할 때, 나는 필요한 결과를 얻지 못하고있다. 내 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> 

는 다음 PostgeSQL 데이터베이스에 데이터를 게시 : 여기 아약스 요청에 사용되는 코드의 마지막 조각이다. 모두에게 다시 한번 감사드립니다! 이 같은 문제를 알아 내려고 다른 누군가가 도움이되기를 바랍니다.

1

Process.php 파일에 아무 것도 보내지 않습니다.

는 다음을 시도해보십시오 process.php의 끝에

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

사용이 모든 데이터를 준비 후. 반드시 status 매개 변수가 필요하지는 않습니다. 원하는 형식으로 데이터를 만드십시오.

+0

당신이 무슨 뜻인지 모르겠어요, 나랑 벗겨주세요. 나는 process.php를 사용하여 데이터를 데이터베이스로 보낸다. $ .get 요청을 제외하고 $ .post 만 사용하면 올바르게 작동합니다. 그래서, jQuery 요청에 "back"을 보내야할지 모르겠습니다.않는 한, 당신이 나에게 말하고있는 것을 오해하고 있습니다. – 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을 올바르게 사용하십시오. 마찬가지로 :

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

는 그런 다음 jQuery를 아약스에, 처음에 데이터 형식 설정 : "JSON"을 다음 그것을 구문 분석합니다. 좋아요 :

$.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