Jump to content

Многострочные отзывы в Trader feedback system


Mac
 Share

Recommended Posts

Есть такое приложение Trader feedback system, которое позволяет оставлять отзывы на юзеров, но есть у него один существенный косяк - для текста отзыва отведен input с ограничением на количество символов. Мне же нужна возможность оставлять большие длинные отзывы. Как минимум многострочные. Первым делом заменил input на textarea в шаблоне, но это лишь полдела. Например, если не заполнить обязательное поле, то textarea заполняется текстом, где все переносы заменены на <br>.

 

Глянул в БД. Способ хранения отличается от того, в каком виде хранятся сообщения форума в IPB.

Таблица posts:

post-56753-0-53751900-1421484296_thumb.png

Таблица feedback:

post-56753-0-70662800-1421484297_thumb.png

 

Т.е. как видим, в этом приложении любые символы, даже безопасные !, ? превращаются в html-сущности.

 

Ладно, лезем в код. Файл /admin/applications_addon/other/feedback/modules_public/view/view.php. Функция вставки в БД:

$this->DB->insert( 'feedback',
								array(	'date'		=> time(),
										'sender'	=> $this->memberData['member_id'],
										'receiver'	=> $userid,
										'note'      => $this->request['comment'],
										'ip'		=> $_SERVER['REMOTE_ADDR'],
										'score'     => $this->request['leaving'],
										'link_type' => $this->link['type'],
										'link'      => $this->link['id'],
										'type'      => $this->request['role']
									)
							);

Честно говоря, в коде IPB еще разбираться не доводилось, потому и прошу совета гуру. Как видим, тут текст коммента берется из $this->request. Видимо, IPB это свойство уже каким-то образом очищает от возможных опасных конструкций, а именно превращает все символы в html-сущности без разбору. Нам это не нужно. Посмотрел, как обрабатываются обычные посты и темы. Там используется чистый массив $_POST, который прогоняется через:

IPSText::parseCleanValue( $this->_topicTitle )

 

Итого, безопасно ли заменить в вышеприведенном коде:

'note'      => $this->request['comment'],

на

'note'      => IPSText::parseCleanValue($_POST['comment']),

?

 

И, соответственно, в шаблоне:

<textarea id="comment" class="input_text" style="font-size: 16px;" rows="8" cols="65" name="comment" /><if test="isset($this->request['comment'])">{$this->request[['comment']}</if></textarea>

на

<textarea id="comment" class="input_text" style="font-size: 16px;" rows="8" cols="65" name="comment" /><if test="isset($_POST['comment'])">{$_POST['comment']}</if></textarea>

?

 

Заранее спасибо за ответы.

Link to comment
Share on other sites

$this->request это и есть массив GET|POST параметров обработанные через IPSText::parseCleanValue. Т.е. единственное что вам нужно сделать, это заменить в textarea

на new line.

 

<textarea id="comment" class="input_text" style="font-size: 16px;" rows="8" cols="65" name="comment" /><if test="isset($this->request['comment'])">{parse expression="str_replace('<br />', "\n", $this->request['comment'])"}</if></textarea>

  • Upvote 1
Link to comment
Share on other sites

А! Действительно, перемудрил. Большое спасибо!

 

Единственно непонятным для меня остается вопрос, почему в таблице постов восклицательные знаки хранятся без изменений, а через $this->request в этом приложении в виде html-сущностей. Вроде как смысла нет конвертировать их.

Link to comment
Share on other sites

Потому что посты обрабатываются через парсер ббкодов непосредственно из $_POST.

При желании можно добавить замену и для восклицательного знака.

 

str_replace(array('<br />', '&#33;'), array("\n", "!"), $this->request['comment'])

Link to comment
Share on other sites

  • 4 years later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...