Перейти к публикации
View in the app

A better way to browse. Learn more.

Дизайн и модификация Invision Community

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Опубликовано:

Есть такое приложение 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>

?

 

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

Рекомендованные сообщения

Опубликовано:

$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>

Опубликовано:
  • Автор

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

 

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

Опубликовано:

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

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

 

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

  • 4 года спустя...
Опубликовано:

2,2,10 уже есть у кого? для ИПС 4.4.3

Создайте аккаунт или войдите в него для комментирования

Сейчас на странице 0

  • Нет пользователей, просматривающих эту страницу.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.