2009-11-11 15 views
1

我有一個表單允許用戶註冊一個新聞信件,該信件提交回它所在的頁面進行驗證並將內容添加到數據庫,但是我還需要發送一個xml文件到第三部分,使用從表單收集的信息添加到郵件列表中。發送給第三方的數據似乎需要使用post方法發送。在後臺發送xml到外部網站

我該如何做到這一點?

我嘗試過AJAX,但是在AJAX無法將信息發送到外部鏈接之後才意識到這一點。

本質上,網站需要重新加載頁面,驗證發送給它的信息,要麼返回錯誤或添加信息數據庫,並在背景中發射xml,所以讓它在重新加載後並不理想無論是。當通過主表單發送xml時,第三方頁面也加載它自己的頁面,這非常漂亮,並且使用戶遠離我們的網站,並不是很好。

回答

1

您將有在PHP中驗證,然後從

<?php 
    $hCurl = curl_init(); 
    curl_setopt($hCurl, CURLOPT_PUT,   true); 
    curl_setopt($hCurl, CURLOPT_HEADER,   true); 
    curl_setopt($hCurl, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($hCurl, CURLOPT_CONNECTTIMEOUT, 60); 
    curl_setopt($hCurl, CURLOPT_URL,   $URL_TO_UPLOAD); 
    curl_setopt($hCurl, CURLOPT_HTTPHEADER,  $aCurlHeaders); 
    // TODO it could be possible that fopen() would return an invalid handle or not work  altogether. Should handle that 
    $fp = fopen ($XML_FILE, "r"); 
    curl_setopt($hCurl, CURLOPT_INFILE,   $fp); 
    curl_setopt($hCurl, CURLOPT_INFILESIZE,  $finfo['size']); 
    $sResp = curl_exec($hCurl); 
?> 

發送XML只是您的服務器替換$ URL_TO_UPLOAD要張貼到nd $ XML_FILE與您要發送的文件,我們完成!

+0

聽起來像我需要的東西,幾個我遇到的問題,並沒有使用捲曲,我不知道該怎麼做。 首先,我假設的$ aCurlHeaders已經在你的代碼的某個地方設置了,需要在這裏做什麼?其次,如果我想發送xml中生成的xml並存儲在一個變量中,我將如何做,而不是創建一個xml文件,發送它,然後刪除它,這是一個時事通訊註冊表單,所以要繼續製作和刪除文件會很煩人。 – andyface 2009-11-11 11:25:04

+0

$ aCurlHeaders [] ='接受:圖片/ gif,圖片/ x位圖,圖片/ jpeg,圖片/ pjpeg'; $ aCurlHeaders [] ='連接:保持活躍'; $ aCurlHeaders [] ='內容類型:application/x-www-form-urlencoded; charset = UTF-8'; 我離開了文件創建/刪除過程。 – Pasta 2009-11-11 12:11:49

+0

感謝您的幫助。我會盡力解決你的問題,但是我太過分了。 因爲我意識到我需要使用post方法代碼,所以我對代碼進行了一些更改以使其符合我的需要,以便通過post方式啓動信息。 一切都在工作,我是一個快樂的兔子,所以謝謝。 捲髮很酷。 – andyface 2009-11-11 13:57:48

1

XML不是由用戶的瀏覽器發送,而是由您的服務器生成併發送的?您仍然可以使用AJAX,並且您不會對用戶離開您的網站感到頭疼。沿着

瀏覽器的線

東西 - >服務器

服務器 - >寫入自己的數據庫 服務器 - >生成一個XML文件,並將其發送到國外的服務器

+0

你能解釋一下嗎?當談到這種類型的編碼時(可能會稍微低一點),我會稱自己爲中間人。 我該如何去告訴我的服務器生成併發送XML? ajax會不會拒絕發送到不同的服務器? – andyface 2009-11-11 11:10:36

+0

不,因爲您的支持AJAX的客戶端機器不需要發送服務器生成的XML,您的服務器將直接連接不同的服務器。 – ty812 2009-11-11 11:46:58

1

我建議讓服務器在將數據添加到數據庫後將數據提交給第三方。它甚至可以排隊這個過程,並在需要時在以後處理它。

有很多方法可以在PHP中執行此操作,例如Curl