[Решено]Модуль проверки на наличие у пользователя регистрации на сайте.

Главные вкладки

Аватар пользователя ERET1K ERET1K 5 сентября 2013 в 15:24

Пишу модуль который проверяет есть ли пользователь в базе или нет.
Аналогично работает форма регистрации если вписать имя пользователя которое уже есть.
вот собственно код:

<?php
/**
*тестовый модуль
*
*/

/**
*функция создания формы
*
*/
function pay_activation_menu()
{
$items['pay'] = array( // адрес на сайте по которому будет доступна форма
'title' => t('Pay Activation'), //заголовок страницы
'page callback' => 'drupal_get_form', //имя функции, которая отрисует форму
'page arguments' => array('first_form'),
'access callback' => TRUE,
'type' => MENU_NORMAL_ITEM, //тип страницы
);

return $items;
}

/**
*форма
*
*/
function first_form()
{
$form['name'] = array(
'#title' => t('user name'),
'#type' => 'textfield',
'#description' => t('Please enter your User Name'),
);

$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Send'),
);

return $form;
}

/**
*проверка сещуствует ли данное имя в базе.
*данную функцию (точнее огрызок от неё) вытащил из модуля user там она находиться в 1219 строке, но почму она не работает здесь для меня загадка.
*/
function first_form_validate($form, $form_state)
{
if ((bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('name', db_like($form_state['values']['name']), 'LIKE')->range(0, 1)->execute()->fetchField())
{
form_set_error('name', t('The name %name is already taken.', array('%name' => $form_state['values']['name'])));
}
}
?>
и вопрос как заставить это работать?

потому что вместо проверки мне этот модуль выдает после отправки имени, такую хрень:

[img]http://www.drupal.ru/files/6372838473.png[/img]

ВложениеРазмер
Иконка изображения 6372838473.png94.66 КБ

Комментарии

Аватар пользователя ERET1K ERET1K 5 сентября 2013 в 16:30

попрбовал тот вариант что подсказал gedeon
всунул вместо последней функции
эту
<?php
function first_form_validate(&$form, &$form_state)
{
$name = $form_state['values']['name'];
if (!db_result(db_query("SELECT COUNT(*) FROM {users} WHERE name = '%s';", $name))) // это у меня строка 52
{
// User doesn't exist
form_set_error("name", $form_state['values']['name'] . "Database is not have your User Name");
}
}
?>

результат: ошибка на линии 52

Аватар пользователя ERET1K ERET1K 10 ноября 2015 в 11:49

вроде до кое чего допер
добалил в оглавление функции $account

<?php
function first_form_validate($form, &$form_state, $account)
{
if ((bool) db_select('users')->fields('users', array('uid'))->condition('uid', $account->uid, '<>')->condition('name', db_like($form_state['values']['name']), 'LIKE')->range(0, 1)->execute()->fetchField())
{
form_set_error('name', t('The name %name is already taken.', array('%name' => $form_state['values']['name'])));
}
}
?>

но теперь ошибка

[img]http://www.drupal.ru/files/73677282872.png[/img]

может кто подскажет как заставить функцию обращаться куда надо?

Аватар пользователя graker graker 5 сентября 2013 в 17:06

Было бы здорово параллельно с бездумным копированием кода понемногу учить php.

Не надо $account добавлять ни в какое "оглавление" функции. Этого объекта там нет, его никто ниоткуда не передает. Надо просто убрать condition, в котором используется объект $account.

Аватар пользователя ERET1K ERET1K 5 сентября 2013 в 20:10

graker wrote:
Было бы здорово параллельно с бездумным копированием кода понемногу учить php.

Не надо $account добавлять ни в какое "оглавление" функции. Этого объекта там нет, его никто ниоткуда не передает. Надо просто убрать condition, в котором используется объект $account.

Понимаешь. Я бы с радостью учил бы php! Но Я не собираюсь заниматься сайто строением. Мне просто нужно сделать сайт для оного проекта и все!
Я изучаю С++. И не могу не как лепить этот сайт, учить C++ и ещё в придачу php, и при все м при этом ещё и работать.

Аватар пользователя ERET1K ERET1K 10 ноября 2015 в 11:49

Во всяком случае благодарю пользователя graker за помощь
Первый кусок модуля Я сделал.

Функция проверки выглядит так:

<?php
function first_form_validate($form, &$form_state)
{
if (!((bool) db_select('users')->fields('users', array('uid'))->condition('name', db_like($form_state['values']['name']), 'LIKE')->range(0, 1)->execute()->fetchField()))
{
form_set_error('name', t('Database is not have your User Name.', array('%name' => $form_state['values']['name'])));
}
}
?>

Результат работы если имя неверное:
[img]http://www.drupal.ru/files/62367623.png[/img]

Аватар пользователя graker graker 5 сентября 2013 в 20:53

Quote:
Понимаешь. Я бы с радостью учил бы php! Но Я не собираюсь заниматься сайто строением. Мне просто нужно сделать сайт для оного проекта и все!
Я изучаю С++. И не могу не как лепить этот сайт, учить C++ и ещё в придачу php, и при все м при этом ещё и работать.

Да занимайся чем тебе нравится. Темы через 2-3 тебе с такими вопросами просто перестанут помогать.