2010-05-10 18 views
11

में मौजूद है या नहीं, जब कोई उपयोगकर्ता अपनी लॉगिन जानकारी दर्ज करता है और सबमिट करता है, तो मैं यह जांचना चाहता हूं कि उपयोगकर्ता पहले से मौजूद है या नहीं। तो, मेरे पास निम्नलिखित दो प्रश्न हैं 1. लागू होने के लिए कौन सा हुक आवश्यक है, जब उपयोगकर्ता लॉगिन फॉर्म पर सबमिट बटन हिट करता है। मुझे उपयोगकर्ता द्वारा दर्ज उपयोगकर्ता नाम की आवश्यकता है। 2. यह जांचने के लिए कि क्या उपयोगकर्ता पहले से ड्रोपल में मौजूद है या प्रोग्रामेटिक रूप से नहीं है?यह जांचना कि क्या उपयोगकर्ता पहले से ही ड्रूपल

कुछ नमूना कोड वास्तव में सराहना की जाएगी। कृपया मदद करें।

धन्यवाद।

उत्तर

12

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

यह user_load का उपयोग कर के रूप में यह अन्य मॉड्यूल में भी हुक से की तुलना में इस मामले में सीधे डीबी क्वेरी करने के लिए बेहतर है।

+1

मैं भूल गया था कि आप 'hook_form_alter' के साथ ऐसा कर सकते हैं! कुडोस! मेरा जवाब हटाना – ceejayoz

+0

यह ड्रूपल 7 के लिए काम नहीं करता है। यह करता है: '$ result = db_query (" यूआईआर = यूआईडी ", जहां से यूआईडी =: यूआईडी", सरणी (': uid' => $ uid) -> fetchField(); यदि ($ परिणाम == 0) { // उपयोगकर्ता मौजूद नहीं है वापसी गलत; } वापस लौटें; ' – DrCord

3

Drupal 7 में, मान्यता समारोह में इस के लिए विकल्प:

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

ड्रुपल 7 एक समारोह प्रदान करता है नाम से एक उपयोगकर्ता वस्तु प्राप्त करने के लिए:

$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

मेरे लिए काम किया [kidodi] (http://kidodi.com) – Lior

+1

यह एक भारी हाथ का समाधान है क्योंकि यह पूरे उपयोगकर्ता ऑब्जेक्ट को लोड करता है, बस उपयोगकर्ता द्वारा अस्तित्व के सत्यापन को मान्य करने के लिए। साथ ही, यदि आप उपयोगकर्ता लोड कर रहे हैं, तो '$ user' नामक चर का उपयोग न करें क्योंकि यह आसानी से' वैश्विक $ उपयोगकर्ता' के साथ भ्रमित हो सकता है जो वर्तमान उपयोगकर्ता खाता है। – Christopher

+0

यदि आप मेल द्वारा खोज रहे हैं तो आप 'user_load_by_mail' का भी उपयोग कर सकते हैं: https://api.drupal.org/api/drupal/modules!user!user.module/function/user_load_by_mail/7 – asiviero

0

मुझे पता है यह लगभग 2 साल पुराना है, लेकिन उपयोगकर्ता_ प्रमाणीकरण यह अच्छी तरह से करता है।

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

उम्मीद है कि यह किसी और की मदद करेगा।

+1

इसे पासवर्ड की आवश्यकता है, यह एक बुरा जवाब है। – DrCord

+0

यदि उपयोगकर्ता उपयोगकर्ता नाम और पासवर्ड दर्ज कर रहा है तो यह एक बुरा समाधान क्यों होगा? पासवर्ड प्रदर्शित नहीं हो रहा है और मैं बस दिया गया पासवर्ड का उपयोग कर रहा हूं। क्या मैं कुछ भूल रहा हूँ? – dawoodman71

1

आप प्रेरणा के लिए इन 2 मॉड्यूल को देखने का प्रयास कर सकते हैं: friendly_register और username_check

संबंधित मुद्दे