2012-05-19 3 views
0

PHP를 사용하여 URL에 게시해야합니다. 지금은 작동하지만 데이터/게시를 보낸 후에 json 출력 (웹 서비스에서 게시)을 제공하고 출력이 우호적이어야합니다. jQuery와 Ajax를 사용할 수 없습니다. 충돌합니다.URL없이 URL을 사용하여 PHP없이 데이터를 게시하는 방법

{"Prize":"XXXXXX","ConfirmationCode":"######","Error":false,"ErrorMsg":null} 

포스팅이 작품을 좋아 : 그것은 다음과 같은 JSON의 출력 페이지에 나를 소요 제출 클릭 한 후

<form action="http://somewebservice.com/<?php echo $PrizeID;?>" method="post" name="myform"> 
<input name="account" id="account" type="hidden" value="<?php echo $account;?>"/> 
<input name="dob" id="dob" type="hidden" value="<?php echo $dob;?>"/> 
<input name="site" id="site" type="hidden" value="<?php echo $site;?>"/> 
<input name="submit" type="submit" value="submit"/> 
</form> 

: 내가 웹 서비스 여기

에 직접 통신해야하는 것이 내 양식이다 왜냐하면 i ckeck 웹 서비스 로그와 제출이 등록되어 있기 때문입니다. 지금해야 할 일은 위의 그림에서 전체 JSON 출력 대신 멋지게 형식화 된 ConfirmationCode을 표시하는 것입니다. 도움이된다면 크게 감사하겠습니다.

UPDATE 나는이 페이지를 새로 고침하지만 DB를 업데이트하지 않습니다 ... UR의 도움에 따라 일부 변경했다. 웹 서비스 로그를 확인했는데 항목이 기록되지 않았습니다. 여기에 PHP

if(isset($_POST['submit'])){ 
$options = array(
      'http'=>array(
       'method'=>"POST", 
       'contentType'=> "application/x-www-form-urlencoded", 
       'content'=>http_build_query(array(
         'account' => $account, 
         'dob' => $dob, 
         'site' => $site 
        )) 
      )); 

     $context = stream_context_create($options); 
     $result = file_get_contents("http://somewebservice.com/{$PrizeID}",NULL,$context); 
     var_dump($result); 
} 

<form name="myform"> 
<input name="account" id="account" type="hidden" value="<?php echo $account;?>"/> 
<input name="dob" id="dob" type="hidden" value="<?php echo $dob;?>"/> 
<input name="site" id="site" type="hidden" value="<?php echo $site;?>"/> 
<input name="submit" type="submit" value="submit"/> 
</form> 

: "자원 ID # 4"

여기에 업데이트 된 양식의를 이 오류로 날 (false)를 BOOL 제공하고 $ 컨텍스트를 에코 때, 내가 얻을 업데이트 (AJAX) 웹 서비스에 쓰는 동안 AJAX를 시도했는데 clietn 사이트에서 오류가 발생합니다. 오류가 [개체 개체] 여기 여기 아약스에게

을의 형태

<form name="myform" > 
<input name="account" id="account" type="hidden" value="<?php echo $account;?>"/> 
<input name="dob" id="dob" type="hidden" value="<?php echo $dob;?>"/> 
<input name="site" id="site" type="hidden" value="<?php echo $site;?>"/> 
<input id="submit" type="submit" value="submit"/> 
<div id="result"></div> 

여기 아약스 스크립트의 말한다 : -이 해결 - (컬/W)

<script type="text/javascript"> 
$("#submit").click(function(e){ 
    e.preventDefault(); 
    var account = $('#account').val(); 
    var dob = $('#dob').val(); 
    var site = $('#site').val(); 

    $.ajax({ 
     type: "POST", 
     url: "http://somewebservice.com/<?php echo $PrizeID;?>", 
     data: "{ 'account': '" + account + "','dob': '" + dob + "', 'site': '" + site + "'}", 
     contentType: "application/json; charset=utf-8", 
     async: false, 
     success: function(data) { 
      //$('#result').text(data.d); 
      alert(data); 
      var obj = $.parseJSON(data); 
       $("#result").html("<p><b>Confirmation Code:</b> " + obj.ConfirmationCode + "</p>"); 
     }, 
     error: function(data) { 
      alert(data); 
      $("#result").html("<b>There was an error. Please try again</b><br/>"); 

     } 
    }); 
}); 
</script> 

UPDATE IT 작동! !!! 이 작동 - 웹 서비스를 통해 데이터베이스에 게시하고 webservice에서 반환 한 ConfirmationCode를 다시 가져올 수 있습니다. 당신이 curl없이 POST 요청을 수행하려는 경우 여기

, 당신은 사용할 수 file_get_contents() 및 기타 파일 process.php 파일

<?php 
$data = array("account" => "{$account}", "dob" => "{$dob}", "site" => "{$site}");                  
$data_string = json_encode($data); 

$ch = curl_init("http://somewebservice.com/{$PrizeID}");                  
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");                  
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);                 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);                  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string))                  
);                             
$result = curl_exec($ch);        
curl_close($ch); 
$json_result = json_decode($result, true); 
?> 
// here's the call for the confirmation number 
<p>Your confirmation number is: <strong><?php echo $json_result['ConfirmationCode'];?></strong></p> 
+1

PHP로 게시하지 않고 브라우저로 게시하고 있습니다. 초기에 폼을 생성 한 경우를 제외하고 PHP는이 프로세스에 전혀 관여하지 않습니다. –

+0

jQuery가 AJAX와 충돌합니까? 나는 그것을 의심스럽게 생각합니다 ... 왜 그 문제를 먼저 고쳐서 시작하지 않습니까? – Brad

+0

나는 ajax를 시도했다. (업데이트로 위의 코드를 넣었다.) db bcz에 글을 쓰지 만 등록 된 항목으로 webs ervice에서 longs를 볼 수 있지만 클라이언트 사이트에서는 작동하지 않는다. 제출을 클릭하면 다음과 같은 오류 메시지가 나타납니다. [object Object] – Azukah

답변

2

웹 서비스의 프록시 역할을하는 PHP 스크립트를 만들어 필요한대로 JSON 형식을 지정할 수 있습니다.

양식 태그로 변경합니다 :

<form action="http://myaddress.com/myproxyscript.php" method="post" name="myform"> 

다음 myproxyscript.php는 것 같은 :

<?php 
$postvars=file_get_contents("php://input"); 

$curl=curl_init("http://somewebservice.com/{$PrizeID}"); 
curl_setopt($curl,CURLOPT_POSTFIELDS,$postvars); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
$result=curl_exec($curl); 
$decodedresult=json_decode($result,true); 
// do stuff with result here... 
?> 

또는 TUFAN의 대답에 주어진대로 결과를 가져 오기 위해 PHP에서 file_get_contents을 사용할 수 있습니다 .

+0

k, 감사합니다 - "php : // input"은 무엇입니까? 폼이있는 페이지가 될까요? – Azukah

+1

"php : // input"은 스크립트를 요청한 HTTP 요청의 본문입니다. 이 경우 양식에서 보낸 모든 $ _POST 데이터가 포함됩니다. – Gareth

+0

나는 그것을 보자. – Azukah

3

여기

<form action="process.php" method="post" name="myform"> 
<input id="submit" type="submit" value="submit"/> 
</form> 

offer.php에서 폼의의 작업 (fopen 등) create a contextset default context options,

예 :

$options = array(
      'http'=>array(
       'method'=>"POST", 
       'content'=>http_build_query(array(
         'account' => $account, 
         'dob' => $dob, 
         'site' => $site 
        )) 
      )); 

     $context = stream_context_create($options); 
     $result = file_get_contents("http://somewebservice.com/{$PrizeID}",NULL,$context); 
     var_dump($result); 
+0

감사합니다. 나는 그것을 시도했지만 작동하지 않았다. 나는 당신이 보낸 링크를 확인하고 있습니다. 감사합니다. – Azukah

+0

나는 게시물을 편집하고, 예제를 테스트했으며, 이제는 원하는대로 작동합니다. –

+0

감사합니다. 난 그냥 그것을 시도하고 페이지를 새로 고치고 위에 "bool (false)"얻을. – Azukah

관련 문제