Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查drupal中是否已经存在用户_Php_Drupal_Drupal Fapi_Drupal Alter - Fatal编程技术网

Php 检查drupal中是否已经存在用户

Php 检查drupal中是否已经存在用户,php,drupal,drupal-fapi,drupal-alter,Php,Drupal,Drupal Fapi,Drupal Alter,当用户输入登录信息并点击提交时,我想检查该用户是否已经存在。 因此,我有以下两个问题 1.当用户点击登录表单上的提交按钮时,需要实现哪个钩子。我需要用户输入的用户名。 2.如何检查drupal中是否已经存在用户 一些示例代码将非常感谢。 请帮忙 谢谢。这可以通过hook\u form\u alter完成: function module_(&$form, &$form_state, $form_id) { $user_login_forms = array('user_log

当用户输入登录信息并点击提交时,我想检查该用户是否已经存在。 因此,我有以下两个问题 1.当用户点击登录表单上的提交按钮时,需要实现哪个钩子。我需要用户输入的用户名。 2.如何检查drupal中是否已经存在用户

一些示例代码将非常感谢。 请帮忙


谢谢。

这可以通过
hook\u form\u alter
完成:

function module_(&$form, &$form_state, $form_id) {
  $user_login_forms = array('user_login', 'user_login_block');
  if (in_array($form_id, $user_login_forms)) {
    $form['#validate'][] = 'my_validate_function';
  }
}

function my_validate_function(&$form, &$form_state) {
  $name = $form_state['values']['name'];
  // Drupal 6:
  if (!db_result(db_query("SELECT COUNT(*) FROM {users} WHERE name = '%s';", $name))) {
    // User doesn't exist
  }
  // Drupal 7:
  if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name;", array(':name' => $name))->fetchField()) {
    // User doesn't exist
   }
}

在这种情况下,直接查询DB比使用
user\u load
更好,因为它也与其他模块挂钩。

在Drupal 7中,在验证函数中替换此选项:

if (!db_query("SELECT COUNT(*) FROM {users} WHERE name = :name", array(':name' => $name))->fetchField()) {
  // User doesn't exist
}

Drupal 7提供了一个按名称获取用户对象的函数:

$user = user_load_by_name($name);
if(!$user){
    // User doesn't exist
} 
else {
    // User exists
}

我意识到这已经快2年了,但是用户认证做得很好

$existing_user = user_authenticate($name,$password);
if($existing_user)
  // user exists
else
  // user doesn't exist

希望这对其他人有所帮助。

你可以试着从这两个模块中寻找灵感。

我忘了你可以用
hook\u form\u alter来实现这一点。
!荣誉删除我的答案。这不适用于Drupal 7。这是:
$result=db_query(“从{users}中选择COUNT(*),其中uid=:uid”,数组(':uid'=>$uid))->fetchField();如果($result==0){//User不存在,则返回FALSE;}返回TRUE这是一个繁重的解决方案,因为它加载整个用户对象,只是通过名称验证是否存在用户。此外,如果您正在加载用户,请不要使用名为
$user
的变量,因为它很容易与当前用户帐户的
全局$user
相混淆。如果您正在通过邮件搜索,您也可以使用
user\u load\u by\u mail
:这需要密码,这是一个错误的答案。如果用户输入用户名和密码,为什么这是一个错误的解决方案?密码没有显示,我只是在使用给定的密码。我错过什么了吗?