Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: textarea + БД и перенос строки

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

FasaGasa

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть форма в ней тектсовый блок textarea, в него вводятся данные, которые содержат строки (через enter), но при заносе в БД, получается сплошной текст, как сохранить разбиение на строки?




Название исправлено. /Cheery/

Всего записей: 6 | Зарегистр. 06-01-2005 | Отправлено: 04:41 07-01-2005 | Исправлено: Cheery, 03:29 08-01-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FasaGasa

Цитата:
получается сплошной текст

сплошной текст где ? уже в базе или так выглядит при выводе его из базы?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:53 07-01-2005
FasaGasa

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
похоже, что на выводе...

Всего записей: 6 | Зарегистр. 06-01-2005 | Отправлено: 04:55 07-01-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FasaGasa

Цитата:
похоже, что на выводе...

ну так делаешь замену перед выводом
\n на \n<br> это если хочется еще сохранить переносы в коде страницы..
либо просто \n на <br>

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:57 07-01-2005 | Исправлено: Cheery, 05:04 07-01-2005
FasaGasa

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Постоянно хотел спросить, но отдельную тему создавать не хотелось, а что значит \n ?
А какая функция в php за замену отвечает?

Всего записей: 6 | Зарегистр. 06-01-2005 | Отправлено: 05:12 07-01-2005
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FasaGasa

Цитата:
Постоянно хотел спросить, но отдельную тему создавать не хотелось, а что значит \n ?  

символ переноса на новую строку. его не видно.

Цитата:
А какая функция в php за замену отвечает?

www.php.net/str_replace

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 05:13 07-01-2005
zalexf



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Сделай так:
  $message=substr( nl2br(htmlspecialchars(addslashes(trim($message)))) ,0,1000);
где
  <textarea name="message"></textarea>
 
у меня работает отлично.... можно сразу укладывать в MySQL
смысл всего этого конечно в nl2br, а все остальное просто защита от тэгов HTML и кавычек.... делаю сайчас сайт с гостевухой, взял от туда - работает OK!

Всего записей: 102 | Зарегистр. 21-10-2002 | Отправлено: 15:14 10-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 $message=substr( nl2br(htmlspecialchars(addslashes(trim($message)))) ,0,1000);
Данные в базе нужно хранить в том виде, в каком их ввёл пользователь. Всю остальную лабуду нужно делать ПРИ ВЫВОДЕ, а не когда попало.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 15:30 10-01-2005
zalexf



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
ПРИ ВЫВОДЕ, а не когда попало

не согласен, один раз данные обработались - и все!  
а если много чел ходит на сайт и это каждый раз производить эти операции - это обезьянья работа для сервера (помниться в журнале читал, что какой-то институт подсчитал насколько время затрачиваемое на загрузку компа тормозит человеческий прогресс
 
кроме того, все равно вводимые данные нужно фильтровать - авось там хакер к тебе в скрипт звонит.... фильтровать вывод потом будет уже поздно
 
Добавлено
а вывод в результате получается просто:
  echo $message - и все!

Всего записей: 102 | Зарегистр. 21-10-2002 | Отправлено: 16:40 10-01-2005
kommersant



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiMM

Цитата:
Данные в базе нужно хранить в том виде, в каком их ввёл пользователь. Всю остальную лабуду нужно делать ПРИ ВЫВОДЕ, а не когда попало.

 
Данные в базе нужно хранить в том виде, в каком ТЫ хочешь их видеть, а не то, что там пользователь ввел!
 
zalexf
Забыли, что нужно:
<textarea name="message" WRAP="PHYSICAL"></textarea>

Всего записей: 107 | Зарегистр. 27-05-2003 | Отправлено: 16:52 10-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
анные в базе нужно хранить в том виде, в каком ТЫ хочешь их видеть, а не то, что там пользователь ввел!
Тогда почему бы тебе не хранить в базе сразу готовый HTML? А зачем в базе - кидай сразу на диск - и база не понадобиться.
Завтра тебе понадобятся данные в другом формате и ты будешь тщательно вычищать ерунду, которую ты в них уже напихал. При чём, восстановить данные со 100% точностью тебе уже не удастся.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 17:25 10-01-2005
N Sensey N



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Забыли, что нужно:
<textarea name="message" WRAP="PHYSICAL"></textarea>
----------------
 
Нафик нада?
 
FasaGasa
Делай так:
 
Вводи в базу НЕОБРАБОТАННЫЙ текст (если его вводишь ты)\
Только не забывай про ковычки... addslashes делай в запросе к базе...
 
А при выводе текста делай:
 
echo nl2br($text);
 
P.S
Не понимаю ... зачем когда дела доходит до переноса строки люди советуют str_replace ? Когда для этого в php уже есть готовая функция?

Всего записей: 1409 | Зарегистр. 01-10-2002 | Отправлено: 17:40 10-01-2005 | Исправлено: N Sensey N, 17:41 10-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Только не забывай про ковычки... addslashes делай в запросе к базе...
Кстати, советую перечитать FAQ. На предмет magic_quotes_sybase. Подыдожив - надёжнее пользовать mysql_real_escape_string

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 17:52 10-01-2005
xntx



хнотик-багоискатель
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
N Sensey N

Цитата:
А при выводе текста делай:  
 
echo nl2br($text);  
 
P.S  
Не понимаю ... зачем когда дела доходит до переноса строки люди советуют str_replace ? Когда для этого в php уже есть готовая функция?

имхо, nl2br() не совсем удобный, я его перестал юзать когда напоролся на то, что из него нельзя вставить текст в стринг javascript'а, так как он делает \n<br />\n
все-таки str_replace("\n", '<br />', $text); универсальнее

----------
Hello world!

Всего записей: 5169 | Зарегистр. 15-02-2003 | Отправлено: 19:24 10-01-2005
kommersant



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiMM
 
А причем здесь готовый html, и хранение всякой ерунды?
Я буду хранить в базе то, что мне нужно, с кавычками, слешами и прочим. И выводить буду все так как захочу.
 

Цитата:
Завтра тебе понадобятся данные в другом формате и ты будешь тщательно вычищать ерунду, которую ты в них уже напихал.

 
А в каком еще другом формате может понадобится текстовая информация, которую ввел юзер? В графическом? Да нет проблем

Всего записей: 107 | Зарегистр. 27-05-2003 | Отправлено: 10:54 11-01-2005
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А в каком еще другом формате может понадобится текстовая информация, которую ввел юзер? В графическом? Да нет проблем  

 
Насколько я понял, имеется ввиду, например, использование BBcodes и т.п. Попробуй сделай редактирование текста, если он у тебя уже в виде HTML... Может же понадобиться то, что ввел пользователь. Хотя, ИМХО, лучше создавать два поля в БД... Один - обработанный, один - нет. Места, правда, больше занимает...

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 11:54 11-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А причем здесь готовый html, и хранение всякой ерунды?
А зачем делать htmlspecialchars, когда кладёшь текст в базу?
Цитата:
Я буду хранить в базе то, что мне нужно, с кавычками, слешами и прочим
Ты можешь делать с базой всё, что захочешь, хоть через заднее кирильцо - но учить этому других - не надо. Особенно если речь о новичках. У них должно формироваться правильное мышление, а не "абы как". В базе должны лежать данные, а не их представление.
PS: сложилось впечатление, что ты вообще не понимаешь смысла операций nl2br, htmlspecialchars и addslashes относительно к БД.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 12:43 11-01-2005
kommersant



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiMM
А вот у меня сложилось впечатление, что ВЫ не понимаете о чем вообще идет речь в посте, и о том, что вы говорили выше. Сначала вы УЧИЛИ новичков:
 

Цитата:
Данные в базе нужно хранить в том виде, в каком их ввёл пользователь. Всю остальную лабуду нужно делать ПРИ ВЫВОДЕ, а не когда попало.

 
То бишь вы делаете htmlspecialchars и addslashes уже при выводе? Тогда я действительно не понимаю смысла этих операций...
 

Цитата:
В базе должны лежать данные, а не их представление.  

 Какое представление? О чем речь?  
 
Я лишь твердил о том, что я буду хранить данные в базе в том виде каком захочу, а не в том, в каком их ввел пользователь. Это значит, что их сначала нужно проверить, обработать, подумать, а потом записывать в базу.
А вот ВЫ как раз собираетесь складывать в базу все, что предложит вам пользователь. Сегодня он положит вам в базу текст, завтра ссылочку, потом скриптик.
Да храните, бог с вами, можете не показывать никому, что у вас базе лежит текста на 2 ГБ, а на сайте показывается 100 кб...  ведь вы все делаете при выводе...
 
Church решил меня добить

Цитата:
Хотя, ИМХО, лучше создавать два поля в БД... Один - обработанный, один - нет.

 
Ты знаешь, я создаю в базе много полей. В первом - обработанный текст, Во втором - нет, в третьем - наполовину обработанный, а другая его половина хранится у меня в четвертом поле. В пятом я обычно храню все теги, которые были во втором,  в шестом все ссылки, в седьмом все смайлы, мало ли что...  
Вообще, по секрету скажу, лучше делать динамическую генерацию полей в таблице. Ведь текст может быть разным, вдруг все не влезет, добавляем еще один столбец...

Всего записей: 107 | Зарегистр. 27-05-2003 | Отправлено: 17:09 11-01-2005 | Исправлено: kommersant, 17:10 11-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
То бишь вы делаете htmlspecialchars и addslashes уже при выводе?
Объясните мне ЗДЕСЬ смысл addslashes.
Цитата:
Это значит, что их сначала нужно проверить, обработать, подумать, а потом записывать в базу.
Какое отношение имеет к "проверить и подумать" htmlspecialchars? Накой хрен нужна эта обработка (htmlspecialchars) базе?
Цитата:
Сегодня он положит вам в базу текст, завтра ссылочку, потом скриптик.
Ну и что? Мне ни что не мешает выводить данные так, как нужно.
Цитата:
Да храните, бог с вами, можете не показывать никому, что у вас базе лежит текста на 2 ГБ, а на сайте показывается 100 кб...
Процитируйте место, где я это утверждаю, а не где вам это показалось. Я по моему вообще вопроса валидации данных не касался (об этом в теме не было ни слова).
Цитата:
я создаю в базе много полей. В первом - обработанный текст, Во втором - нет, в третьем - наполовину обработанный, а другая его половина хранится у меня в четвертом поле. В пятом я обычно храню все теги, которые были во втором,  в шестом все ссылки, в седьмом все смайлы, мало ли что...
А чо так мало? Может надо было ещё завести по столбцу для каждой буквы оригинала?
Цитата:
текст может быть разным, вдруг все не влезет, добавляем еще один столбец...
Ага, фиолетовым или зелёным. А может пурпурным. Ведь надо всё предусмотреть и завести для каждого цвета свой столбец (и каждого слова - а то мало ли что?). А выделенное - так это вообще шедевр.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 17:21 11-01-2005 | Исправлено: SiMM, 17:39 11-01-2005
kommersant



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Я по моему вообще вопроса валидации данных не касался (об этом в теме не было ни слова).

 
Здесь вы предлагаете делать валидацию ПРИ ВЫВОДЕ а не на входе. Или под словом "лабуду" вы понимаете, простите, подрочить? Или мне это кажется?
 

Цитата:
Цитата: $message=substr( nl2br(htmlspecialchars(addslashes(trim($message)))) ,0,1000);  
Данные в базе нужно хранить в том виде, в каком их ввёл пользователь. Всю остальную лабуду нужно делать ПРИ ВЫВОДЕ, а не когда попало.

 
 
 
 
Добавлено
2 SiMM и всем его ученикам, а также любителям, не проверять входящие данные и запихивать их в базу, посвящается:
 
[q]Типичный сценарий взаимодействия с базой данных выглядит так: пользователь вводит некоторую информацию в поля запроса, оттуда ее извлекает специальный скрипт и преобразует в строку запроса к базе данных, передавая серверу ее на выполнение:
 
ЛИСТИНГ
 
$result = mysql_db_query("database", "select * from userTable
 
where login = '$userLogin' and password = '$userPassword' ");
 
Здесь $userlogin – переменная, содержащая имя пользователя, а $userPassword – его пароль. Обрати внимание, что обе переменные размещены внутри текстовой строки, окаймленной кавычками. Это необычно для Си, но типично для интерпретируемых языков вроде Perl и PHP. Подобный механизм называется интерполяцией строк и позволяет автоматически подставлять вместо переменной ее фактическое значение.
 
Допустим, пользователь введет SiMM/passwd. Тогда строка запроса будет выглядеть так: "select * from userTable where login = 'SiMM' and password = 'passwd'".  
 
Если такой логин/пароль действительно присутствует в базе, функция сообщает идентификатор результата, в противном случае возвращается FALSE.
 
Хочешь войти в систему под именем другого пользователя, зная его логин, но не зная пароль?
 
Воспользуйся тем, что механизм интерполяции позволяет атакующему воздействовать на строку запроса, видоизменяя ее по своему усмотрению. Посмотрим, что произойдет, если вместо пароля ввести последовательность "fuck' or '1'= '1" (без кавычек): "select * from userTable where login = 'SiMM' and password = 'fuck' or '1' = '1'".  
 
Смотри: кавычка, стоящая после fuck, замкнула пользовательский пароль, а весь последующий ввод попал в логическое выражение, навязанное базе данных атакующим. Поскольку один всегда равен одному, запрос будет считаться выполненным при любом введенном пароле и SQL-сервер возвратит все-все-все записи из таблицы (в том числе и не относящиеся к логину SiMM)!
 
 
 
Добавлено
Еще примеры нужны?

Всего записей: 107 | Зарегистр. 27-05-2003 | Отправлено: 17:45 11-01-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: textarea + БД и перенос строки


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru