কোনও প্রদত্ত আইডি দিয়ে কোনও ব্যবহারকারী উপস্থিত রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন


12

কোনও ব্যবহারকারীর আইডি বিদ্যমান কিনা তা পরীক্ষা করার কোনও উপায় আছে কি? আমি অনুরূপ একটি ফাংশন তৈরি করতে চাই username_exists()তবে ID উপস্থিত থাকে বা না থাকলে যা ফিরে আসে returns

উত্তর:


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
}

আমি কেবল এটির জন্য একটি নিজস্ব ফাংশন তৈরি করার চেয়ে এটিকে আরও বেশি পছন্দ করি। আমার ক্ষেত্রে আমাকে যাইহোক যাইহোক ব্যবহারের সাথে কাজ করতে হয়েছিল… +1
জিডিওয়াই

যদি ব্যবহারকারীর আইডির একটি অ্যারে থাকে এবং আপনার মুছে ফেলা / বিদ্যমান ব্যবহারকারীদের অপসারণের প্রয়োজন হয় তবে এটি অ্যারে_ফিল্টার কলব্যাক হিসাবে ব্যবহার করা যেতে পারে:$user_ids = array_filter( $user_ids, 'get_userdata' );
ওকসানা

5

এই ক্ষেত্রে আমি কোনও WP_User ফিরিয়ে দেওয়ার সময় get_userdata ($ user_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;
}

কেবল এফওয়াইআই 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) !== false। কলটি get_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;
ফুসিয়া

আমি শুধু ব্যবহারকারী বিদ্যমান বা না চেক করতে হবে এবং আমি মত ফাংশন কল যদি {// কি সামগ্রী ব্যবহারকারী বিদ্যমান যখন} (user_id_exists ($ আইডি)!)
আনন্দ

0

কমপক্ষে কয়েকজন হ্যাকার দ্বারা করা কিছু (আমি জানি কারণ আমি এটির জন্য কমপক্ষে একবার ভুক্তভোগী হয়েছি) এই জাতীয় URL ব্যবহার করে আপনার সাইটটিতে যেতে হবে

domain.com/?author=0

domain.com/?author=1

প্রভৃতি

একটি সফল প্রয়াসে সাইটের আউটপুটটিতে বৈধ ডেটা থাকবে, এছাড়াও ব্যবহারকারীর ডাকনামটি ওয়েবসাইটের সামগ্রীতে থাকবে এবং ডাক নামটিও সেখানে থাকতে পারে (পৃষ্ঠাগুলির আউটপুটের উপর নির্ভর করে) depending

একটি অবৈধ প্রয়াসে সাইটটি 404 পৃষ্ঠায় যাবে (বা কোনও পৃষ্ঠাতে যা ঘটতে সেট করা হয়েছে ত্রুটি খুঁজে পাওয়া যায়নি)।

সিআরএল ব্যবহার করে এমন স্ক্রিপ্ট তৈরি করা তুচ্ছ হতে পারে যা তুলনামূলকভাবে স্বল্প পরিমাণে এবং ব্যবহারকারীর নামের একটি তালিকাতে লেখক = 0 থেকে লেখক = 999 পর্যন্ত পরীক্ষা করতে পারে। আমার কোনও সাইটের জন্য হ্যাকারকে এটি করতে হয়েছিল এবং তারপরে জনপ্রিয় পাসওয়ার্ডগুলির অন্য একটি তালিকা ব্যবহার করে প্রতিটি ব্যবহারকারীর সাথে লগইন করার চেষ্টা করেছি।

আপনি যখন প্রথমবার কল্পনা করতে পারেন যে কেউ আপনার সমস্ত ব্যবহারকারী নাম খুব সহজেই খুঁজে পেতে পারে তা দেখতে কিছুটা ভীতিজনক। আমার পক্ষে ভাগ্যবান পাসওয়ার্ড সেদিন সেভ করেছিল, আমি নিশ্চিত যে সবাই এত ভাগ্যবান নয়।

আমি এটি কয়েকটি বড় নাম ওয়েবসাইটের বিরুদ্ধে পরীক্ষা করেছি (যারা এই পোস্টে নামহীন থাকবে) এবং মনে হচ্ছে এটি ঘটতে বাধা দেওয়ার জন্য এখনও কেউ কিছু করতে পারে না। আমি ব্যক্তিগতভাবে মনে করি এটি সুরক্ষা ঝুঁকি যে ওয়ার্ডপ্রেস বন্ধ হওয়া উচিত।

সম্পাদনা :

ভবিষ্যতে এখানে (২০১ early সালের শুরুর দিকে) আমি এখন জানি যে এমন কোনও পদ্ধতি / প্লাগইন রয়েছে যা এই ব্যবহারকারীর গণনা আক্রমণকে ব্যর্থ করতে পারে। এবং আমি এর সুরক্ষা ঝুঁকির বিষয়ে আমার অবস্থানটি আরও পরিবর্তন করেছি এবং আমি আর মনে করি না যে ওয়ার্ডপ্রেস এটি পরিবর্তন করা উচিত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.