Пришло время продолжить мою недавнюю статью о частых ошибках разработчиков. Сегодня речь пойдет о формах, так как именно ими я сегодня занимался весь день и много чего пришло в голову на эту тему.
Во-первых, во всех формах всегда должны использоваться именно те элементы, которые являются наиболее применимыми в данной ситуации. Краткое текстовое значение (например, заголовок статьи) наиболее уместно вводить при помощи обычного «input type="text"» дабы не вводить пользователя в заблуждение и сразу указать ему на то, что особо много текста в данное поле вводить не стоит. У данного элемента также имеется атрибут «maxlength» при помощи которого можно установить максимальную длину вводимого текста в символах. Будет полезно, например, для поля, в которое нужно ввести четырнадцатизначный код. Пятнадцатый и последующие символы в поле вводиться не будут, однако это ограничение можно легко снять в браузере пользователя, так что надеяться на него особо не стоит, а использовать можно разве что только для удобства пользователей. Любое значение, длина которого ограничивается, должно проходить проверку длины на этапе обработки формы независимо от того, установлен атрибут «maxlength» или нет. Атрибута, указывающего минимальную длину, к сожалению, нет, однако эту проблему можно очень легко решить при помощи javascript. К проверке форм через javascript, кстати, у меня отдельная неприязнь. Часто встречаю скрипты, в которых проверка данных формы происходит только при помощи javascript. Это совершенно неверно, так как каким бы хорошим скриптом Вы ни оснастили свою страницу, избавиться от такой проверки пользователь сможет либо изъяв javascript-код со страницы, либо просто-напросто отключив его обработку в настройках браузера. Проверка при помощи javascript ― это, по сути дела, проверка на стороне пользователя. Представьте себе, что Вам поручили заполнить зарплатную ведомость самостоятельно и самостоятельно же проверить ее. Вы можете указать в полях ведомости что угодно и она пойдет на оплату без проверки (не считая, конечно же, Вашей). Примерно так же работает и проверка формы на стороне пользователя, поэтому в таком случае все будет зависеть от честности пользователя, а на нее лучше не рассчитывать, ибо пользователи встречаются разные. Проверка всех данных формы всегда должна происходить на стороне сервера, а все проверки на стороне пользователя производятся исключительно для удобства самого пользователя.
С проверками на стороне сервера, что правда, также бывают проблемы. Все просто, конечно, если нужно всего-то проверить длину строки либо добиться того, чтобы в ней остались только буквы или цифры. Бывают и более сложные дела. Например, недавно мне пришлось писать скрипт проверки поля, в котором указывается сумма. А среди особенностей суммы у нас есть такие вещи: сумма может быть как целым числом, так и иметь десятичную часть, однако десятичная часть не может иметь более двух знаков в длину (десятую часть копейки, надо сказать, довольно трудно выплатить в случае необходимости); десятичным разделителем разные пользователи могут ставить и запятую и точку, при этом некоторые ставят еще и разделители разрядов, которые могут опять-таки быть запятой, точкой, а также знаком апострофа; сумма может быть отрицательной. Решена эта задача была довольно-таки просто: мы просто стали выбрасывать из введенной строки все, кроме цифр, за исключением минуса, если он стоит перед цифрами, а также запятой либо точки, если после них имеется по крайней мере одна цифра. На следующем этапе мы столкнулись с другой проблемой: суммы хранились в двух форматах ― с разделителем-точкой и разделителем-запятой. Эта проблема решается за несколько секунд. Был установлен внутренний стандарт разметки суммы, в котором значилось, что в качестве десятичного разделителя может использоваться только запятая. После этого те точки, которые выживали после первого этапа обработки, автоматически заменялись на запятые на втором этапе.
Если нужен элемент, при помощи которого что-то будет включаться или отключаться ― прекрасный выбор ― чекбокс, который может принимать только одно значение и, соответственно, если оно принято, то функция включена, если же нет, то отключена. Вместо чекбоксов можно пользоваться также радиокнопками, в которых уже можно будет предусмотреть оба варианта. Чего я делать не рекомендую, так это использовать в такой ситуации выпадающие списки. Они предназначены для тех случаев, когда вариантов очень много, а не два-три, и пользоваться ими в большом количестве будет неудобно. Мы всегда используем радиокнопки в том случае, если вариантов пять или менее, если же больше, тогда выпадающий список.