2010-05-10 7 views
11

Wenn ein Benutzer seine Anmeldeinformationen eingibt und auf Senden klickt, möchte ich prüfen, ob der Benutzer bereits existiert oder nicht. So, ich habe die folgenden zwei Fragen 1. Welcher Hook benötigt wird, um für den Fall implementiert zu werden, wenn Benutzer den Absendenknopf auf dem Anmeldeformular trifft. Ich brauche den Benutzernamen, den der Benutzer eingegeben hat. 2. Wie überprüft man, ob ein Benutzer bereits in Drupal oder nicht programmatisch existiert?Überprüfung, ob ein Benutzer bereits in Drupal existiert

Einige Beispielcode würde wirklich geschätzt werden. Bitte helfen.

Vielen Dank.

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 
    } 
} 

Es ist besser, fragen Sie die DB direkt in diesem Fall als als die Verwendung von user_load wie es auch in anderen Modulen Haken:

Antwort

12

Dies kann mit hook_form_alter erfolgen.

+1

Ich hätte vergessen, dass du das mit 'hook_form_alter' machen kannst! Kudos! Löschen meiner Antwort – ceejayoz

+0

Dies funktioniert nicht für Drupal 7. Dies bedeutet: '$ result = db_query (" SELECT COUNT (*) VON {users} WHERE uid =: uid ", array (': uid' => $ uid)) -> fetchField(); if ($ result == 0) { // Benutzer existiert nicht return FALSE; } return TRUE; ' – DrCord

3

In Drupal 7, Ersatz für diese in der Validierungsfunktion:

if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name", array(':name' => $name))->fetchField()) { 
    // User doesn't exist 
} 
19

Drupal 7 besitzt eine Funktion für ein Benutzerobjekt mit Namen zu erhalten:

$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

+1

funktionierte für mich [kidodi] (http://kidodi.com) – Lior

+1

Dies ist eine schwerfällige Lösung, wie es das gesamte Benutzerobjekt lädt, nur um die Existenz eines Benutzers mit Namen zu validieren. Wenn Sie einen Benutzer laden, verwenden Sie auch keine Variable mit dem Namen '$ user', da diese leicht mit dem' global $ user' verwechselt werden könnte, der das aktuelle Benutzerkonto ist. – Christopher

+0

Sie können 'user_load_by_mail' auch verwenden, wenn Sie per Mail suchen: https://api.drupal.org/api/drupal/modules!user!user.module/function/user_load_by_mail/7 – asiviero

0

Ich weiß, Das ist fast 2 Jahre alt, aber user_authenticate macht das gut.

$existing_user = user_authenticate($name,$password); 
if($existing_user) 
    // user exists 
else 
    // user doesn't exist 

Hoffe, das hilft jemand anderem.

+1

das braucht das Passwort, das ist eine schlechte Antwort. – DrCord

+0

Wenn der Benutzer einen Benutzernamen und ein Passwort eingibt, warum sollte dies eine schlechte Lösung sein? Das Passwort wird nicht angezeigt und ich verwende einfach das Passwort, das vergeben wurde. Fehle ich etwas? – dawoodman71

Verwandte Themen