Bir kullanıcının belirli bir kimlikle olup olmadığını kontrol etme


12

Bir kullanıcı kimliğinin olup olmadığını kontrol etmenin herhangi bir yolu var mı? Ben benzer bir işlev oluşturmak istiyorum username_exists()ama id varsa ya da değilse döndürür.

Yanıtlar:


2

Bu işlevi kullanın:

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

}

Kullanımı:

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

5
Ayrıca bu yöntemi de kullanabilirsiniz:$user = get_userdata( $user_id ); if ( $user == false ){ //user id does not exist } else { //user id exists
Daniel Patilea

31

Daniel'in şu anda doğru olarak seçilmiş olana göre çok daha basit çözümünü şiddetle tavsiye ederim :

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

Bunu sadece bunun için kendi işlevini yaratmaktan çok daha fazla seviyorum. Benim durumumda yine de kullanıcı verileri ile çalışmak zorunda kaldım… +1
GDY

Bir dizi kullanıcı kimliği varsa ve silinmiş / mevcut olmayan kullanıcıları kaldırmanız gerekiyorsa, bu $user_ids = array_filter( $user_ids, 'get_userdata' );
dizi_filter

5

Bu durumda kesinlikle bir WP_User döndürürken get_userdata ($ user_id) kullanmayacağım, bu yüzden sadece özel bir sorgudan daha açgözlü .

Sorgu hakkında, hazırlama yöntemini kullanmayı kabul ediyorum, ancak SELECT COUNT (*) , burada işe yaramayan tüm sütunları döndürdüğünüz anlamına gelir .

SELECT COUNT (ID) dengesiz kullanmanızı öneririm, bu şekilde yalnızca daha hızlı olacak tek bir sütun üzerinde çalışıyoruz.

Dönen ifadenin diğer yönüne göre, aşağıdaki gibi Üçlü Mantık ile daha okunabilir olacaktır:

1 <$ sayımı döndürür? doğru yanlış;

Özetle, ben bunu gibi olurdu:

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

Sadece FYI SELECT COUNT(*)ve SELECT COUNT(ID)her ikisi de tek bir sütun döndürür ... bir sayı.
James Cushing

2

Performans bir endişe kaynağıysa, şunları kullanın:

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

Aksi takdirde kullanın get_userdata($user_id) !== false. Çağrısı get_userdatayeni bir WP_User nesnesi oluşturmak ve başarı üzerine önbelleğe, yerine tek değerin veritabanından tüm satır alır.


0

Bu deneyin wpdb :: ready () için Eksik argüman 2 gibi bir uyarı göstermeyecek

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

Sadece yazabilirsinizreturn $count == 1;
fuxia

ben sadece kullanıcı var olup olmadığını kontrol etmek gerekir ve ne zaman fonksiyon gibi çağırmak gerekir: if (! user_id_exists ($ userId)) {// kullanıcı yokken malzeme yapmak}
Anand

0

En az birkaç hacker tarafından yapılan bir şey (bunun en az bir kez kurban oynadığımı biliyorum) bu tür bir URL kullanarak sitenizi ziyaret etmektir

domain.com/?author=0

domain.com/?author=1

vb.

Başarılı bir denemede sitenin çıktısı geçerli verilere sahip olacak, buna ek olarak kullanıcı adı web sitesinin içeriğinde olacak ve takma ad da olabilir (sayfa çıktısına bağlı olarak).

Geçersiz bir denemede site 404 sayfasına gider (veya sayfada bulunamayan bir hatada ne olursa olsun ayarlanır).

Göreceli olarak kısa sürede yazar = 0'dan yazar = 999'a kadar test edebilen ve kullanıcı adlarının bir listesini çıkarabilen cURL kullanarak bir komut dosyası oluşturmak oldukça önemsiz olabilir. Bir bilgisayar korsanı sitelerimden biri için bunu yaptım ve daha sonra popüler şifrelerin başka bir listesini kullanarak her kullanıcıya giriş yapmaya çalıştım.

Bunun ilk kez hayal edebileceğiniz gibi, birisinin tüm kullanıcı adlarınızı kolayca bulabileceğini görmek biraz korkutucu. Benim için şanslı o gün kurtarılan güçlü şifreler, eminim ki herkes çok şanslı değil.

Ben (kim bu yazıda isimsiz kalacak) bir çift büyük isim web siteleri karşı test ettik ve kimse henüz bu olmasını durdurmak için yapabileceği bir şey olabilir gibi görünüyor. Şahsen wordpress'in kapanması güvenlik riski olduğunu düşünüyorum.

DÜZENLE :

Gelecekte (2016 başı) artık bu kullanıcı numaralandırma saldırısını engelleyebilecek yöntemler / eklentiler olduğunu biliyorum. Bunun güvenlik riski konusundaki tutumumu daha da değiştirdim ve artık WordPress'in bunu değiştirmesi gerektiğini düşünmüyorum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.