2012-08-07 28 views
0

如何將數據從一個站點保存到另一個站點數據庫?我需要製作一個將數據保存到外部數據庫的表單。我試着用fopen,但我不認爲這是做了正確的方式:如何將數據從一個站點保存到另一個站點數據庫?

$externalsave = fopen('http://onewebsite.com/folder/this_page_INSERTS_INTO_DB.php?datavalue1='.$data1.'&datavalue2='.$data2, 'r'); 
$data = ''; 
while(!feof($externalsave)) 
    $data .= fread($externalsave, 4092); 
fclose($externalsave); 

echo $data; 

是否有人知道我怎麼能保存插入一個表格值在一個網站上,在外部數據庫?

我使用的是Apache服務器,上面的代碼工作正常,我只是不相信它。或者我可以嗎?

+0

你是否正在從數據庫保存到數據庫?或者你只是想從另一個網站寫入遠程數據庫。 – hanleyhansen 2012-08-07 13:34:41

+0

[CURL](http://ee.php.net/manual/en/book.curl.php)是你最好的朋友。 – Leri 2012-08-07 13:34:48

+0

你的代碼看起來應該可以工作(或者你可以簡單地使用'file_get_contents'),但是可能會禁用外部URL提取 - 一些共享的PHP主機不允許它。 – halfer 2012-08-07 13:42:00

回答

2

有3級主要的解決方案:

1.遠程操作

最簡單的方法就是將您的表單指向遠程服務器。例如:

<form method="post" action="http://myothersite.com/myphpscript.php"> 
</form> 

而在myphpscript.php只需在localhost中處理表單。 (啓用要求了allow_url_fopen指令)

2.代理行爲

你也可以在同一服務器上的PHP腳本要去送其他服務器上的數據點的形式。 該解決方案可以是有用繞過CSRF一樣令牌安全:

<form method="post" action="proxy.php"></form> 

proxy.php:

$postdata = http_build_query($_POST); //Need some filtering !!! 

$opts = array('http' => 
    array(
     'method' => 'POST', 
     'header' => 'Content-type: application/x-www-form-urlencoded', 
     'content' => $postdata 
    ) 
); 

$context = stream_context_create($opts); 
$result = file_get_contents('http://myotherserver.com/submit.php', false, $context); 

無需捲曲這裏;)

3.遠程數據庫

最後,您可以使用具有遠程訪問權限的數據庫,並簡單地使用遠程主機連接到數據庫,如:

$mysqli = new mysqli('mydbHost.com', 'my_user', 'my_password', 'my_db'); 

不幸的是這個解決方案是很少允許,因爲它可能是一個很大的安全隱患(世界上任何人可以嘗試連接到數據庫)。

+0

編輯你的答案時請小心 - 你刪除了我的一些調整(你會合並它們回來嗎?)。 – halfer 2012-08-07 13:53:36

+0

抱歉,我的不好,在重寫我的答案的大部分內容之前沒有看到您的編輯。 – grunk 2012-08-07 13:57:26

+0

得到它太工作了,我用第二種方法'代理行動'。謝謝! – 2012-08-07 14:19:09

2

簡單的答案:

  • 設置在站點A形式

  • 指向網站上的腳本的形式行動B.

  • 有無站點B驗證傳入的變量和插。

你也可以使用cURL如果你不真正要在其中創建站點A形式

+0

如果存在CSRF保護,如令牌怎麼辦? – Tadeck 2012-08-07 13:41:55

+0

我對cURL不熟悉,你能舉一個我如何完成這個任務的例子嗎? – 2012-08-07 13:52:21

0

你應該設置mysql(我想你的數據庫是MySQL)來監聽網絡連接並直接連接到它。

關於DB服務器註釋/etc/mysql/my.cnf中的'bind-address = 127.0.0.1'並重新啓動Mysql守護進程。

Web服務器上,這樣做:

$dbconnection = mysql_connect('IP_OF_DB_SERVER', 'username', 'userpassword'); 

,只是在數據庫中插入數據。

相關問題