function Mymodule_user($op,&$edit, &$account, $category = NULL) {
switch ($op) {
case 'register':
$result = db_query("SELECT id,name FROM {sites} ORDER BY name");
while($row=db_fetch_array($result)) {
$sites[$row['id']] = $row['name'];
}
$form['site_select'] = array(
'#type' => 'select',
'#title' => t('Select your site'),
'#options' => $sites,
)
return $form;
case 'insert':
//How to take the $form values from above and use in my query to
//write to my own table while writing to the standard 'users' table?
db_query("INSERT INTO {another_table} (site_name) VALUES ('%s')",
$form['site_select']);
);
のための2つの異なるテーブルに書き込みます私のケースは 'insert'なので、これを 'another_table'に書くことができます。ユーザー名やパスワードなどの通常のユーザーデータは、引き続きデフォルトの「ユーザー」テーブルに書き込む必要があります。
Q:なぜ、ちょうどそれが通常どおりDrupalは「データ」フィールドに「ユーザ」テーブルにデータをシリアル化して保存できませんか?
A:私は、AJAX-IFYのことができるように、別のDrupalの形でオートコンプリートを使用するだけでなく、MySQLでクエリの特定のカスタムフィールドにしたいので。 MySQLはシリアル化/シリアル化解除できません。例えば、同様に、そのフォームの#submitプロパティに独自のコールバック関数を追加するために、user_registerフォームを変更したいあなたはおそらくつもり
を!しかし、今、これらのカスタムフィールドが「データ」フィールドの「ユーザー」テーブルに書き込まれてシリアル化される方法がありますか?私は2つの場所にデータを望んでいません。私はMymodule_form_user_register_alter()にカスタムフォームフィールド$フォーム[「site_select」]を移動し、それはまだ「データ」フィールドに「ユーザ」テーブルにキャプチャされます。 – user785179
その場合、あなたはその代わりに、 '$フォームの、あなたの他の人の前に実行されるコールバック提出し確認してください[「#が提出」] [] =「MYMODULEs_own_register_submit_callback_func」;'、あなたが 'するarray_unshift($フォームを[ '#が提出するだろう']、' MYMODULEs_own_register_submit_callback_func '); 'あなたのhook_form_FORMID_alter()にあります。そして、あなたはあなたの事をした後、コールバックでは、あなたは、単に解除できた値のDrupalの通常のコールバックはそれを取得したことがないように、すなわち '解除($ form_state [「値」] [「site_select」]);優秀' – Alexander
!データは1つのテーブルに書き込まれ、ユーザーアカウントは 'users'テーブルに正しく作成されます。ありがとうございました! – user785179