You don't need to load the whole user object to do this - way too much 
potential overhead.

  $uid = db_result(db_query("SELECT uid FROM {users} WHERE name = '%s'", 
$name_you_just_got));
  db_query("INSERT INTO {users_roles} (uid, rid) VALUES(%d, %d)", $uid, 
$rid_of_role_to_add);
 
Nancy E. Wichmann, PMP
Injustice anywhere is a threat to justice everywhere. -- Dr. Martin L. King, Jr.




________________________________
From: Steve Edwards <[email protected]>
To: Drupal Development <[email protected]>
Sent: Fri, February 26, 2010 4:49:02 PM
Subject: [development] How to add user role during registration with custom form

I took over a site that uses a custom registration form that directly calls 
user_register_submit directly, and I need to have a user role added to this 
user when this form is submitted.  However, I can't add the value to 
$form_state['values']['roles'] because the function errors out if there is a 
roles array because it is seen as a 'malicious attempt to alter protected user 
fields.'  Since that function then calls user_save, it seems that once the user 
is saved, I need to 1) load the user I just created, 2) add the role to the 
object, and 3) save it again.  However, in order to call user_load, I need the 
uid, which isn't returned from user_register_submit.  The only logical thing I 
can think to do is query the users table with the user name I just created 
(entered as part of the form), get the rid, and then call user_load and do my 
thing.

Is there a better (and easier) way to do this that I'm missing, or am I on the 
right track?

Thanks.

Steve

Reply via email to