Что делать с данными, приходящими от пользователя?

Статус
В этой теме нельзя размещать новые ответы.

zarus

Хитрожопый макак
Автор оригинала: SiMM
> Моя задача простая - перевести Ваше сообщение в рубли и сохранить в базе.
Кладу 5$, вы его в базе сохраняете как 150 рублей, а через месяц бакс стоит 50 рублей, и я забираю вместо вложенных 5 всего 3. Изюмительно :)
Неудачный пример, в общем.
Не совсем неудачный.
Потому что именно по такой схеме, как Вы описали действуют валютные вклады - вчера положили на счет миллион, а завтра сняли кукиш :) Деефоооолт, пааайииимаааиииишь (с)
 

master_x

Pitavale XXI wieku
Screjet
Вот интересная штука :) Там где я живу Zip Code состоит вперемешку из букв и цифр. Причем вы обязанны разделять его на две группы пробелом, иначе - некорректно. Тоже самое с телефоном еле как отучил юзеров пользоваться записями типа 01664 289 00 22. Они считают, что писать без пробелов- некорректно :)
 

kvf77

Red Devil
Vladson

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

kvf77

Red Devil
SiMM

храню для устранения однозначности курс на день когда ты положил свои 5 баков - тоже не возражение

-~{}~ 16.12.05 16:54:

Vladson

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

кстати, URL тоже можно ввести поразному и я всегда его привожу автоматом к стандарту, добавляя отсутствующие элементы. и вовсе не надо для этого пользователю выводить ошибку и просить исправить, поскольку задача решается автоматически элементарно
 

Vladson

Сильнобухер
Вот ещё пример, у меня каталок ссылок в виде

id-категории, url, текст-ссылки, описание

id-категории выбирается из выподающего списка.
Url в базу не положится если не соответсвует синтаксису

А вот текст-ссылки и описание я просто не имею право менять (исправлять, или подгонять) многие оптимизаторы даже специально делают ошЫбки чтоб их сайт в последствии находился именно по этим словам (так-как по некоторым исправленным словам добиться высоких позиций в поисковиках обойдётся в сотни раз дороже)
 

SiMM

Новичок
> храню для устранения однозначности курс на день когда ты положил свои 5 баков
kvf77, избыточность :) Если она конечно не несёт своей целью в конечном итоге надуть пользователя :)

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

kvf77

Red Devil
SiMM

потому и храню, чтобы не надуть, либо сохраняю число и храню признак валюты, что правильнее
 

SiMM

Новичок
> либо сохраняю число и храню признак валюты, что правильнее
Собственно, я тоже думаю что так правильнее - потому и сказал, что пример zarusа - неудачный.
 

Angel Echo

Guest
> ... бывают такие входные данные, которые не надо исправлять...

Таких данных не бывает! Иначе это не БД, а мусорная свалка ! Есть понятие формализации, без которой любые компьютерные хранилища данных - барахло.

Достаточно объяснить пользователю, что вводить в данную форму можно только буквы, цифры, знаки пунктуации, а HTML-тэги вводить нельзя, что, допустим, HTML-тэги для вашей системы - это все то, что заключено между < и >, что эти символы вводить тоже нельзя, но можно вводить символ @.

После таких комментариев пользователь будет вводить то, что действительно можно. А система должна выдавать ругань всякий раз, как заподозрит неладное на входе. Прочитав ругань несколько раз, пользователь в конце концов будет вводить корректную информацию.
 

SiMM

Новичок
> Таких данных не бывает! Иначе это не БД, а мусорная свалка !
<b>В таком случае, тело вашего поста находится в мусорной свалке</b> :)
 

Angel Echo

Guest
SiMM Что кстати не является проблемой моего комментария ! ;)

-~{}~ 16.12.05 17:25:

Это все равно, что хранить гвозди и кирпичи на продовольственном складе, мол привозите к нам на склад любую дрянь! Что станет с репутацией такого продовольственного склада ? :)

-~{}~ 16.12.05 17:31:

А вопрос о том, как удобнее, должен решать разработчик применительно к потребностям своей системы. Если вы проектируете, скажем, портал для солидного банка и в рамках организации используется форма записи 100 р. 50 коп. то хранить данные наужно именно так. Если же вы пишете гостевую книгу для проекта "Дом 2", то конечно нужно предусмотреть появление на входе и хранение любой дряни :)
 

WayBe

Новичок
В общем, если обобщить, получается следующее:
1. Формальные данные (зип-кода, урл-ы и т.д.) нужно сразу приводить в нужный вид, не забывая предупредить / обругать пользователя :)
2. Любые другие данные (тексты для блогов и форумов, например), сохранять как есть.

Я правильно Вас всех понял?
(похоже, тут смайлы соотв. 1 правилу?)
 

SiMM

Новичок
> Если вы проектируете, скажем, портал для солидного банка и в рамках организации используется форма записи 100 р. 50 коп. то хранить данные наужно именно так.

Бред. При чём - абсолютнейший. Числа нужно хранить в специальнопредназначенном для этого формате. Разжёвывать, почему - не буду - я думаю это всем остальным и так очевидно.

Angel Echo, ещё один типичный пример (специально для вас - остальные его мило игнорируют, поскольку к топику это не имеет никакого отношения, как и ваши вставки), когда данные трогать не надо (однако проверку данных это ничуть не исключает). Всем известна такая штука, как upload файлов на сервер. Я правильно понимаю, что вы предлагаете содержимое залитого файла преобразовать в специальный формат, чтобы не дай бог там что-то вредоносное не оказалось? Нет? Ах, этот вопрос не имеет никакого отношения к БД? А как насчёт того, что файловая система - это, в общем-то, тоже БД? Где в качестве уникального ключа строки выступает абсолютный путь к файлу, а в качестве значения - содержимое файла и его атрибуты.
 

master_x

Pitavale XXI wieku
В общем итог надо бы подвести. У сторонников хранения данных в "специальном формате" не осталось более менее серъезных доводов (только скорость, так ведь никто не доказал пока, что она существенно замедляется если использовать htmlspecilachars при выводе данных). Цель топика была узнать общественное мнение и и показать новичкам как надо делать. А делать надо так:
- хранить все данные в специальных полях, которые для этого предназначенны, т.е. если телефон приходит от пользователя, то надо его запихивать в числовое поле, если дата, то надо запихивать в спец поле для даты.
- во всех остальных случаях приучать пользователя вводить данные в правильном формате, оповещать пользователя при помощи специальных сообщений, что он ввел информацию, не соответствующую формату. В конце концов если данные соответствуют формату вводить в БД как есть, без изменений.
- при выводе, в зависимости от назначения приложения, использовать функцию htmlspecialchars
По-моему все задачи выполненны.
 

_RVK_

Новичок
WayBe
Молодец! Ты хорошо схватил всю идею.

А идея такова.
- Ничего самовольно не преобразуем. Если пользователь ошибся, он будет нам благодарен, что мы его предупредили. Если сдела со зла, больше не сделает.
- Если нам нужны данные для наших целей, именно в определеном формате (например для поиска), храним их в отдельном поле БД, таблице или как кто хочет, в зависимости от задачи. Место сейчас дешевое, так что это нормально.
- Если мы не можем сохранить данные, в том виде, в котором их ввел пользователь, вежливо сообщаем ему об этом, попросив исправить.
- Если мы можем преобразовать данные самостятельно, спрашиваем разрешения пользователя на такое преобразование.
- Приводим данные к тому виду, в котором пользователь их ввел( как минимум), при выводе.
- Скорость тут обсолютно не причем. Есть множество других, более эфективных способов поднять производительность. В 99% есть более узкие места, которые оптимизировать проще.
- Не считаем все вышесказанное, догмой. Безусловно есть задачи, где все это неприменимо. Но их так мало, что говорить о них бессмысленно.

И хочу дать совет новичкам, читающим эту тему. Юзабилити появилось не с рождения интернета, а гораздо раньше. Потому обращайте внимание на офлайн продукты. Поверте, воррд или там фотошоп выверены в юзабилити до мелочей. Если сомневаешься, возьми пример с них. Они уж точно не позволяют менять за тебя данные без твоего спроса.
 

sakon

П..и.н..ок
Юзабилити....
Угу.
Достаточно открыть вордовский файл блокнотом. Ненадо путать оболочку и ввод-вывод с принципами обработки и хранения информации.
 

_RVK_

Новичок
sakon
Если твоя оболочка не предназначена выводить эту информацию, то естественно она её не выведет. В приминительно к нашей проблемме мы говорим о браузерах, поддерживающих стандарт w3c. Посмотри свой сайт в блокноте. Он там правда по другому выглядит.
 

sakon

П..и.н..ок
Причем здесь браузер? Причем здесь оболочка? Вопрос изначально стоял как
данные, приходящие от пользователя, нужно сохранять в БД, так, как есть (естествено, проескейпив перед этим служебные символы), и только при выводе обрабатывать их, так как это требуется.
Ворд для данного случая (IMHO) неудачный пример. Если гипотетически отнестись к нему как к базе данных, то он приняв текст обрабатывает и сохраняет его в нужном ему виде, а при выводе производит преобразование в удобоваримый вид.
 

_RVK_

Новичок
sakon
Может и неудачный(в том смысле что не такой прозрачный для новичков), но я его привел его в контексте юзабилити. Почему он так делает это отдельная тема. И, гланое, он ничего не вырезает. Так же ворд, можно рассматривать как online WYSIWYG.
 

kruglov

Новичок
Всем известна такая штука, как upload файлов на сервер.
А если юзер заливает фотки к новостям со своего фотика размером 4000x3000 px (и слышать ничего не хочет про фотошопы), то я их уменьшить до разумных килобайтов и килопикселей буду считать для себя зазорным?

Или, может, тумбнайлить будем при выводе?
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху