VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
Поделюсь своим способом комментирования на форуме (3.8.2), который работает уже несколько лет. Задача была с одной стороны дать возможность комментировать каждую страницу сайта, а с другой - оживить форум. На один форум можно отправлять людей со многих сайтов.
Думаю, гуру скажут, что это сделано грубо и не по-европейски, поскольку создается тема прямо в базе, без использования штатных средств форума. Но я хилый специалист в этом ВБ, а попытка смотреть его код сразу вгоняет в депрессию. Разобраться в структуре базы оказалось куда проще.
Принцип работы: внизу каждой статьи сайта находится кнопка Обсудить на форуме, которая направляет нас на следующий скрипт, передавая в скрытом поле (если там формочка) или в параметре ссылки тему комментируемой статьи.
(Эта самая тема попадает в параметр дж.скриптом в момент отправки из тэга h1. Хотя с тем же успехом можно писать туда заранее при формировании страницы cms, если передаем параметром ссылки, то кодировать).
Скрипт смотрит в отдельной табличке базы, были ли уже переходы с этой страницы, если были, то направляет пользователя в нужную тему форума. Если не были, то создает тему со ссылкой на статью, и помещает в нее юзера.
Для учета тем с комментами используется табличка
PHP Code:
CREATE TABLE `toforum` ( `pid` int(10) NOT NULL auto_increment, `url` varchar(255) NOT NULL, `title` varchar(255) NOT NULL, `thread` int(10) NOT NULL, `num` int(10) NOT NULL, PRIMARY KEY (`pid`), KEY `url` (`url`), KEY `title` (`title`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 ;
num - для статистики, число переходивших на форум с этой страницы.
Ну и сам код:
PHP Code:
<?php include ('includ.php'); // подключение к базе и т.п.
$nam='Автор Тем'; $uid=111; // его ид не форуме $forum_url='урл';
$purl=strtolower(@$_SERVER['HTTP_REFERER']); //надо+ здесь проверка урла, что пришел с разрешенных нами сайтов, //надо+ а также чистка лишних параметров (чтоб от них не создавались лишние темы) //надо+ При любой неправильности $purl=0;
$tema=$_POST['titl']; // из скрытого поля формы, или GET из параметра ссылки и расшифровать //надо+ Чистим тему для безопасности и красивости
$tema=substr($tema,0,78); if(!$purl or strlen($tema)<2) { // header ('location: '.$forum_url.'forum/forumdisplay.php?f=11'); // в раздел обсуждений exit; }
$tim=time();
$sql="select * from toforum where url='".$purl."' limit 1"; //ищем, есть ли уже такая тема $r=mysql_query($sql) or die (mysql_error()); if ($f=@mysql_fetch_array($r)) { // есть. добавляем клик и отправляем в тему $t=$f['thread']; $toforum=$forum_url.'forum/showthread.php?t='.$t; $sql="update toforum set num=num+1 where pid=".$f['pid']; mysql_query($sql) or die (mysql_error()); } else { // не нашли. добавляем тему в форум, пишем в тофорум, отправляем в нов сообщение
$sql="select count(*) as n from toforum where title like '".$tema."%'"; //ищем, есть ли похожие темы $r=mysql_query($sql) or die (mysql_error()); $f=mysql_fetch_array($r); $n=$f['n']; if ($n>0) { // есть похожие. добавляем номер к теме -- это не совсем корректно, но для практики подоходит $tema=$tema." - " . ($n+1); }
$sqlt="insert into VB_thread (title,forumid,open,replycount,hiddencount,deletedcount,postusername,postuserid,dateline,". "iconid,sticky,votenum,votetotal,attach) ". "values ('".$tema . "',11,1,0,0,0,'" . $nam . "'," . $uid . "," . $tim . ",0,0,0,0,0)"; // здесь 11 - ид раздела mysql_query($sqlt) or die (mysql_error()); $t=mysql_insert_id();
$sqlp="insert into VB_post (threadid,parentid,username,userid,title,dateline,pagetext,allowsmilie,showsignature,ipaddress,iconid,". "visible,attach,infraction,reportthreadid) \n". "values (".$t.",0,'".$nam."',".$uid.",'" . $tema . "',".$tim.",\n'". "Обсуждение страницы сайта: [url=".$purl."]". $tema ."[/url].',\n". "1,0,'99.99.99.99',0,1,0,0,0)"; mysql_query($sqlp) or die (mysql_error()); $p=mysql_insert_id();
$sqlt2="update VB_thread set firstpostid=".$p.",lastpostid=".$p.",lastpost=".$tim.",pollid=0,lastposter='".$nam. "',views=1,visible=1 where threadid=".$t; mysql_query($sqlt2) or die (mysql_error());
$sqlf="update VB_forum set replycount=replycount+1,lastpost=".$tim. ",lastposter='".$nam."',lastpostid=".$p.",lastthread='".$tema."',lastthreadid=".$t. ",lasticonid=0,threadcount=threadcount+1 where forumid=11"; mysql_query($sqlf) or die (mysql_error());
$sqlu="update VB_user set lastpost=".$tim.",lastpostid=".$p.",posts=posts+1 where userid=".$uid; mysql_query($sqlu) or die (mysql_error());
include ('includ.php'); // подключение к базе и т.п.
можно избежать, подключая в своем скрипте файл global.php
будут доступны все глобальные объекты и переменные воблы, которые можно использовать в своих скриптах
соотв. можно использовать API воблы и для запросов в БД и для разбора пришедшего ответа и парсинг стандартных ошибок воблы и т.д...
==
по моему я уже встречал упоминания о подобном хаке =)
@Sunbeam
Продвинутый
Join Date: Oct 2009
Posts: 16
Версия vB: 3.8.6
Reputation:
Опытный 11
Репутация в разделе: 10
0
Quote:
Originally Posted by kerk
вот этого
PHP Code:
include ('includ.php'); // подключение к базе и т.п.
можно избежать, подключая в своем скрипте файл global.php
будут доступны все глобальные объекты и переменные воблы, которые можно использовать в своих скриптах
соотв. можно использовать API воблы и для запросов в БД и для разбора пришедшего ответа и парсинг стандартных ошибок воблы и т.д...
==
по моему я уже встречал упоминания о подобном хаке =)
У меня как раз проблема была (да и есть) в незнании этого апи воблы и всей ее начинки. Быстрее (хотя может и неправильнее) оказалось написать этот скриптик, кой и работает уже давно (если упоминания о подобном были, значит я не один так сделал, но свой выложил впервые).