1

我有一个这样的菜单项:

$items['property/edit/%'] = array(
    'page callback' => 'drupal_get_form',
    'page arguments' => array('property_edit_view',2),
    'access arguments' => array('access property edit page'),

    'type' => MENU_CALLBACK,
    );

现在我想获取编辑旁边的 id,'%'?这是处理它的函数。

function property_edit_view($id){
drupal_set_title("Edit the Property");
global $user;
$form = array();
dpm($id);
$sql = "SELECT * FROM {property} WHERE property_id= $id AND property_uid = $user->uid";

$result = db_query($sql);
$row = db_fetch_object($result);
$form['p_name'] = array(
'#type' => 'textfield',
'#title'=>t('Name of the Property'),
'#required'=>TRUE,
'#default_value'=>t($row->property_name),
);

return $form;
}

但我现在收到一个错误:

user warning: Unknown column 'Array' in 'where clause' query: SELECT * FROM property WHERE property_id= Array AND property_uid = 1 in C:\wamp\www\getting-in.com\sites\all\modules\property\property.module on line 284.

请问有什么办法解决吗?

4

2 回答 2

1

您需要%d在 SQL 语句中直接使用而不是使用变量。这是为了防止 SQL 注入、执行验证并尝试允许您使用不同类型的数据库。然后在 db_query 函数的下一个参数中提供变量。“占位符是”

  • %s,字符串
  • %d,整数
  • %b,二进制
  • %%,实际上放了一个“百分比”符号
  • %f,浮动
于 2012-04-02T18:25:58.003 回答
1

表单构建器的函数签名应该包含 &$form_state 作为 Drupal 6 的第一个参数。drupal_get_form 的任何附加参数都将作为附加参数传递给 $form_state 之后的表单构建器。例如:

function property_edit_view(&$form_state, $id) {
}

此外,您的代码包含 Jonathan Rowny 指出的 SQL 注入错误。

于 2012-04-02T20:29:38.693 回答