在Drupal中调用自定义PHP

时间:2009-10-15 01:48:20

标签: php database drupal

Drupal版本6.12

我有一个输入格式为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

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

   $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 = '%s');"

   db_query($sql, $fileno);
   print "File: $fileno is now Assigned to $client";
}

?>

我还将数据库置于完全日志记录模式,记录连接和所有语句,并且两个查询都没有命中数据库。在第一种情况下,如果我包含PHP,我只得到一个白色/空白屏幕 - 就像PHP代码正在运行,但drupal在运行之前解析代码。我只想让代码运行AS-IS。

另外,我真的对创建drupal模块不感兴趣。如果可以在没有大量Drupal自定义的情况下完成这项工作,那就是我所追求的。这是一个短期的战术修复,同时我们正在制定更具战略性的目标......

全部谢谢!

1 个答案:

答案 0 :(得分:2)

有几个问题和想法:

  1. 屏幕上是否有任何数据库错误?发生错误后,它们通常会出现在内容顶部的红色“警告”消息框中。
  2. 而不是webform_component您应该使用{webform_component}。所有表名都应放在括号中。
  3. 使用表单输入数据的正确方法是使用$form_values[]表示表单,或$node表示节点(如果数据是节点的一部分)。此外,如果您使用的是webform模块,则可以添加提交webform的步骤。有一些教程here
  4. 最后,php实际上是否达到if if( isset( $_GET['file'] ) )? Drupal会对数据库错误抱怨很多。因此,如果您没有收到错误消息,则表示查询未执行(从未进入该步骤)或执行干净(但可能没有达到预期的效果)。
  5. 根据我的经验,由于您直接输入SQL(已清理和参数化),因此没有对drupal过于复杂的查询。