Проверка уникальности никнейма для 1.10.x
Как?
- Предыдущая
- 1
- 2
- 3
- Следующая
- Показаны 16-30 из 36
в /components/registration/frontend.php
стр 178
if($inDB->get_field('cms_users', "nickname='".$item['nickname']."'", 'id') > 0){ cmsCore::addSessionMessage("такой никнейм существует", 'error'); $errors = true; }
Если Ок, тогда пойдём Редактирование профиля править
Но прежде чем переходить к "Редактированию профиля", подскажите пожалуйста как сделать вывод сообщения о том что ник можно использовать или нельзя использовать под окошком ввода, так же как выводится сообщение под логином или паролем.
смотрите как они работают и делайте по аналогии. только обратите внимание, что для вывода результата под полем ввода логина или пароля, эти функции используют
<div id="logincheck"></div>
и
<div id="passcheck"></div>
которые прописаны в com_registration.tpl
вам, для никнейма, нужно будет создать свой "пустой" див, в который функция, в случае ошибки будет выводить сообщение
function checkNickname() { var nickname = $("#nickinput").attr('value'); var reg= /^[a-zA-Zа-яА-Я0-9_\-\.\"\ \@\*\si]{2,15}$/ ; if (reg.test(nickname)) { $("#nicknamecheck").load("/core/ajax/registration.php", {opt: "checknickname", data:nickname}); } else { if (nickname.length < 2){ $("#nicknamecheck").html('<span style="color:red">Минимальная длина = 2</span>'); } else { if (userlogin.length > 15){ $("#nicknamecheck").html('<span style="color:red">Максимальная длина = 15</span>'); } else { $("#nicknamecheck").html('<span style="color:red">Только латинские буквы, русские буквы и цифры</span>'); } } } }
<input name="nickname" id="nickinput" class="text-input" type="text" style="width:300px" value="{$item.nickname|escape:'html'}" /> <span class="regstar">*</span>
<div id="nicknamecheck"></div>
// проверяем есть ли такой пользователь $user_exist = $inDB->get_fields('cms_users', "(login LIKE '{$item['login']}' OR email LIKE '{$item['email']}') AND is_deleted = 0", 'id, login, email'); if($user_exist){ if($user_exist['login'] == $item['login']){ cmsCore::addSessionMessage($_LANG['LOGIN'].' "'.$item['login'].'" '.$_LANG['IS_BUSY'], 'error'); $errors = true; } else { cmsCore::addSessionMessage($_LANG['EMAIL_IS_BUSY'], 'error'); $errors = true; } }
Видите ли, я только пользователь icms, я не php-разработчик, поэтому не могу догадаться что там нужно дописать даже по аналогии.
return;
ВСТАВИТЬ:
if ($opt=='checknickname'){ $sql = "SELECT id, login FROM cms_users WHERE (nickname LIKE '$data') AND (is_deleted = 0) LIMIT 1"; $result = $inDB->query($sql); if($inDB->num_rows($result)==0){ echo '<span style="color:green">Вы можете использовать этот никнейм</span>'; } else { echo '<span style="color:red">Выбранный никнейм занят!</span>'; } }
в /core/ajax/registration.php в версии 1.10+ нет выражения return;ПЕРЕД
return;
ВСТАВИТЬ:
В последней строке — cmsCore::halt();
Вставлял и до и после этой строки ваш код, но ничего не изменилось, сообщение не выводится.
вставлять нужно ДО
но так как ДО всё равно не работает, то видимо придётся вам все файлы, которые правили, в архив и мне.
сильно много где сделаны изменения, поэтому оч сложно отследить ошибку.
instantcms.ru/users/files/download3238.html
1. Логинза. Решения нет пока и на уровне addSessionMessage. Кто-то правит дубли логинов и ников вручную, кто-то отключает логинзу.
2. Запрещённые админом ники. Сообщения addSessionMessage имеются. Не хватает быстрых js сообщений под окном ввода никнейма.
Ведь при данном хаке есть вероятность, что ДОпользователь сначала получит сообщение "Вы можете использовать этот никнейм", а после заполнения формы и нажатия на кнопку "Регистрация" система сообщит ему, что "Выбранный никнейм запрещен администратором!" Пока нашёл выход в том, чтобы или выводить сообщение "Вы можете использовать этот никнейм, если он не запрещён администратором", или не выводить никакого.
Пробовал разными способами (см. "Мартышка и очки") вызвать проверку BadNickname из таблицы cms_components, дабы с if-else вывести сообщение о запрете ника. Но или руки))), или вложенность, или всё вместе мешают.
Подскажите, как это можно сделать?
1. Логинза. Решения нет пока и на уровне addSessionMessage. Кто-то правит дубли логинов и ников вручную, кто-то отключает логинзу.
а вот эта самая актуальнейшая тема на данный момент.
Хоть бы в 2.0 эту траблу решили
- Предыдущая
- 1
- 2
- 3
- Следующая
- Показаны 16-30 из 36