как я могу показать форму в 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,
    );

теперь я хочу получить идентификатор рядом с редактированием, «%»? и вот функция, которая его обрабатывает.

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.

Пожалуйста, есть ли способ разобраться?


person Maverick    schedule 02.04.2012    source источник


Ответы (2)


Ваша сигнатура функции для построителя форм должна включать &$form_state в качестве первого параметра для Drupal 6. Любые дополнительные аргументы для drupal_get_form будут переданы в качестве дополнительных аргументов для построителя форм после $form_state. Например:

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

Кроме того, ваш код содержит ошибку внедрения SQL, как указал Джонатан Роуни.

person Mikey P    schedule 02.04.2012

Вам нужно использовать %d вместо использования переменных непосредственно в операторе SQL. Это делается для предотвращения внедрения SQL, выполнения проверок и попытки разрешить вам использовать различные типы баз данных. Затем вы предоставляете переменные в следующем аргументе функции db_query. «Заполнители»

  • %s, строка
  • %d, интервал
  • %b, двоичный
  • %%, на самом деле ставит знак "процент"
  • %f, плавающая
person Jonathan Rowny    schedule 02.04.2012