2013-09-23 1 views
0

C# 웹 페이지 (PHP)를 호출하여 데이터베이스의 데이터에 대해 유효성 검사를 요청해야하는 응용 프로그램을 구축 중입니다. 데이터는 URL의 HTTP 매개 변수를 통해 PHP 페이지에 제공됩니다.PHP 웹 페이지 호출에서 어떻게 값을 되돌릴 수 있습니까?

내 PHP 웹 페이지 호출에서 하나의 응답 값을 되찾고 싶습니다. 이 구체적인 예에서는 Boolean 값만 필요합니다. 그러나 하나의 요청으로 여러 값을 요청하는 방법 (심지어 가능하다면)을 배웁니다. 이 PHP 페이지는 단순히 값을 수신 삽입하거나 데이터베이스 테이블에 레코드를 업데이트하는 중입니다

<?php 
    $type = $_GET['type']; 
    $accessid = $_GET['accessid']; 
    $license = $_GET['license']; 
    $machine = $_GET['machine']; 
    $osver = $_GET['osver']; 
    $ip = getenv("REMOTE_ADDR"); 

    $query = "select * from validatetable where licnum = '" . $license . "'"; 
    if ($result = db_doquery($query)) 
    { 
     if (db_dofetcharray($result)) 
     { 
      $query = "update validatetable set lastdate = CURRENT_TIMESTAMP, lastmachine = '" . $machine . "', accessip = '" . $ip . "', osver = '" . $osver . "' where type = '" . $type . "' and licnum = '" . $license . "'"; 
      db_doquery($query); 
     } 
     else 
     { 
      $query = "insert into validatetable set type = '" . $type . "', name = '<unknown>', licnum = '" . $license . "', accessid = '" . $accessid . "', lastdate = CURRENT_TIMESTAMP, machine = '" . $machine . "', accessip = '" . $ip . "', osver = '" . $osver . "'"; 
      db_doquery($query); 
     } 
    } 
?> 

:

이것은 내가에 호출을하고있는 PHP 페이지의 단순화 된 버전입니다. 이 작업은 계속 진행될 예정이지만, 정보를 추출하고 제공된 내용과 비교하고 유효성 확인 표시기를 Boolean으로 반환하려는 다른 테이블이 있습니다.

그리고 이것은 C# 응용 프로그램에서 내 현재 요청 코드 : 페이지의 전체 HTML이 포함 된 변수에

String webUrl = String.Format("http://www.mywebsite.com/validate.php?type=type&accessid={0}&license={1}&machine={2}&osver={3}.{4}", accessID, licNum, clientMachineName, Environment.OSVersion.Version.Major, Environment.OSVersion.Version.Minor); 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(webUrl); 
request.Credentials = CredentialCache.DefaultCredentials; 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
if (response.StatusCode == HttpStatusCode.OK) 
{ 
    using (Stream dataStream = response.GetResponseStream()) 
    { 
     using (StreamReader reader = new StreamReader(dataStream, Encoding.UTF8)) 
     { 
      String theResponse = reader.ReadToEnd(); //<--- THIS LINE 
     } 
    } 
} 
response.Close(); 

저명한 라인 결과가 반환되는가.

  1. 단일 값
  2. 값의 집합
  3. 뭔가 : 내가 알고 싶은 무엇

    내가 (가능한 무엇이든) 하나 또는 이들의 이상으로 다시 응답을 얻을 수있는 방법이다 나는 값을 확실하게 추출 할 수있다.

+1

[SQL 주입 공격] (http://bobby-tables.com)에 취약합니다. 이 코드를 서면으로 사용하지 마십시오. –

+1

@MarcB Understood. 현재로서는이 테스트가 종결되었습니다. 다음은 PHP 매개 변수화 된 쿼리에 대한 연구입니다. 나는 이것을 한 번에 하나씩 물어보고있다. – DonBoitnott

답변

2

귀하의 반품은 정말로 단순하고 반향되거나 인쇄됩니다. 단지 반환 할 값을 귀하의 C# 스크립트에 표시하십시오.

<?php 
if(// true) { 
echo 'TRUE'; 
} else { 
echo 'FALSE'; 
} 

물론 부울이 아닌 문자열을 반환합니다. 하지만 배열이나 객체를 만들고 json_encode()를 사용하여 값을 C#으로 전달할 수 있습니다.

+0

때로는 간단한 대답이 올바른 것입니다. 감사. – DonBoitnott

0

db_doquery의 코드는 무엇인가?

if 문을 사용하여 쿼리가 성공적으로 실행되었는지 확인해 보셨습니까?

0

표시된 행은 반환되는 페이지의 전체 HTML을 포함하는 변수가됩니다.

PHP 페이지가 특정 값 (API 호출)이 아닌 웹 페이지를 방출하기 때문입니다. 당신은 몇 가지 방법이 접근 할 수

  1. 당신은 (다른 사람 있기는하지만, 예를 들어 HtmlAgilityPack)는 DOM 파서로 페이지 응답을로드하고 원하는 값을 구문 분석 할 수 있습니다.
  2. PHP 코드에서 원하는 구조적 형식으로 원하는 값만 내보낼 수 있습니다.당신은 여전히 ​​그것으로부터 문자열을 얻을 수 있지만, 객체의 구조를 따르는 경우 그것을 객체로 더 쉽게 deserialize 할 수 있습니다. 또는 값이 이면 실제로는 (숫자, 부울 등) 단순한 결과를 해당 유형으로 구문 분석 할 수 있습니다.
0

당신이 반환되는 전체 HTML 개체를 가지고 있기 때문에, 당신은 항상 내가 (나는 당신이 원하는대로 그들을 호출 할 수 있습니다, '데이터'내 전화!) 특정 태그의 매개 변수를 설정하는 무엇을 할 수 당신을 PHP에서 할 수있는 것은 :

send('this string should be returned with data tags'); 
function send(dat) { 
    echo '<data>'. $dat .'</data>' 
} 

그런 다음 C#에서 태그를 제거 :

:

public string removeDataTags(string fullhtml) { 
    string rmt = fullhtml.Substring(fullhtml.IndexOf("<data>") + ("<data>").Length); 
    rmt = rmt.Substring(0, rmt.IndexOf("</data>")); 
    return rmt; 
} 

당신이 지금해야 할 일은이있다

전송 된 데이터는 theResponse 문자열에서 사용할 수 있습니다.

관련 문제