Пишу модуль который проверяет есть ли пользователь в базе или нет.
Аналогично работает форма регистрации если вписать имя пользователя которое уже есть.
вот собственно код:
<?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'])));
}
}
?>
и вопрос как заставить это работать?
потому что вместо проверки мне этот модуль выдает после отправки имени, такую хрень:
Вложение | Размер |
---|---|
6372838473.png | 94.66 КБ |
Комментарии
может поможет, сам я не кодер - http://stackoverflow.com/questions/2803425/checking-whether-a-user-alrea...
попрбовал тот вариант что подсказал 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
вроде до кое чего допер
добалил в оглавление функции $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]
может кто подскажет как заставить функцию обращаться куда надо?
Было бы здорово параллельно с бездумным копированием кода понемногу учить php.
Не надо $account добавлять ни в какое "оглавление" функции. Этого объекта там нет, его никто ниоткуда не передает. Надо просто убрать condition, в котором используется объект $account.
Понимаешь. Я бы с радостью учил бы php! Но Я не собираюсь заниматься сайто строением. Мне просто нужно сделать сайт для оного проекта и все!
Я изучаю С++. И не могу не как лепить этот сайт, учить C++ и ещё в придачу php, и при все м при этом ещё и работать.
Прям пятничная ржака какая-то.
Во всяком случае благодарю пользователя 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]
Да занимайся чем тебе нравится. Темы через 2-3 тебе с такими вопросами просто перестанут помогать.