如何在drupal中显示表单并获取通配符变量



我有一个这样的菜单项:

$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:wampwwwgetting-in.comsitesallmodulespropertyproperty.module on line 284.

有什么办法解决吗?

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

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

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

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

  • %s、 字符串
  • %d、 int
  • %b、 二进制的
  • %%,实际上放了一个"百分比"符号
  • %f、 浮子

最新更新