как я могу показать форму в drupal и получить переменную подстановочного знака, а также - PullRequest
1 голос
/ 02 апреля 2012

У меня есть пункт меню, подобный этому:

$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.

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

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

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

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

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

1 голос
/ 02 апреля 2012

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

  • % s, строка
  • % d, int
  • % b, двоичный файл
  • %%, на самом деле ставит знак процента
  • % f, с плавающей точкой
...