Cara memeriksa apakah pengguna ada dengan id yang diberikan

12

Apakah ada cara untuk memeriksa apakah ada id pengguna? Saya ingin membuat fungsi yang mirip dengan username_exists()tetapi yang kembali jika id ada atau tidak.

Frankolin
sumber

Jawaban:

2

Gunakan fungsi ini:

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

}

Pemakaian:

if(user_id_exists(1)){ 
    //it does exists
} else {
    //it doesn't
}
Daniel Patilea
sumber
5
Anda juga dapat menggunakan metode ini juga:$user = get_userdata( $user_id ); if ( $user == false ){ //user id does not exist } else { //user id exists
Daniel Patilea
31

Saya akan sangat merekomendasikan solusi Daniel yang jauh lebih sederhana daripada yang saat ini dipilih sebagai benar:

$user = get_userdata( $user_id );
if ( $user === false ) {
    //user id does not exist
} else {
    //user id exists
}
Jani Uusitalo
sumber
Saya suka yang ini lebih dari sekedar membuat fungsi sendiri hanya untuk ini. Dalam kasus saya, saya harus bekerja dengan data pengguna jadi ... +1
GDY
Jika ada larik ID pengguna dan Anda perlu menghapus pengguna yang dihapus / tidak ada, ini dapat digunakan sebagai panggilan balik array_filter:$user_ids = array_filter( $user_ids, 'get_userdata' );
Oksana Romaniv
5

Dalam hal ini saya pasti tidak akan menggunakan get_userdata ($ user_id) ketika sedang mengembalikan WP_User, jadi ini lebih serakah daripada sekadar permintaan khusus.

Tentang kueri, saya setuju menggunakan metode persiapan, tetapi SELECT COUNT (*) berarti Anda mengembalikan semua kolom , yang tidak berguna di sini.

Saya akan merekomendasikan menggunakan SELECT COUNT (ID) goyah, dengan cara ini kami hanya bekerja pada satu kolom yang akan lebih cepat.

Pada aspek lain untuk pernyataan kembali, itu akan lebih mudah dibaca dengan Logika Ternary seperti:

kembalikan 1 <$ hitung? benar salah;

Singkatnya, saya akan mengimplementasikannya seperti:

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;
}
Maxime Culea
sumber
Hanya FYI SELECT COUNT(*)dan SELECT COUNT(ID)keduanya mengembalikan satu kolom ... hitungan.
James Cushing
2

Jika kinerja menjadi masalah, gunakan:

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

Kalau tidak, gunakan get_userdata($user_id) !== false. Panggilan untuk get_userdataakan mengambil seluruh baris dari basis data alih-alih nilai tunggal, membuat objek WP_User baru dan menyimpannya dengan sukses.

le_m
sumber
0

Coba Ini tidak akan Menampilkan Anda peringatan seperti Hilang argumen 2 untuk wpdb :: prep ()

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; }
}
Anand
sumber
Anda bisa menulisreturn $count == 1;
fuxia
saya hanya perlu memeriksa apakah ada pengguna atau tidak dan ketika saya memanggil fungsi seperti: if (! user_id_exists ($ userId)) {// lakukan hal-hal ketika pengguna tidak ada}
Anand
0

Sesuatu yang dilakukan oleh setidaknya beberapa peretas (saya tahu karena saya bermain sebagai korban ini setidaknya sekali) adalah mengunjungi situs Anda menggunakan jenis URL ini

domain.com/?author=0

domain.com/?author=1

dll.

Pada upaya yang berhasil, output situs akan memiliki data yang valid, selain itu nama pengguna pengguna akan ada di konten situs web dan nama julukannya mungkin ada di sana (tergantung pada output halaman).

Pada upaya yang tidak valid, situs akan menuju ke halaman 404 (atau apa pun yang diatur terjadi pada halaman yang tidak ditemukan kesalahan).

Ini mungkin agak sepele untuk membangun skrip menggunakan CURL yang dapat menguji dari katakanlah penulis = 0 hingga penulis = 999 dalam jumlah waktu yang relatif singkat dan menghasilkan daftar nama pengguna. Saya menyuruh seorang peretas melakukan ini untuk salah satu situs saya dan kemudian mencoba masuk ke setiap pengguna dengan menggunakan daftar kata sandi populer lainnya.

Seperti yang dapat Anda bayangkan saat pertama kali ini terjadi, agak menakutkan untuk melihat bahwa seseorang dapat dengan mudah mengetahui semua nama pengguna Anda. Beruntung bagi saya kata sandi yang kuat disimpan pada hari itu, saya yakin tidak semua orang sangat beruntung.

Saya telah menguji ini terhadap beberapa situs web dengan nama besar (yang akan tetap tidak disebutkan namanya dalam posting ini) dan tampaknya mungkin tidak ada yang bisa dilakukan oleh siapa pun untuk menghentikan hal ini terjadi. Saya pribadi berpikir itu adalah risiko keamanan yang harus ditutup oleh wordpress.

EDIT :

Di sini di masa depan (awal 2016) saya sekarang tahu bahwa ada metode / plugin yang dapat menggagalkan serangan penghitungan pengguna ini. Dan saya selanjutnya telah mengubah sikap saya tentang risiko keamanan ini dan saya tidak lagi berpikir WordPress harus mengubah ini.

KnightHawk
sumber