4.7.x user.module user_register_submit($form_id, $form_values)
5.x user.module user_register_submit($form_id, $form_values)
6.x user.module user_register_submit($form, &$form_state)
7.x user.module user_register_submit($form, &$form_state)

Submit handler for the user registration form.

This function is shared by the installation form and the normal registration form, which is why it can't be in the user.pages.inc file.

See also


1 string reference to 'user_register_submit'
user_register_form in modules/user/user.module
Form builder; the user registration form.


modules/user/user.module, line 3894
Enables the user registration and login system.


function user_register_submit($form, &$form_state) {
  $admin = $form_state['values']['administer_users'];
  if (!variable_get('user_email_verification', TRUE) || $admin) {
    $pass = $form_state['values']['pass'];
  else {
    $pass = user_password();
  $notify = !empty($form_state['values']['notify']);

  // Remove unneeded values.
  $form_state['values']['pass'] = $pass;
  $form_state['values']['init'] = $form_state['values']['mail'];
  $account = $form['#user'];
  entity_form_submit_build_entity('user', $account, $form, $form_state);

  // Populate $edit with the properties of $account, which have been edited on
  // this form by taking over all values, which appear in the form values too.
  $edit = array_intersect_key((array) $account, $form_state['values']);
  $account = user_save($account, $edit);

  // Terminate if an error occurred during user_save().
  if (!$account) {
    drupal_set_message(t("Error saving user account."), 'error');
    $form_state['redirect'] = '';
  $form_state['user'] = $account;
  $form_state['values']['uid'] = $account->uid;
  watchdog('user', 'New user: %name (%email).', array(
    '%name' => $form_state['values']['name'],
    '%email' => $form_state['values']['mail'],
  ), WATCHDOG_NOTICE, l(t('edit'), 'user/' . $account->uid . '/edit'));

  // Add plain text password into user account to generate mail tokens.
  $account->password = $pass;

  // New administrative account without notification.
  $uri = entity_uri('user', $account);
  if ($admin && !$notify) {
    drupal_set_message(t('Created a new user account for <a href="@url">%name</a>. No e-mail has been sent.', array(
      '@url' => url($uri['path'], $uri['options']),
      '%name' => $account->name,
  elseif (!$admin && !variable_get('user_email_verification', TRUE) && $account->status) {
    _user_mail_notify('register_no_approval_required', $account);
    $form_state['uid'] = $account->uid;
    user_login_submit(array(), $form_state);
    drupal_set_message(t('Registration successful. You are now logged in.'));
    $form_state['redirect'] = '';
  elseif ($account->status || $notify) {
    $op = $notify ? 'register_admin_created' : 'register_no_approval_required';
    _user_mail_notify($op, $account);
    if ($notify) {
      drupal_set_message(t('A welcome message with further instructions has been e-mailed to the new user <a href="@url">%name</a>.', array(
        '@url' => url($uri['path'], $uri['options']),
        '%name' => $account->name,
    else {
      drupal_set_message(t('A welcome message with further instructions has been sent to your e-mail address.'));
      $form_state['redirect'] = '';
  else {
    _user_mail_notify('register_pending_approval', $account);
    drupal_set_message(t('Thank you for applying for an account. Your account is currently pending approval by the site administrator.<br />In the meantime, a welcome message with further instructions has been sent to your e-mail address.'));
    $form_state['redirect'] = '';


overbythere’s picture

Should you want to redirect after registration, then the following needs to be added as a custom modile:

function custom_form_alter(&$form, $form_state, $form_id) {
	if($form_id=='user_register_form') { $_GET['destination'] = 'node/yournode'; }
mpnordland’s picture

Better yet

function custom_form_alter(&$form, $form_state, $form_id) {
	if($form_id=='user_register_form') { 
          $form['#submit'] = array('custom_form_submit');

function custom_form_submit($form, &$form_state){
    user_register_submit($form, $form_state);
    $form_state['redirect'] = 'node/yournode';