Студия креативных разработок DevArt.PRO.
Разработка сайтов и форумов под ключ!
Сильнейшая команда в России по vBulletin - читать подробнее...
 
 
 
 

 
 
Здесь скоро опять что то будет...
 
 
 
 
 
 
Loading

Вернуться   форум vBSupport.org > vBSupport.org > Гурушник > Кодер

Объявления
  • Изменения в правах
  • Каталог Фрилансеров
  • Добро пожаловать!
  • Premoderation
  • Новичкам!
  • For English speaking users
Ответ
 
Опции темы Опции просмотра
Старый 02.11.2009, 14:37   #1
Эксперт
 
Аватар для SMak044
Как передать произвольное название темы при ее создании в форму newthread.php

Третий раз начинаю писать тему...
Задача такая.
У меня есть в тесте слово,которое я хочу использовать как название темы. Я сделал это слово ссылкой вида http://vbsupport.org/forum/newthread...newthread&f=98&title=Слово
На хук newthread_form_start я повесил следующую конструкцию
Код HTML:
if ($vbulletin->options['andeco_onoff'])
{
  if (preg_match('(.*)(&title=)(.*)', "Моя ссылка", $regs)) 
  {
    $result = trim($regs[3]);
  }
  else
  {
    $result = "";
  }

  $newpost['title'] = $result;
}
Почему так? При создании формы новой темы, переменной $subject присваивается $newpost['title'], которое пустое, потому в форме пустое поле.
Хук newthread_form_start находится сразу за
Код HTML:
if ($_REQUEST['do'] == 'newthread')
{
Вопрос в следующем. Как мне передать полную ссылку или как мне получить полную Мою ссылку в коде модуля?
  Ответить с цитированием
Рекламка
Реклама на форуме

Файловый Архив

  • Неограниченное количество категорий и суб-категорий
  • Тонкие настройки прав доступа
  • Предпросмотр медиа файлов: FLV, IFLV, F4A, F4V, MP4, MP3, MOV и других...
  • Мультизагрузка файлов - SWFUploader
  • Добавление файлов с сервера
Подробности и история обновлений продукта в этой теме
Старый 02.11.2009, 15:33   #2
Ghost
Гуру
 
Аватар для Ghost
зачем использовать столь громоздкую конструкцию с регулярным выражением, если можно все намного проще сделать?
PHP код:
$result $vbulletin->input->clean_gpc('g''title'TYPE_NOHTML); 
з.ы. на будущее -- существуют предопределенные глобальные массивы -- $_GET, $_POST, $_COOKIE, $_REQUEST, $_SERVER, $_SESSION -- кури маны: Predefined Variables -- там описано, для чего нужен каждый массив. ну и сам всегда можешь посмотреть их содержимое командой, например:
PHP код:
echo '<pre>'var_export($_SERVERtrue), '</pre>'
  Ответить с цитированием
Старый 02.11.2009, 15:42   #3
SMak044
Эксперт
 
Аватар для SMak044
Зря писал вопрос... Хотя если бы не написал то не допер бы.

Решилось все просто. $_REQUEST - это массив состоящий из элементов html запроса в том числе при наличии дополнительного &title=Слово можно получить это значение путем вывода из массива этого элемента $_REQUEST['title']
Выглядит в модуле это так
Код HTML:
if ($vbulletin->options['andeco_onoff'])
{
  if($_REQUEST['title'])
  {
    $newpost['title'] = $_REQUEST['title'];
  }
}
В результате при клике на линк со ссылкой вида newthread.php?do=newthread&f=98&title=Слово полю Заголовок присваивается значение "Слово".
Понятно, что &title=Слово мой вариант, но можно использовать, что угодно...

ПС. полезно задавать вопросы в слух

SMak044 добавил 02.11.2009 в 15:42
Оффтоп

Последний раз редактировалось SMak044; 02.11.2009 в 15:42.. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 02.11.2009, 15:45   #4
Ghost
Гуру
 
Аватар для Ghost
Цитата:
Сообщение от SMak044 Посмотреть сообщение
$newpost['title'] = $_REQUEST['title'];
это некошенрно а если там есть кавычка? например,
Код:
...&title=привет"%20disabled="disabled
и того хуже -- угловые скобки? это ж xss в чистом виде! юзай функцию clean_gpc.
  Ответить с цитированием
Старый 02.11.2009, 16:03   #5
SMak044
Эксперт
 
Аватар для SMak044
Цитата:
Сообщение от Ghost Посмотреть сообщение
это некошенрно а если там есть кавычка?
И то верно!!!
В общем для завершение вопроса.
В результате все свелось к такому варианту
Код HTML:
if ($vbulletin->options['andeco_onoff'])
{
  $result = $vbulletin->input->clean_gpc('g', 'title', TYPE_NOHTML);
  $newpost['title'] = $result;
}
Ghost, Спасибо

SMak044 добавил 02.11.2009 в 16:03
Цитата:
Сообщение от Ghost Посмотреть сообщение
это ж xss в чистом виде! юзай функцию clean_gpc.
Про xss даже не догадывался

Надо ли проверять наличие $vbulletin->input->clean_gpc('g', 'title', TYPE_NOHTML) перед присвоением $result? Я попробовал без проверки все нормально и с переменной &title и без нее.

Последний раз редактировалось SMak044; 02.11.2009 в 16:04.. Причина: Добавлено сообщение
  Ответить с цитированием
Старый 02.11.2009, 16:33   #6
Ghost
Гуру
 
Аватар для Ghost
можно сразу:
PHP код:
$newpost['title'] = $vbulletin->input->clean_gpc('g''title'TYPE_NOHTML); 
безо всяких проверок -- функция clean_gpc сама проверит наличие параметра, обработает его и вернет либо обработанную строку, либо пустую.
  Ответить с цитированием
Ответ

Закладки

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



 
 

Текущее время: 15:45 25.05.2012. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.5.2
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd. Перевод: zCarot