【问题标题】:Calling custom PHP inside Drupal在 Drupal 中调用自定义 PHP
【发布时间】:2009-10-15 01:48:19
【问题描述】:

Drupal 6.12 版

我有一个输入格式为 PHP 的页面。

我只是想更新一个数据库表。 SQL 代码对于 db_query 来说似乎太复杂了。我无法使 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 字符串中将 %s 替换为 $fileno 并调用 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 在运行之前解析代码。我只想让代码按原样运行。

另外,我真的对创建 drupal 模块不感兴趣。如果可以在没有大量 Drupal 定制的情况下完成这项工作,那就是我所追求的。这是一个短期的战术解决方案,而我们则致力于实现更具战略性的目标......

谢谢大家!

【问题讨论】:

    标签: php database drupal


    【解决方案1】:

    几个问题和想法:

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

    根据我的经验,对于 drupal 来说,没有太复杂的查询,因为您直接输入 SQL(经过清理和参数化)。

    【讨论】:

    • topologicc 是对的;对于 db_query 来说,没有 SQL 太复杂的事情。在整个代码中添加一些 drupal_set_message() 调用以识别实际问题,解决方案可能很简单。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多