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

%dSQLステートメントで変数を直接使用する代わりに、を使用する必要があります。これは、SQLインジェクションを防ぎ、検証を実行し、さまざまな種類のデータベースを使用できるようにするためです。次に、db_query関数の次の引数に変数を指定します。「プレースホルダーは」

  • %s、文字列
  • %d、int
  • %b、バイナリ
  • %%、実際には「パーセント」記号を付けます
  • %f、フロート
于 2012-04-02T18:25:58.003 に答える
1

フォームビルダーの関数シグネチャには、Drupal 6の最初のパラメーターとして&$ form_stateを含める必要があります。drupal_get_formへの追加の引数は、$form_stateの後にフォームビルダーに追加の引数として渡されます。例えば:

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

また、Jonathan Rownyが指摘したように、コードにはSQLインジェクションのバグが含まれています。

于 2012-04-02T20:29:38.693 に答える