2009-12-16 3 views
0

Мне нужно было создать пользовательский список выбора для страницы регистрации пользователя, которая вытаскивает SQL-запрос из узлов, которые мне нужно связать с пользователями. Я успешно выполнил эту задачу. :)Drupal: Изменение пользователя при регистрации

Однако, когда я отправляю значение, я не могу контролировать, где хранится значение. Фактически, я не могу хранить значение вообще. Я создал настраиваемое поле для моего значения, но только новое имя поля сохраняется, и оно сериализуется и хранится в столбце данных таблицы пользователя.

Ниже мой код, я прокомментировал свои проблемы в нем. Любая помощь будет оценена!

<?php 
    // $Id$ 

     //create the additional user form field, a select list named "account_name" 
     //then calls the next function to populate it. 
     function accountselect_user($op, &$edit, &$account, $category = NULL) { 
     if ($op == 'register' || 'edit') 
     $fields['Information']['account_name'] = array(
     '#type' => 'select', 
     '#title' => 'Account', 
     '#description' => t('Select the account to which the contact belongs'), 
     '#options' => accountselect_getclubs() , 
     ); 
     return $fields; 
     } 

     //contains query to pull results to select list...this part is working 
     function accountselect_getclubs() { 
      $return = array(); 
      $sql = 'SELECT DISTINCT `title` FROM node WHERE type = \'accounts\' '; 
      $result = db_query($sql); 
     while ($row = db_fetch_array($result)) { 
      $return[] = $row['title']; 
     } 

     return $return; 
     } 

     //CAN'T GET THIS PART TO WORK - query to update the row - the uid = 29 is for 
     //testing puposes. Once I get the test value to work 
     //the test value I will worry about updating the correct user. 
     function accountselect_submitaccount() { 
     $sql = "UPDATE users SET account = \'value\' WHERE uid = \'29\'"; 
     db_query($sql); 
     drupal_set_message(t('The field has been updated.')); 
     } 

     //I SUSPECT THE PROBLEM IS HERE...call the submitaccount function. 
     //I have tried hook_form_alter as well... 
     function accountselect_submit(&$form, &$form_state) { 
     if($form_id == 'user-register') 
     drupal_execute('accountselect_submitaccount'); 
     } 

ответ

0

Вы проверили журналы Drupal? Это должно быть ошибка, поскольку это недействительный запрос.

$sql = "UPDATE users SET account = \'value\' WHERE uid = \'29\'"; 

Должно быть:

$sql = "UPDATE users SET account = 'value' WHERE uid = '29'"; 

Кроме того, в:

function accountselect_submit(&$form, &$form_state) { 
    if($form_id == 'user-register') 
    drupal_execute('accountselect_submitaccount'); 
} 

$form_id никогда не определяется.

Вы говорите, что вы создали поле в базе данных, но оно должно совпадать с именем поля Drupal, которое будет автоматически обрабатываться. У вас есть два разных имени: account_name в поле Drupal, но account в базе данных. Сделайте их согласованными, и их следует автоматически обрабатывать, не требуя никаких функций отправки.

+0

Я ничего не вижу в журналах. Я изменил запрос, но те же результаты. Я не уверен, что даже доходит до запроса. Что-то не так с функцией, которая вызывает запрос? – tpow

+0

Вы правы. Теперь он передает выбранный индекс (достаточно хорошо!) Списка выбора. Извините, я новичок в drupal, и он мощный, но меня немного смущает ... – tpow

Смежные вопросы