2009-09-17 44 views
2

我有一個Excel文件,我需要將數據發送到我的Drupal MySql數據庫。要做到這一點,我利用我的Excel工作表的VBA內的HTTP POST如下:Drupal 6解析傳入POST數據

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
     URL = "http://localhost:8082/acquia-drupal/node/2" 
     objHTTP.Open "POST", URL, False 
     objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
     objHTTP.send ("string=testdata") 

我想使用Drupal的網頁,將分析出POST數據並將其寫入在一個表Drupal MySql數據庫。

這裏是我已經開始用,

<?php 
if (isset($_POST['string'])) 
{ 
    $trans = $_POST['string']; 
    db_query("INSERT INTO {excel} (ExcelData) VALUES (%d')", 
    $trans); 
} 

這是朝着正確的方向走?另外,有人可以提供一些代碼片段指導正確解析出POST數據嗎?

+0

使用「Drupal頁面」是什麼意思?你的意思是你想要將數據發佈到一個節點上,該節點將內容複製到數據庫模式中? – Grayside 2009-09-17 19:18:33

回答

5

按照您勾畫的方式處理傳入的$ _POST數據有點像手動滾動您自己的Web服務。這並不是一件壞事,有時它是讓事情彼此交談的最佳方式。

但是,如果您在發佈的代碼段中使用類似的代碼,我會強烈建議您對自己的安全性,數據清理和SQL注入保護負責。另外,正如在Eli的評論中指出的那樣,看起來你可能會把它放到一個節點中。這是一個相對危險的方式,因爲任何人都可以輕鬆地打開該節點並開始將$ _POST數據放入數據庫。創建一個模塊,使用hook_menu()爲你的導入代碼定義一個url路徑,並且對這個特定的url設置一些訪問控制限制會讓事情變得更安全。

+0

我有點累了 - 但是你說的「SQL注入保護」是什麼意思?我認爲只要你使用參數(就像Mike所做的那樣),db_query就可以很好地轉義這些東西。 – 2009-09-18 01:18:55

+1

是的 - 從傳入的$ \ _ POST數據中進行原始插入時,仔細考慮這一點非常重要,這是一件很重要的事情當匆匆快速的工具時,經常會四處走動。 我不是故意暗示上面發佈的具體查詢是不安全的,我只是用來鼓勵偏執狂... – Eaton 2009-09-18 06:50:16

+0

感謝您的意見。雖然,我以不同的方式攻擊了這個問題,但這個信息非常有幫助。我當時是Drupal和自定義模塊開發的新手。 – 2009-10-22 20:38:01

1

目前,它看起來好像你只是在PHP過濾器的頁面上編寫代碼。

如果確實如此,那不是一個好主意。至少,編寫一個自定義模塊,可能在hook_view(或者簡單的自定義函數)中使用一些POST解析代碼,並使用hook_menu來設置頁面地址。

至於POST解析,它是一個PHP key =>值數組......我還沒有找到使用它的Drupal-ish方式,而且一些流行的模塊肯定使用它。