2010-10-04 10 views

risposta

11

È possibile utilizzare la funzione user_load. Vedi http://api.drupal.org/api/function/user_load/6

In particolare vedere http://api.drupal.org/api/function/user_load/6#comment-6439

Così si farebbe qualcosa di simile:

// $name is the user name 
$account = user_load(array('name' => check_plain($name))); 
// uid is now available as $account->uid 
+2

Per ottenere l'UID, questo è piuttosto un modo lento per farlo, in quanto coinvolge tutti i moduli che implementano hook_user creando una quantità sconosciuta di query. – googletorp

+0

@googletorp: D'accordo, questo è lento. Ma ho pensato che sarebbe stato più semplice per Hamid in questo modo. In pratica, 'node_load', che è simile nel concetto a' user_load', accade molto in Drupal, se non sbaglio, e tuttavia non influisce negativamente sulle prestazioni nella maggior parte dei casi. Quindi ho pensato che sarebbe una buona idea raccomandare 'user_load' –

+2

Quando lui stesso gli chiede se dovrebbe fare una query su db, sono sicuro che sarà in grado di farlo. Dopo tutto non è poi così complicato. – googletorp

0

Non c'è pronto funzione API fatta per questo, non che io sappia. Ma puoi crearne uno se hai bisogno di più posti. Dovrebbe essere abbastanza semplice e diretto per interrogare il db per l'uid.

5

La funzione di carico di utenti è molto pesante, userebbe più risorse e tornare più dati di quelli richiesti, ecco una piccola funzione piacevole per voi:

function get_uid($username) 
{  
    // Function that returns the uid based on the username given 
    $user = db_fetch_object(db_query("SELECT uid FROM users WHERE name=':username'", array(":username" => $username))); 

    return $user->uid; 
} 

Nota: Questo codice viene rivisto e l'ingresso è sfuggito , quindi il codice non è pericoloso in alcun modo.

+0

non mettere email su stackoverflow in questo formato. Sai che sarai spamato –

+1

wow che è una query molto pericolosa dato il suo input da un modulo ... google "injection attack" – ErichBSchulz

+0

hey grazie, era solo di fretta, aggiornando il codice ora –

9

In qualche modo non ho potuto fare il lavoro di query, ma ho trovato questo:

$user = user_load_by_name($username); 
$user_id = $user->uid; 

vedi: http://api.drupal.org/api/drupal/modules%21user%21user.module/function/user_load_by_name/7

+0

Il tuo rispondente è abbastanza buono perché è semplice e può essere applicato all'interno di una funzione di convalida personalizzata per l'accesso modulo (dove utente globale var non è ancora impostato) Grazie mille!+1 – Roger

2

È possibile ottenere tutte le informazioni su utente connesso con variabile globale $user.

Il codice è:

<?php 
global $user; 
$uid = $user->uid; 
echo $uid; 
?> 
+0

La soluzione è la migliore, ma quando è necessario eseguire questa operazione all'interno di una funzione di convalida personalizzata per il modulo di accesso, è necessario utilizzare la soluzione di Willem de Jong. +1 – Roger

Problemi correlati