Existe-t-il un moyen de vérifier si un ID utilisateur existe? Je veux créer une fonction similaire à username_exists()
mais qui retourne si l'id existe ou non.
12
Utilisez cette fonction:
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; }
}
Usage:
if(user_id_exists(1)){
//it does exists
} else {
//it doesn't
}
$user = get_userdata( $user_id ); if ( $user == false ){ //user id does not exist } else { //user id exists
Je recommanderais fortement la solution beaucoup plus simple de Daniel par rapport à celle actuellement sélectionnée comme correcte:
la source
$user_ids = array_filter( $user_ids, 'get_userdata' );
Dans ce cas, je n'utiliserai certainement pas get_userdata ($ user_id) pendant qu'il renvoie un WP_User, il est donc plus gourmand qu'une simple requête personnalisée.
Concernant la requête, j'accepte d'utiliser la méthode prepare, mais le SELECT COUNT (*) signifie que vous renvoyez toutes les colonnes , ce qui est inutile ici.
Je recommanderais d'utiliser SELECT COUNT (ID) unstead, de cette façon, nous ne travaillons que sur une seule colonne qui sera plus rapide.
Sur un autre aspect de la déclaration de retour, elle serait plus lisible avec une logique ternaire comme:
Pour résumer, je l'aurais implémenté comme:
la source
SELECT COUNT(*)
et lesSELECT COUNT(ID)
deux renvoient une seule colonne ... un compte.Si les performances sont un problème, utilisez:
Sinon, utilisez
get_userdata($user_id) !== false
. L'appel àget_userdata
récupérera une ligne entière de la base de données au lieu d'une seule valeur, créera un nouvel objet WP_User et le mettra en cache en cas de succès.la source
Essayez ceci ne vous montrera pas l'avertissement comme l'argument manquant 2 pour wpdb :: prepare ()
la source
return $count == 1;
Quelque chose qui est fait par au moins quelques pirates (je le sais parce que j'en ai été victime au moins une fois) est de visiter votre site en utilisant ce type d'URL
etc.
En cas de succès, la sortie du site aura des données valides, en plus le nom d'utilisateur sera dans le contenu du site Web et le surnom peut également être là (selon la sortie des pages).
En cas de tentative non valide, le site ira à la page 404 (ou tout ce qui devrait se produire sur une page introuvable).
Il peut être assez trivial de créer un script en utilisant cURL qui peut tester de say author = 0 à author = 999 en un temps relativement court et produire une liste de noms d'utilisateurs. J'ai demandé à un pirate de le faire pour l'un de mes sites, puis d'essayer de me connecter à chaque utilisateur en utilisant une autre liste de mots de passe populaires.
Comme vous pouvez l'imaginer la première fois que cela se produit, il est un peu effrayant de voir que quelqu'un peut facilement trouver tous vos noms d'utilisateur. Heureusement pour moi, des mots de passe forts ont sauvé la journée, je suis sûr que tout le monde n'a pas autant de chance.
J'ai testé cela contre quelques sites Web de grands noms (qui resteront sans nom dans ce post) et il semble que personne ne puisse rien faire pour empêcher cela de se produire. Je pense personnellement que la fermeture de wordpress constitue un risque pour la sécurité.
MODIFIER :
Ici à l'avenir (début 2016), je sais maintenant qu'il existe des méthodes / plugins qui peuvent contrecarrer cette attaque d'énumération des utilisateurs. Et j'ai encore changé ma position sur le risque de sécurité de cela et je ne pense plus que WordPress devrait changer cela.
la source