2010-05-10 51 views
11

Khi người dùng nhập thông tin đăng nhập và lần truy cập của họ gửi, tôi muốn kiểm tra xem người dùng đã tồn tại hay chưa. Vì vậy, tôi có hai câu hỏi sau 1. Cần móc nào để được triển khai, trong trường hợp người dùng nhấn nút gửi trên biểu mẫu đăng nhập. Tôi cần tên người dùng nhập bởi người dùng. 2. Cách kiểm tra xem người dùng đã tồn tại trong drupal hay không có lập trình?Kiểm tra xem người dùng đã tồn tại trong drupal

Một số mã mẫu sẽ thực sự được đánh giá cao. Xin vui lòng giúp đỡ.

Cảm ơn bạn.

Trả lời

12

Điều này có thể được thực hiện với 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 
    } 
} 

Nó tốt hơn để truy vấn DB trực tiếp trong trường hợp này hơn so với sử dụng user_load vì nó móc vào các module khác là tốt.

+1

Tôi đã quên bạn có thể làm điều đó với 'hook_form_alter'! Thanh danh! Đang xóa câu trả lời của tôi. – ceejayoz

+0

Điều này không hoạt động đối với Drupal 7. Điều này không: '$ result = db_query (" SELECT COUNT (*) FROM {users} WHERE uid =: uid ", mảng (': uid' => $ uid)) -> fetchField(); nếu ($ result == 0) { // Người dùng không tồn tại trả về FALSE; } return TRUE; ' – DrCord

3

Trong Drupal 7, thay thế cho điều này trong chức năng xác nhận:

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

Drupal 7 cung cấp một chức năng để có được một đối tượng người dùng theo tên:

$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

đã hoạt động cho tôi [kidodi] (http://kidodi.com) – Lior

+1

Đây là giải pháp nặng nề khi tải toàn bộ đối tượng người dùng, chỉ để xác thực sự tồn tại của người dùng theo tên. Ngoài ra, nếu bạn đang tải một người dùng, không sử dụng biến có tên '$ user' vì nó có thể dễ dàng bị nhầm lẫn với' global $ user' là tài khoản người dùng hiện tại. – Christopher

+0

bạn cũng có thể sử dụng 'user_load_by_mail' trong trường hợp bạn đang tìm kiếm bằng thư: https://api.drupal.org/api/drupal/modules!user!user.module/function/user_load_by_mail/7 – asiviero

0

Tôi nhận ra đây là gần 2 năm tuổi, nhưng user_authenticate thực hiện điều này một cách độc đáo.

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

Hy vọng điều này sẽ giúp người khác.

+1

điều này cần mật khẩu, đây là câu trả lời không tốt. – DrCord

+0

Nếu người dùng nhập tên người dùng và mật khẩu, tại sao đây lại là giải pháp tồi? Mật khẩu không được hiển thị và tôi chỉ sử dụng mật khẩu đã được cung cấp. Tui bỏ lỡ điều gì vậy? – dawoodman71

Các vấn đề liên quan