Проверка уникальности никнейма для 1.10.x
Как?
Завтра всё будет!
Варианты есть всегда)))Есть вариант или как?...
Все три необходимых файла для хака
присутствуют как в 1.9, так и в 1.10. Кодировка, как в 1.10.
Требуется пройти указанным в блоге путём, протестировать и выложить здесь полученные результаты. Или, то что мешает тестированию, какие баги вылезли. КАК МОЖНО БОЛЕЕ ПОДРОБНО (крупные тексты, коды под спойлером). Сам я не кодер, даже рядом не стою. Но знаю, что если задают вопрос по конкретному коду, багу, то шансов получить ответ гораздо больше, чем по общей проблеме дублирования ников. Так баг за багом, шаг за шагом можно получить модифицированный под 1.10 хак.
А так же благодарность сообщества за труд и упорство.
Это не самый плохой и самый бюджетный вариант.
AlLar, ответ не столько тебе, сколько твоей реплике…
Но спасибо за идею, можно попробовать написать Sergey Platonov, хотя он уже 4 месяца не появлялся на сайте, может откликнется.
Только кодировку в com_registration.php и registration.php поменял на utf-8.
Строчку вставки в check.js поменял, чтобы не больше 15 символов:
if (nickname.length > 15){
function checkLogin(){ var userlogin = $("#logininput").attr('value'); var reg= /^[a-zA-Z0-9_]{2,15}$/ ; if (reg.test(userlogin)) { $("#logincheck").load("/core/ajax/registration.php", {opt: "checklogin", data:userlogin}); }else { if (userlogin.length < 2){ $("#logincheck").html('<span style="color:red">Минимальная длина = 2</span>'); } else { if (userlogin.length > 15){ $("#logincheck").html('<span style="color:red">Максимальная длина = 15</span>'); } else { $("#logincheck").html('<span style="color:red">Только латинские буквы и цифры</span>'); } } } } function checkPasswords(){ var pass1 = $("#pass1input").attr('value'); var pass2 = $("#pass2input").attr('value'); if (pass1 == pass2) { $('#passcheck').html('<span style="color:green">Пароли совпадают</span>'); } else { $('#passcheck').html('<span style="color:red">Пароли не совпадают!</span>'); } } // Проверка никнейма на корректность (русские и латинские буквы, длина) и уникальность. 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 (nickname.length > 15){ $("#nicknamecheck").html('<span style="color:red">Максимальная длина = 15</span>'); } else { $("#nicknamecheck").html('<span style="color:red">Русские и латинские буквы и цифры, и знаки в скобках: (-),(.),("),( ),(@),(*)</span>'); } } } }
<?php /******************************************************************************/ // // // InstantCMS v1.10 // // http://instantcms.ru/ // // // // written by InstantCMS Team, 2007-2012 // // produced by InstantSoft, (www.instantsoft.ru) // // // // LICENSED BY GNU/GPL v2 // // // /******************************************************************************/ include(PATH.'/core/ajax/ajax_core.php'); cmsCore::loadLanguage('components/registration'); $opt = cmsCore::request('opt', 'str', ''); $data = cmsCore::request('data', 'str', ''); if (!$data) { cmsCore::halt(); } cmsCore::halt('<span style="color:red">'.$_LANG['ERR_LOGIN'].'</span>'); } if ($opt=='checklogin'){ $sql = "SELECT id, login FROM cms_users WHERE LOWER(login) LIKE '".mb_strtolower($data)."' AND is_deleted = 0 LIMIT 1"; $result = $inDB->query($sql); if($inDB->num_rows($result)==0){ echo '<span style="color:green">'.$_LANG['YOU_LOGIN_COMPLETE'].'</span>'; } else { echo '<span style="color:red">'.$_LANG['LOGIN'].' "'.$data.'" '.$_LANG['IS_BUSY'].'</span>'; } } // Проверка никнейма на уникальность (русский текст с кодировкой в БД 1251) if ($opt=='checknickname'){ $sql = "SELECT id, nickname FROM cms_users WHERE (nickname LIKE '".iconv('UTF-8', 'Windows-1251', $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>'; } } cmsCore::halt(); ?>
<td valign="top" class=""> <input name="nickname" id="nickinput" class="text-input" type="text" style="width:294px; height:18px" value="{$item.nickname|escape:'html'}" onchange="checkNickname()" autocomplete="off" /> <span class="regstar">*</span> <div id="nicknamecheck"></div> </td>
1. Оно работает, но только в рекомендательном режиме. Т.е. запрет на ники при регистрации под окном ввода прописывается, но регистрации это нисколько не мешает. Попробовал в registration.php в:
if($inDB->num_rows($result)==0){ echo '<span style="color:green">Вы можете использовать этот никнейм</span>'; } else { echo '<span style="color:red">Выбранный никнейм занят!</span>'; }
cmsCore::halt('<span style="color:red">'ник занят'</span>')
2. Прописанные в хаке символы код хака принимает, но появляется стандартная надпись-предупреждение для логинов:
"Логин должен состоять только из латинских букв и цифр, не короче 2 и не более 15 символов!"
На неразрешённые символы появляется запись из хака.
3. Хак пропускает запрещённые ники, но срабатывет блокировка регистрации.