Проверка уникальности никнейма для 1.10.x

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

Как?

#1 8 февраля 2013 в 11:58
Для 1.10.x кто-нибудь занимался этим вопросом? На сайте уже куча народа с одинаковыми никнеймами, по моему это не совсем правильно. Может кто сделает хак или плугин для 1.10.x?
#2 8 февраля 2013 в 21:19
Актуально.
#3 8 февраля 2013 в 21:26
instantcms.ru/blogs/haki-patchi-moduli-plaginy-i-prochie-dorabotki-dvizhka/-hak-unikalnost-nikneima-dlja-versi-1-9.html если ссылка обрежется — скопируйте и перейдите, на 1,9 у меня прекрасно работало, на 1,10 не пробовал, может тоже пойдет
#4 9 февраля 2013 в 01:27
yrenzii, спасибо, но не подходит, в десятке другая структура /core/ajax/registration.php
#5 17 февраля 2013 в 18:36
Актуально.
#6 17 февраля 2013 в 18:38
Ойой, забыл.
Завтра всё будет!
#7 17 февраля 2013 в 18:41
smile
#8 17 февраля 2013 в 19:20
WALTERZ, ждем :)
#9 9 марта 2013 в 13:04
Тема актуальна. Уважаемый WALTERZ из-за нехватки времени пока не может помочь. Ребят, у кого есть время и желание, посмотрите пожалуйста что можно сделать. Нужна проверка никнейма на уникальность, желательно с учетом регистра.
#10 10 марта 2013 в 21:58
Актуально.
#11 11 марта 2013 в 14:14
Актуально.
#12 12 марта 2013 в 00:09
Так что? Есть вариант или как?..
#13 12 марта 2013 в 01:08

Есть вариант или как?...

AlLar
Варианты есть всегда)))
Все три необходимых файла для хака

instantcms.ru/blogs/haki-patchi-moduli-plaginy-i-prochie-dorabotki-dvizhka/-hak-unikalnost-nikneima-dlja-versi-1-9.html

yrenzii
присутствуют как в 1.9, так и в 1.10. Кодировка, как в 1.10.
Требуется пройти указанным в блоге путём, протестировать и выложить здесь полученные результаты. Или, то что мешает тестированию, какие баги вылезли. КАК МОЖНО БОЛЕЕ ПОДРОБНО (крупные тексты, коды под спойлером). Сам я не кодер, даже рядом не стою. Но знаю, что если задают вопрос по конкретному коду, багу, то шансов получить ответ гораздо больше, чем по общей проблеме дублирования ников. Так баг за багом, шаг за шагом можно получить модифицированный под 1.10 хак.
А так же благодарность сообщества за труд и упорство.
Это не самый плохой и самый бюджетный вариант.
AlLar, ответ не столько тебе, сколько твоей реплике…
#14 12 марта 2013 в 09:14
ded-pikto, а Вы сами пробовали сделать по этой инструкции для 1.10? Я пробовал, это не работает. Особенно не понятно как быть с users/frontend.php
Но спасибо за идею, можно попробовать написать Sergey Platonov, хотя он уже 4 месяца не появлялся на сайте, может откликнется.
#15 12 марта 2013 в 16:56
Попробовал сделать для регистрации. Практически ничего не менял.
Только кодировку в com_registration.php и registration.php поменял на utf-8.
Строчку вставки в check.js поменял, чтобы не больше 15 символов:
  1. if (nickname.length > 15){
  1. function checkLogin(){
  2. var userlogin = $("#logininput").attr('value');
  3. var reg= /^[a-zA-Z0-9_]{2,15}$/ ;
  4. if (reg.test(userlogin))
  5. {
  6. $("#logincheck").load("/core/ajax/registration.php", {opt: "checklogin", data:userlogin});
  7.  
  8. }else
  9. {
  10. if (userlogin.length < 2){
  11. $("#logincheck").html('<span style="color:red">Минимальная длина = 2</span>');
  12. } else {
  13. if (userlogin.length > 15){
  14. $("#logincheck").html('<span style="color:red">Максимальная длина = 15</span>');
  15. } else {
  16. $("#logincheck").html('<span style="color:red">Только латинские буквы и цифры</span>');
  17. }
  18. }
  19. }
  20. }
  21.  
  22. function checkPasswords(){
  23. var pass1 = $("#pass1input").attr('value');
  24. var pass2 = $("#pass2input").attr('value');
  25. if (pass1 == pass2) {
  26. $('#passcheck').html('<span style="color:green">Пароли совпадают</span>');
  27. } else {
  28. $('#passcheck').html('<span style="color:red">Пароли не совпадают!</span>');
  29. }
  30. }
  31. // Проверка никнейма на корректность (русские и латинские буквы, длина) и уникальность.
  32. function checkNickname(){
  33.  
  34. var nickname = $("#nickinput").attr('value');
  35. var reg= /^[a-zA-Zа-яА-Я0-9_\-\.\"\ \@\*\si]{2,15}$/ ;
  36. if (reg.test(nickname)) {
  37. $("#nicknamecheck").load("/core/ajax/registration.php", {opt: "checknickname", data:nickname});
  38. }
  39. else {
  40. if (nickname.length < 2){
  41. $("#nicknamecheck").html('<span style="color:red">Минимальная длина = 2</span>');
  42. } else {
  43. if (nickname.length > 15){
  44. $("#nicknamecheck").html('<span style="color:red">Максимальная длина = 15</span>');
  45. } else {
  46. $("#nicknamecheck").html('<span style="color:red">Русские и латинские буквы и цифры, и знаки в скобках: (-),(.),("),( ),(@),(*)</span>');
  47. }
  48. }
  49. }
  50. }
  1. <?php
  2. /******************************************************************************/
  3. // //
  4. // InstantCMS v1.10 //
  5. // http://instantcms.ru/ //
  6. // //
  7. // written by InstantCMS Team, 2007-2012 //
  8. // produced by InstantSoft, (www.instantsoft.ru) //
  9. // //
  10. // LICENSED BY GNU/GPL v2 //
  11. // //
  12. /******************************************************************************/
  13.  
  14. define('PATH', $_SERVER['DOCUMENT_ROOT']);
  15. include(PATH.'/core/ajax/ajax_core.php');
  16.  
  17. cmsCore::loadLanguage('components/registration');
  18.  
  19. $opt = cmsCore::request('opt', 'str', '');
  20. $data = cmsCore::request('data', 'str', '');
  21.  
  22. if (!$data) { cmsCore::halt(); }
  23.  
  24. if(mb_strlen($data)<2 ||
  25. mb_strlen($data)>15 ||
  26. is_numeric($data) ||
  27. !preg_match("/^([a-zA-Z0-9])+$/ui", $data)) {
  28.  
  29. cmsCore::halt('<span style="color:red">'.$_LANG['ERR_LOGIN'].'</span>');
  30.  
  31. }
  32.  
  33. if ($opt=='checklogin'){
  34.  
  35. $sql = "SELECT id, login FROM cms_users WHERE LOWER(login) LIKE '".mb_strtolower($data)."' AND is_deleted = 0 LIMIT 1";
  36. $result = $inDB->query($sql);
  37.  
  38. if($inDB->num_rows($result)==0){
  39. echo '<span style="color:green">'.$_LANG['YOU_LOGIN_COMPLETE'].'</span>';
  40. } else {
  41. echo '<span style="color:red">'.$_LANG['LOGIN'].' "'.$data.'" '.$_LANG['IS_BUSY'].'</span>';
  42. }
  43.  
  44. }
  45.  
  46. // Проверка никнейма на уникальность (русский текст с кодировкой в БД 1251)
  47. if ($opt=='checknickname'){
  48.  
  49. $sql = "SELECT id, nickname FROM cms_users WHERE (nickname LIKE '".iconv('UTF-8', 'Windows-1251', $data)."') AND (is_deleted = 0) LIMIT 1";
  50. $result = $inDB->query($sql);
  51.  
  52. if($inDB->num_rows($result)==0){
  53. echo '<span style="color:green">Вы можете использовать этот никнейм</span>';
  54. } else {
  55. echo '<span style="color:red">Выбранный никнейм занят!</span>';
  56. }
  57.  
  58. }
  59. cmsCore::halt();
  60.  
  61. ?>
  1. <td valign="top" class="">
  2. <input name="nickname" id="nickinput" class="text-input" type="text" style="width:294px; height:18px" value="{$item.nickname|escape:'html'}" onchange="checkNickname()" autocomplete="off" />
  3. <span class="regstar">*</span>
  4. <div id="nicknamecheck"></div>
  5. </td>
Результат:

1. Оно работает, но только в рекомендательном режиме. Т.е. запрет на ники при регистрации под окном ввода прописывается, но регистрации это нисколько не мешает. Попробовал в registration.php в:
  1. if($inDB->num_rows($result)==0){
  2. echo '<span style="color:green">Вы можете использовать этот никнейм</span>';
  3. } else {
  4. echo '<span style="color:red">Выбранный никнейм занят!</span>';
  5. }
вместо echo в else прописать:
  1. cmsCore::halt('<span style="color:red">'ник занят'</span>')
но система никак не отреагировала.

2. Прописанные в хаке символы код хака принимает, но появляется стандартная надпись-предупреждение для логинов:
"Логин должен состоять только из латинских букв и цифр, не короче 2 и не более 15 символов!"
На неразрешённые символы появляется запись из хака.

3. Хак пропускает запрещённые ники, но срабатывет блокировка регистрации.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.