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自定义的情况下完成这项工作,那就是我所追求的。这是一个短期的战术修复,同时我们正在制定更具战略性的目标......
全部谢谢!
答案 0 :(得分:2)
有几个问题和想法:
webform_component
您应该使用{webform_component}
。所有表名都应放在括号中。$form_values[]
表示表单,或$node
表示节点(如果数据是节点的一部分)。此外,如果您使用的是webform模块,则可以添加提交webform的步骤。有一些教程here。if( isset( $_GET['file'] ) )
? Drupal会对数据库错误抱怨很多。因此,如果您没有收到错误消息,则表示查询未执行(从未进入该步骤)或执行干净(但可能没有达到预期的效果)。根据我的经验,由于您直接输入SQL(已清理和参数化),因此没有对drupal过于复杂的查询。