VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Вот потребовалось найти всех пользователей у которых заполнено определенное поле профиля (В данном случае, адрес для Деда Мороза), надо вывести весь список пользователей, если у них это поле заполнено. Если поставить * не ищет. Нашел вариант - ставлю букву "а", если она встречается в адресе - отображаются. Может как-то можно сделать такой хак?
Не канает. С пробелом ищет всех юзеров форума сразу.
@StenLi
На доске почёта Пожизненный блэк
Join Date: Aug 2008
Награды в конкурсах:
Posts: 2,729
Версия vB: 3.6.x
Reputation:
Expert 1991
Репутация в разделе: 636
1
Давай разберем, я так понимаю ты имеешь ввиду страницу: admincp/user.php?do=modify
Оттуда после заполнения необходимых поле отправляется запрос к: admincp/user.php?do=find
Нужное поле передается POST запросом в виде: user[NAME]. *NAME - произвольный фейилд
В скрипте admincp/user.php оно обрабатывается строкой:
sertextfield AS usertextfield ON(usertextfield.userid = user.userid) WHERE $condition ORDER BY " . $db->escape_string($vbulletin->GPC['orderby']) . " " . $db->escape_string($vbulletin->GPC['direction']) . " LIMIT " . $vbulletin->GPC['limitstart'] . ", " . $vbulletin->GPC['limitnumber']
Тобишь все возможные условия хранятся в переменной $condition.
Наша цель, вывести пользователей у которых этот самый user[NAME] заполнен, то есть в запрос мы должны передавать
PHP Code:
[B]NAME[/B]!=''
Чтобы это нам сделать, мы идем в файл: /includes/adminfunctions_user.php
Видим функцию fetch_profilefield_sql_condition(), она прописана в файле includes/adminfunctions_profilefield.php
Выбираем наш тип поля, тобишь $profilefield['type'] должно быть равным input
Строка 359:
PHP Code:
$condition = " AND $varname LIKE '%" . $vbulletin->db->escape_string_like(htmlspecialchars_uni(trim($value))) . '%\' ';
Меняем на
PHP Code:
if($varname == 'NAME'){ $condition = " AND $varname !='' "; } else{ $condition = " AND $varname LIKE '%" . $vbulletin->db->escape_string_like(htmlspecialchars_uni(trim($value))) . '%\' '; }
Сохраняем, идем в админку, и вуяля!
PS. На свой страх и риск.
С Ув. StenLi
Удачи!
PSS. А можно вообще заорать и сделать селект меню с пунктами типа =, !+, LIKE and etc, как реализовано в phpmyadmin, с обработчиком и вывести в шаб поиска.
StenLi, правильно ли я понял, что везде где NAME надо заменить на fieldX? (x-номер поля)?
Сделал так, искал по полю через пробел, не работает. Нужно сделать так, чтобы, если, например, в это поле звездочку * добавляешь - искало все заполненные адреса только по этому полю.
Я пока "допёр" до идеи искать не по букве "а", а по точке . Точка то уже в 99% случаев встречается в почтовом адресе. Хотя бы так.
@StenLi
На доске почёта Пожизненный блэк
Join Date: Aug 2008
Награды в конкурсах:
Posts: 2,729
Версия vB: 3.6.x
Reputation:
Expert 1991
Репутация в разделе: 636
0
Quote:
Originally Posted by sejd
правильно ли я понял, что везде где NAME надо заменить на fieldX? (x-номер поля)?
Да, верно!
Quote:
Originally Posted by sejd
Я пока "допёр" до идеи искать не по букве "а", а по точке . Точка то уже в 99% случаев встречается в почтовом адресе. Хотя бы так.