VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Проблема в том, что просто sql запросом не обойтись. Причина в том, что у тебя насколько я понимаю, часть заменяемой информации изменяемая, а в mysql строковой функции замены, умеющей работать с регулярными выражениями нет.
Потому тебе надо сделать довольно простой модуль и повесить его например на хук showthread_complete.
PHP Code:
$filename = 'myrepl.txt';
if(!file_exists($filename)) { $sql = $vbulletin->db->query_read(" SELECT post.postid , post.pagetext FROM " . TABLE_PREFIX . "post As post WHERE post.pagetext REGEXP '[quote\s*?author=Geo\s*?link' ORDER BY post.dateline DESC LIMIT 10 ");
$replacesbits = array();
while ($result = $vbulletin->db->fetch_array($sql)) { $replacesbits[$result['postid']] = $result['pagetext']; }
В данном случае модуль будет стартовать при каждом посещении любой темы и последовательно, по 10 сообщений, будет проводить замены в тексте сообщений.
Что не будет сильно нагружать форум, но в то же время это не произойдет за один раз. Обработка будет срабатывать до тех пор пока с списке сообщений остануться сообщения с текстом
Если таких не будет, то будет создан файл myrepl.txt. В последующем если файл присутствует, то скрипт выполняться не будет. Тебе же надо просто смотреть, создан ли файл или нет, если создан отключать модуль.
Понимаю, что немного не красиво, но на мой взгляд эффективно. Особенно если сообщений много.
@Almazzz
Знаток
Join Date: Jul 2007
Posts: 224
Версия vB: 4.1.8
Reputation:
Knowing 110
Репутация в разделе: 66
0
Quote:
Originally Posted by alexey218
Geo - имя пользователя.
Тоесть " author=" заменмть на "="
Если я правильно понял - этого будет достаточно. Обратите внимание, что префиксы таблиц у Вас могут быть другими (выделенна красным в коде) и если Вам необходимо произвести замену где-то кроме таблицы постов, то названия соответствующих таблиц необходимо также перечислить в SQL-запросе.
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1706
Репутация в разделе: 1191
2
Almazzz, Этого было бы достаточно, если бы в тексте не было
HTML Code:
link=topic=5813.msg39886#msg39886 date=1265908276
@alexey218
Простоузер
Join Date: Apr 2008
Posts: 40
Версия vB: 4.1.x
Reputation:
Novice 0
Репутация в разделе: 0
0
SMak044, Огромно тебе спасибо!
Как я понял
В строчке
PHP Code:
UPDATE " . TABLE_PREFIX . "vb_post
Тужно было поменять на мой перефикс vb_
Всё сделал как ты написал, но выдаёт ошибку!
PHP Code:
Ошибка базы данных в vBulletin 4.1.12:
Invalid SQL:
SELECT post.postid
, post.pagetext
FROM vb_post As post
WHERE post.pagetext REGEXP '[quote\s*?author=Geo\s*?link'
ORDER BY post.dateline DESC
LIMIT 10;
Ошибка MySQL : Got error 'brackets ([ ]) not balanced' from regexp
Номер ошибки : 1139
Дата запроса : Saturday, May 19th 2012 @ 11:47:33 PM
Дата ошибки : Saturday, May 19th 2012 @ 11:47:33 PM
Скрипт : http://forum.ru/showthread.php?t=4173&page=52
Реферер : http://forum.ru/showthread.php?t=4173&page=2
IP адрес : 79.164.114.149
Имя пользователя : OAG
Имя класса : vB_Database
Версия MySQL : 5.5.15-log
Может я что то не так делаю.
И автор таких цитат не только
PHP Code:
author=Geo
Но и абслютно все пользователи
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,748
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20279
Репутация в разделе: 8443
1
а если в запросе экранировать квадратные скобки?
Code:
WHERE post.pagetext REGEXP '\[quote\s*?author=Geo\s*?link'
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1706
Репутация в разделе: 1191
0
Quote:
Originally Posted by alexey218
Всё сделал как ты написал, но выдаёт ошибку!
Quote:
Originally Posted by alexey218
Got error 'brackets ([ ]) not balanced' from regexp
Как и написал kerk, надо было заэкранировать скобку обратным слешом.
Quote:
Originally Posted by alexey218
Но и абслютно все пользователи
Надо было так и сказать, в общем то это не большая сложность
PHP Code:
$filename = 'myrepl.txt';
if(!file_exists($filename)) { $sql = $vbulletin->db->query_read(" SELECT post.postid , post.pagetext FROM " . TABLE_PREFIX . "post As post WHERE post.pagetext REGEXP '\[quote\s*?author=.*\s*?link' ORDER BY post.dateline DESC LIMIT 10 ");
$replacesbits = array();
while ($result = $vbulletin->db->fetch_array($sql)) { $replacesbits[$result['postid']] = $result['pagetext']; }
SELECT post.postid
, post.pagetext
FROM vb_post As post
WHERE post.pagetext REGEXP '\[quote\s*?author=.*\s*?link'
ORDER BY post.dateline DESC
LIMIT 10;
Ошибка MySQL : Got error 'brackets ([ ]) not balanced' from regexp
Номер ошибки : 1139
Дата запроса : Tuesday, May 22nd 2012 @ 02:14:36 AM
Дата ошибки : Tuesday, May 22nd 2012 @ 02:14:37 AM
Скрипт : http://forum.ru/showthread.php?t=7126&page=3
Реферер : http://forum.ru/forumdisplay.php?f=141
IP адрес : 79.164.114.149
Имя пользователя : OAG
Имя класса : vB_Database
Версия MySQL : 5.5.15-log