2016-06-07 2 views
-1

그래서 사용자의 일부 데이터가있는 JSON 파일을 만드는 앱이 있습니다. 이 데이터는 내 서버에있는 PHP 스크립트를 통해 데이터베이스에 디코딩되고 저장되어야합니다. 이 $ _POST 변수 파일 이름을으로 PHP 스크립트에 게시하여 JSON 파일을 검색하는 데 사용하고 싶습니다. 여기에 내 현재 PHP 스크립트입니다 :HTTP를 통해 데이터를 게시하고 실행하는 방법

<?php 
$host='myip'; 
$user='username'; 
$pass='userpass'; 
$db='database'; 

$link= mysqli_connect($host, $user, $pass, $db) or die(msqli_error($link)); 

$filename = $_POST['filename'] . '.json'; 

$json = file_get_contents($filename); 
$obj = json_decode($json,true); 

foreach ($obj as $data) 
{ 
$query_opslaan = "INSERT INTO skMain (BedrijfsName, ContPers, TelNum, email, Land, Plaats, PostCode) VALUES ('". $data['bedrijfsNaam'] ."' , '". $data['ContPers'] ."', '". $data['TelNum'] ."', '". $data['email'] ."', '". $data['Land'] ."', '". $data['Plaats'] ."', '". $data['PostCode'] ."')"; 
} 
?> 

그리고 이것은 내가 현재는 C#에서 업로드 스크립트를 가지고 있지만 나는이 PHP를 실행하는 데 사용하는 방법을 모르는 내 JSON 파일

{ 
"bedrijfsNaam":"JohnDoeMedia", 
"ContPers":"John Doe", 
"TelNum":"1234567890", 
"email":"[email protected]", 
"Land":"Nederland", 
"Plaats":"somewhere", 
"PostCode":"1234 AB" 
} 

입니다

 WebRequest hwr = WebRequest.Create(serverPath); 
     hwr.Method = WebRequestMethods.Ftp.UploadFile; 
     hwr.Credentials = new NetworkCredential(ftpUser, ftpPass); 

     if (reqCat == "bvg") 
     { 
      json = "{\"bedrijfsNaam\":\"" + bedrijfsNaam + "\"," + 
          "\"ContPers\":\"" + ContPers + "\"," + 
          "\"TelNum\":\"" + TelNum + "\"," + 
          "\"email\":\"" + email + "\"," + 
          "\"Land\":\"" + Land + "\"," + 
          "\"Plaats\":\"" + Plaats + "\"," + 
          "\"PostCode\":\"" + PostCode + "\"}"; 
      using (var sw = new StreamWriter(hwr.GetRequestStream())) 
      { 
       sw.Write(json); 
       sw.Flush(); 
       sw.Close(); 
      } 
     } 

누군가가 나에게이 일을 할 수있는 방법을 가르쳐 주시겠습니까 다음은 PHP 변수 $ _POST [ '이름']에 스크립트 및 저장 데이터를 저장하는 스크립트입니다?

+0

, 그것은 객체가 아닌 배열이됩니다. –

+0

하지만 괜찮습니다. –

+0

또한 삽입 쿼리에 각 데이터 주변에 작은 따옴표가없는 것 같습니다. 바인딩 된 매개 변수가있는 PDO를 살펴보고이를 정리하는 것이 좋습니다. – jszobody

답변

1

나는 당신이 혼란에 빠질 가능성이 있기 때문에 이것을 찌를 것입니다. POST로 데이터를 보내려고하고 있지만 코드가 서버에 직접 FTP로 보내고 있음을 보여줍니다.

FTP에 익숙한 코드를 서버에 포함 시켰습니다. 실제로 웹 서비스 호출을 통해 게시하려면이 작업을 수행하지 않습니다.

 FtpWebRequest lRequest = (FtpWebRequest)WebRequest.Create(serverPath);   
     lRequest.Method = WebRequestMethods.Ftp.UploadFile; 
     lRequest.Credentials = new NetworkCredential(ftpUser, ftpPass); 
     StreamReader lReader = new StreamReader(json); 

     //convert steam to utf8 
     byte[] lContents = Encoding.UTF8.GetBytes(lReader.ReadToEnd()); 
     lReader.Close(); 

     //Get length of data to post 
     lRequest.ContentLength = lContents.Length; 

     //Get your request stream 
     Stream lRequestStream = lRequest.GetRequestStream(); 

     //Write to the stream 
     lRequestStream.Write(lContents, 0, lContents.Length); 

     //Close the stream 
     lRequestStream.Close(); 

     //Get the response from the server 
     FtpWebResponse lResponse = (FtpWebResponse)lRequest.GetResponse(); 

     //What is the actual status. 
     MessageBox.Show(String.Format("Upload File Complete, status {0}", lResponse.StatusDescription)); 

당신이 사용하는 것처럼 당신이해야 할 것입니다.하지만 당신은 그 코드를 서버에 ftp로 사용했습니다. 나는 당신의 변수 이름을 시도하고 사용하기 위해 약간 수정했다.

요청이 HTTP를 사용하여 파일 이름 만 보내면 내 대답에 추가했습니다. 아래의 코드에서 큰 부분은 uri입니다. PHP를 실행하는 웹 서비스로 URI를 만들 수 있다고 가정합니다. 마치 SERVERPATH가 script.php가있는 서버이고 PHP 스크립트가 찾고있는 매개 변수를 FileName이라고 가정합니다. 코드에는 서버에서 응답을 처리하는 것도 포함되지만 서버에서 수행 할 작업에 따라 응답을 수행 할 필요가 없을 수도 있습니다.

또한 서버에서 반환을 기다리지 않는 한 accept 및 content type은 아마도 관련이 없습니다. 주로 두 가지 라인은 웹 요청을 실제로 실행하기 위해 WebRequest.Create (xUri)와 lRequest.GetResponse()입니다.

HTTP : // 해당 ServerPath/PHP_SCRIPT 파일 이름 = FILENAME JSON이 무효 인 경우

private void CallWebApi(String xUri) 
    { 
     String lResults; 
     using(WebClient lClient = new WebClient()) { 
      try { 
       HttpWebRequest lRequest = (HttpWebRequest)WebRequest.Create(xUri); 
       lRequest.Accept = "application/json"; 
       lRequest.ContentType = "application/json"; 
       HttpWebResponse lResponse = (HttpWebResponse)lRequest.GetResponse(); 
       using(StreamReader lJsonReader = new StreamReader(lResponse.GetResponseStream())) { 
        lResults = lJsonReader.ReadToEnd(); 
       } 

       lRequest = (HttpWebRequest)WebRequest.Create(xUri); 
       lRequest.Accept = "application/xml"; 
       lRequest.ContentType = "application/xml"; 
       lResponse = (HttpWebResponse)lRequest.GetResponse(); 
       using(StreamReader lXMLReader = new StreamReader(lResponse.GetResponseStream())) { 
        lResults = lXMLReader.ReadToEnd(); 
       } 

      } 
      catch(Exception lException) { 
       MessageBox.Show(lException.Message); 
      } 
     } 
    } 
+0

죄송합니다. 나는 HTTP를 의미했다. 파일을 저장하기 위해 FTP를 사용했습니다. –

+0

그래서 파일이 이미 서버에 있고 POST에서 파일 이름과 함께 POST를 사용하여 게시물의 파일에 대해 작업을 수행하도록 PHP 서버에 알리고 싶습니까? –

+0

그렇습니다. 내 코드에서 볼 수 있듯이 PHP는 $ _POST [ 'filename'] 변수에서 파일 이름을 가져옵니다. 내 C# 스크립트를 통해이를 설정해야합니다. –

관련 문제