Задать пароль пользователе в ручную. Новый пароль создаеться но валидация проходит только со старым.
Здравствуйте!
Что может зы проблема.
Редактирую профиль пользователя через самописную форму.
Когда обновляю пароль юзера. Следующим методом.
if(empty($_POST['m_uep_pas'])==false && empty($_POST['m_uep_pasr'])==false){ db_query("UPDATE users SET name = '%s', pass = '%s', mail = '%s' WHERE users.uid=%d ;", $_POST['m_uep_name'], md5($_POST['m_uep_pas']), $_POST['m_uep_mail'], $user->uid ); }
Новый пароль в базу записывается(в МД5). Но когда делаю логофф возращаеться(в таблицу "users") старый пароль что не так?
Похоже эта процедура выполняется стандартной функцией друпал?

Коментарі
Сделал так...
Но метод работает как то не стабильно.
Может быть есть другие методы?
неправильно вообще в самом начале - Зачем делать через самописную форму?
Можно стандартную форму вывести в любом месте, добавить к ней поля и изменить по разному
$_POST['m_uep_pas'] - отсюда ничего брать не нужно. Если вы все делаете через FORM API, то и результаты заполнения формы нужно драть из $form_state
Вот есть пошаговая инструкция работы с формами
Так же в Друпале есть стандарты кодирования, например, FALSE/TRUE/NULL - пишутся заглавными буквами.
Этот участок кода
Лучше писать так: (возле равно пробелы, а скобка на одной строке с операторами, пробел после if)
if (empty($_POST['m_uep_mail']) == FALSE) {Работать будут оба варианты, но единый формат легче понимаем сообществом
Зачем делать через самописную форму?
Ну вот появилась такая задача.
Форма "рисуется" не через форм API а выводиться в шаблоне.
через(hook_menu->>>return theme()) и так далее.
Там на форме около 30 полей. Большинство из них массивы.
Не ужели не как нельзя "припаять" пароль пользователю стандартным методом?
Или же перехватывать мою форма в form_alter() а потом добавлять поля ввода пароля?
ну так можно в любом месте выводить форму не шаблоном, а именно FORM API, это не просто конструктор, это еще и валидатор и проверка "чего там пользователи отправили" и в тоже время богатый выбор ХУКОВ
В вашем случае можно без Хук_алтер, можно вызвать конструктор формы - http://api.drupal.ru/api/function/user_register/6 он вернет базовую форму, далее вы добавляете нужные поля. добавляете свои обработчики и у вас готовая "правильная" форма
И кстати форма обрабатывается через hook_menu()+(POST+FILES)
Задача такая. Программно поменять ник и/или пароль пользователю.
так зарегистрировать или обновить?
Для обновить есть другая форма, которую можно подстроить под себя выше указанным способом.
И для поменять ник нужно еще проверить если у пользователя права менять ник "change own username" или если это админ, то "administer users"
1. Будь-яку форму необхідно створювати через FormAPI
2. Виводити в шаблоні також можна треба через drupal_get_form(). Якщо треба пишете для форми ф-ії темізаці. Але форма створюється через FormAPI
3. Що таке поле масив? О_о Поле є поле. В структурі FormAPI всі елементи дійсно, як масиви, але наскільки я розумію, Ви не використовуєте FormAPI.
4. Форма має обраблятись через функцію-обробник, а не через hook_menu
Рекомендую почитати Ван Дюка і доки на дру.орг. Просто Ви хочете реалізувати задачу не знаючи API, а це нереально.
Так задача проста обновление полей в таблице users
Вы установили "монстра" CMS и не пользуетесь теми мегабайтами кода которые постоянно выкушивают память сервера и нагружают мускул - это крайне неправильно!!!
FORM API и стандартные hook/validate/submit - это единоверное решение в Друпале!
Drupal делает откат моих изменений. Как это устранить?
Друпал не умеет делать откат :)
У него всего одна таблица с пользователями если там что-то изменить, то друпал не будет знать старое значение т.к. у него нет бекапов или архивов.
Возможно у вас запись не прошла успешно
Нет. Все таки делает.
Все вроде бы проблема решена.
Через
load_user()
save_user()
нет все таки не делает :)
А не делает для текущего пользователя из объекта global $user?
Или свободно загружаемого (user_load($my_user));?
Потому что я редактирую текущего пользователя global $user
Новый пароль в базу записывается(в МД5).
Но когда делаю логофф возращаеться(в таблицу "users") старый пароль что не так?
На основе чего сделаны 2 этих утверждения? Вы смотрели запись в БД?
И у Вас таблицы в БД - без префикса лежат? //в запросах все же лучше использовать {#table_name#} вместо #table_name#
Вы смотрели запись в БД?
Конечно.
Т.е. я правильно понимаю, что последовательность действий такова:
1. Вы открыли ПХПМайАдмин - и проверили, что хеш пароля в БД - старый.
2. Сделали апдейт пароля в скрипте.
3. Обновили ПХПМайАдмин - и хеш пароля стал другим.
4. Логофф с сайта
5. В ПХПМайАдмин хеш пароля вернулся на первоначальный.
//Естественно, вместо ПХПМайАдмин может выступать любой другой клиент к БД.
Просто если это все так, и Вы ненароком не правите другую БД, то... поведение очень странное. Попробуйте тогда взять чистую инсталляцию Друпала без модулей и добавить туда Ваш модуль и посмотреть как будет вести себя такая сборка.
Soul Вы все правильно поняли.