यदि कोई उपयोगकर्ता किसी दिए गए आईडी से मौजूद है, तो कैसे जांचें


12

क्या यह जांचने का कोई तरीका है कि उपयोगकर्ता आईडी मौजूद है या नहीं? मैं इसी तरह का एक फंक्शन बनाना चाहता हूं, username_exists()लेकिन जो आईडी मौजूद है या नहीं, वह लौटाता है।

जवाबों:


2

इस फ़ंक्शन का उपयोग करें:

function user_id_exists($user){

    global $wpdb;

    $count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users WHERE ID = %d", $user));

    if($count == 1){ return true; }else{ return false; }

}

उपयोग:

if(user_id_exists(1)){ 
    //it does exists
} else {
    //it doesn't
}

5
यह भी आप इस विधि का उपयोग कर सकते हैं:$user = get_userdata( $user_id ); if ( $user == false ){ //user id does not exist } else { //user id exists
डैनियल पाटिलिया

31

मैं अत्यधिक वर्तमान में सही के रूप में चयनित डैनियल के बहुत सरल समाधान की सिफारिश करूंगा :

$user = get_userdata( $user_id );
if ( $user === false ) {
    //user id does not exist
} else {
    //user id exists
}

मुझे इसके लिए केवल एक फंक्शन बनाने से ज्यादा यह पसंद है। मेरे मामले में मुझे वैसे भी userdata के साथ काम करना था ... +1
GDY

यदि उपयोगकर्ता आईडी की एक सरणी है और आपको हटाए गए / मौजूदा उपयोगकर्ताओं को निकालने की आवश्यकता नहीं है, तो इसे array_filter callback के रूप में उपयोग किया जा सकता है:$user_ids = array_filter( $user_ids, 'get_userdata' );
Oksana Romaniv

5

इस मामले में, मैं निश्चित रूप से get_userdata ($ user_id) का उपयोग नहीं करूंगा, जबकि यह WP_User लौटा रहा है, इसलिए यह सिर्फ एक कस्टम क्वेरी से अधिक लालची है।

क्वेरी के बारे में, मैं तैयार विधि का उपयोग करने से सहमत हूं, लेकिन SELECT COUNT (*) का अर्थ है कि आप सभी कॉलम लौटा रहे हैं , जो यहां बेकार है।

मैं SELECT COUNT (ID) का उपयोग नहीं करने की सलाह दूंगा, इस तरह से हम केवल एक ही कॉलम पर काम कर रहे हैं जो कि तेज होगा।

रिटर्निंग स्टेटमेंट के अन्य पहलू पर, यह टर्नरी लॉजिक के साथ अधिक पठनीय होगा:

वापसी 1 <$ गिनती? सही गलत;

संक्षेप में, मैं इसे लागू करूँगा:

function user_id_exists( $user_id ) {
    global $wpdb;
    $count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(ID) FROM $wpdb->users WHERE ID = %d", $user_id ) );
    return empty( $count ) || 1 > $count ? false : true;
}

सिर्फ FYI करें SELECT COUNT(*)और SELECT COUNT(ID)दोनों एक ही कॉलम ... एक गिनती।
जेम्स कुशिंग

2

यदि प्रदर्शन एक चिंता का विषय है, तो उपयोग करें:

function user_id_exists($user_id) {
    global $wpdb;

    // Check cache:
    if (wp_cache_get($user_id, 'users')) return true;

    // Check database:
    if ($wpdb->get_var($wpdb->prepare("SELECT EXISTS (SELECT 1 FROM $wpdb->users WHERE ID = %d)", $user_id))) return true;

    return false;
}

अन्यथा, उपयोग करें get_userdata($user_id) !== falseget_userdataएकल मान के बजाय डेटाबेस से पूरी पंक्ति को पुनः प्राप्त करने के लिए कॉल , एक नया WP_User ऑब्जेक्ट बनाता है और इसे सफलता पर कैश करता है।


0

यह आज़माएँ आपको wpdb के लिए मिसिंग तर्क 2 जैसी चेतावनी नहीं दिखाएगा :: तैयार ()

function user_id_exists($user_id){
    global $wpdb;
    $count = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->users WHERE ID = %d",$user_id));
    if($count == 1){ return true; }else{ return false; }
}

तुम बस लिख सकते हैंreturn $count == 1;
FUXIA

मुझे केवल उपयोगकर्ता की मौजूदगी की जाँच करने की आवश्यकता है कि मैं मौजूद हूं या नहीं और जब मैं फ़ंक्शन को कॉल करता हूं, जैसे: if (user_id_exists ($ userId)) {// सामान तब करें जब उपयोगकर्ता मौजूद न हो}
आनंद

0

ऐसा कुछ जो कम से कम कुछ हैकर्स द्वारा किया जाता है (मुझे पता है क्योंकि मैंने कम से कम एक बार इसका शिकार किया था) इस प्रकार के URL का उपयोग करके आपकी साइट पर जाना है

domain.com/?author=0

domain.com/?author=1

आदि।

एक सफल प्रयास में साइट के आउटपुट में वैध डेटा होगा, इसके अलावा उपयोगकर्ता का नाम वेबसाइट की सामग्री में होगा और उपनाम वहाँ भी हो सकता है (पेज आउटपुट के आधार पर)।

एक अवैध प्रयास पर साइट 404 पृष्ठ पर जाएगी (या जो भी पृष्ठ पर होने वाली त्रुटि के लिए निर्धारित नहीं है)।

यह बल्कि CURL का उपयोग करके एक स्क्रिप्ट बनाने के लिए तुच्छ हो सकता है जो लेखक से 0 = लेखक तक कह सकता है = अपेक्षाकृत कम समय में लेखक = 999 तक और उपयोगकर्ता नाम की एक सूची का उत्पादन करता है। मैंने अपनी साइटों में से एक के लिए एक हैकर ऐसा किया था और फिर लोकप्रिय पासवर्ड की दूसरी सूची का उपयोग करके प्रत्येक उपयोगकर्ता को लॉगिन करने का प्रयास किया।

जैसा कि आप पहली बार कल्पना कर सकते हैं कि यह थोड़ा डरावना है यह देखने के लिए कि कोई आपके सभी उपयोगकर्ता नामों को आसानी से जान सकता है। मेरे लिए भाग्यशाली पासवर्ड उस दिन बचाए गए, मुझे यकीन है कि हर कोई इतना भाग्यशाली नहीं है।

मैंने कुछ बड़े नाम वाली वेबसाइटों के खिलाफ इसका परीक्षण किया है (जो इस पद पर बिना नाम के रहेंगे) और ऐसा लगता है कि ऐसा होने से रोकने के लिए अभी तक कोई कुछ नहीं कर सकता है। मुझे व्यक्तिगत रूप से लगता है कि यह सुरक्षा जोखिम है जो वर्डप्रेस को बंद करना चाहिए।

संपादित करें :

यहां भविष्य में (2016 की शुरुआत में) अब मुझे पता है कि ऐसे तरीके / प्लगइन्स हैं जो इस यूजर एन्यूमरेशन अटैक को विफल कर सकते हैं। और मैंने आगे इस के सुरक्षा जोखिम पर अपना रुख बदल दिया है और मुझे नहीं लगता कि वर्डप्रेस को इसे बदलना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.