2009-10-15 59 views
1

Drupal版本6.12在Drupal中調用自定義的PHP

我有一個輸入格式爲PHP的頁面。

我只是想更新數據庫表。對於db_query,SQL代碼似乎過於複雜。我不能讓db_query工作,也不包括php,也不會將自定義的php代碼放入「Body」似乎也可以工作。任何建議如何在Drupal中使下面的代碼工作?

這裏是我們把體內的代碼。我試着創建一個PHP文件,並且只包含帶有INCLUDE語句的PHP文件。

我知道PHP是無錯的。它是從一個不使用Drupal的網站上取得的!

<?php 

if(isset($_GET['file'])) 
{ 
    $fileno = $_GET['file']; 
    $client = $_POST["Client"]; 

    $DBLink = pg_connect("host=XXXX dbname=XXXX user=XXX password=XXXX"); 

    $sql = "update 
      webform_submitted_data sd set data = 'A' 
      where 
      sd.nid = '27' and 
      sd.cid = (select wc.cid from webform_component wc where wc.nid = sd.nid and wc.form_key = 'status') and 
      sd.sid = (select wd.sid from webform_submitted_data wd, webform_component wc 
        where wc.nid = sd.nid and wc.form_key = 'your_file_' and wd.nid = wc.nid and 
      wd.data = '$fileno');" 

if(! pg_query($DBLink, $sql)) 
{ 
    print("Database Connection Failure: " . pg_last_error($DBLink)); 
    exit; 
} 
else 
{ 
    print "File: $fileno is now Assigned to $client"; 
} 

pg_close($DBLink); 
} 

?> 

我也打過電話Drupal的API來無論是發送更新到沒有運氣的數據庫,請參見下面的代碼。在放棄並嘗試上面的代碼之前,我實際上首先嚐試了這種方法。

我也嘗試了db_query的兩個版本。你在下面看到的一個,我用$ sql字符串中的$ fileno替換%s,並調用db_query($ sql)。

​​

我也把我的數據庫處於完全日誌記錄模式,記錄連接和所有語句,並且兩個查詢都不會觸及數據庫。在第一種情況下,如果我包含PHP,我只會得到一個白色/空白屏幕 - 這就像PHP代碼正在運行,但drupal在運行代碼之前解析代碼。我只想讓代碼運行AS-IS。

而且,我真的沒有興趣創建Drupal模塊。如果可以在沒有很多Drupal自定義的情況下完成這項工作,那就是我所追求的。這是一個短期的戰術性修復,而我們在更具戰略性的目標而努力......

謝謝大家!

回答

2

幾個問題和想法:

  1. 有沒有出現在屏幕上的任何數據庫錯誤?出現錯誤後,它們通常會出現在內容頂部的紅色「警告」消息框中。
  2. 而不是webform_component你應該使用{webform_component}。所有的表名都應該在括號內。
  3. 從表單輸入使用數據的正確的方法是使用$form_values[]爲窗體或$node爲節點(如果該數據是一個節點的一部分)。此外,如果您使用的是Webform模塊,則可以添加步驟以提交Webform。有一些教程here
  4. 最後,PHP實際上是否達到了如果if(isset($_GET['file']))? Drupal會嚴重抱怨數據庫錯誤。所以如果你沒有收到錯誤信息,這意味着查詢沒有執行(從來沒有執行過這個步驟),或者它乾淨地執行(但可能沒有達到預期效果)。

根據我的經驗,沒有對drupal過於複雜的查詢,因爲您直接輸入SQL(消毒和參數化)。

+0

topologicc是對的;對於db_query而言,SQL不會太複雜。在代碼中添加一些drupal_set_message()調用來識別實際問題,解決方案可能很簡單。 – 2009-10-15 04:30:28