我有一个这样的菜单项:
$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、 浮子