Checking whether a user already exists in drupal
Drupal 7 provides a function to get a user object by name :
$user = user_load_by_name($name);if(!$user){ // User doesn't exist} else { // User exists}
http://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_load_by_name/7
This can be done with hook_form_alter
:
function module_(&$form, &$form_state, $form_id) { $user_login_forms = array('user_login', 'user_login_block'); if (in_array($form_id, $user_login_forms)) { $form['#validate'][] = 'my_validate_function'; }}function my_validate_function(&$form, &$form_state) { $name = $form_state['values']['name']; // Drupal 6: if (!db_result(db_query("SELECT COUNT(*) FROM {users} WHERE name = '%s';", $name))) { // User doesn't exist } // Drupal 7: if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name;", array(':name' => $name))->fetchField()) { // User doesn't exist }}
It's better to query the DB directly in this case than than using user_load
as it hooks into other modules as well.
In Drupal 7, substitute for this in the validation function:
if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name", array(':name' => $name))->fetchField()) { // User doesn't exist}