Проверьте, были ли заполнены определенные поля перед отправкой формы - PullRequest
0 голосов
/ 19 июня 2010

У меня есть форма, которая отправляет данные в базу данных MySQL, и я хочу убедиться, что некоторые поля не оставлены пустыми. Я думаю, что могу понять, как это сделать с помощью JavaScript, но у меня такой вопрос? Когда я создал таблицу базы данных, с которой я работаю, я сделал поля, которые я хочу убедиться, что они заполнены NOT NULL, чтобы гарантировать, что я по крайней мере получу ошибку MySQL, когда они будут оставлены пустыми (я также понимаю, что «пусто») и NULL это не одно и то же).

Мой вопрос заключается в том, должен ли я проверять, являются ли поля пустыми / нулевыми с помощью JavaScript перед отправкой формы, или я должен позволить пользователю попытаться отправить форму, а затем основывать свои корректирующие действия на каждой полученной мной ошибке MySQL. назад

И второй вопрос, если я делаю первый (проверьте с помощью JavaScript), какой смысл создавать в моей базе данных некоторые поля NULL и некоторые поля NOT NULL, если я собираюсь перехватить все возможные "ошибки" "с JavaScript, прежде чем отправленная форма попадет в базу данных?

Ответы [ 7 ]

4 голосов
/ 19 июня 2010

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

Но вам также следует выполнить проверку на стороне сервера.Кто-то может злонамеренно отправить недействительные данные на ваш сервер, минуя проверку на стороне клиента.

Проверка на стороне клиента хороша для обеспечения того, чтобы пользователь получал полезные отзывы, когда они не заполнили формуправильно.Но полагаться только на эту проверку небезопасно.Убедитесь, что сервер не допускает недопустимых данных.

Кроме того, если вы когда-либо разрешите доступ к данным через какой-либо API, вам потребуется проверка на стороне сервера, чтобы предотвратить попадание недопустимых данных вбазы данных.

2 голосов
/ 19 июня 2010

У меня вопрос, должен ли я проверить, чтобы увидеть если поля пусты / пустые с JavaScript перед формой отправлено, или я должен позволить пользователю попытаться отправить форму, а затем основывать мои корректирующие действия на том, что каждая ошибка MySQL, которую я получаю обратно?

Сделайте и то и другое, проверьте с помощью JavaScript, но проверка с помощью PHP обязательна . Не вставляйте пустые значения, если хотите.

1 голос
/ 19 июня 2010

Вы должны всегда делать проверки на сервере, независимо от того, есть ли проверки JavaScript.Что если у кого-то отключен JavaScript?Что если пользователь злонамеренный и использует что-то вроде Firebug, чтобы поставить под угрозу вашу проверку JavaScript и безопасность?Это не только возможно, это очень легко сделать.Всегда проверяйте на стороне сервера.

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

0 голосов
/ 20 июня 2010

Я новичок в SQL, поэтому я изучал способы уничтожения и взлома БД. Пугающий! Суть в том, что для меня: всегда проверяйте все на своем сервере ДО отправки любого SQL-запроса. Ссылка: http://www.securitydocs.com/library/3587

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

Правило, которое мне очень нравится и которое я стараюсь соблюдать: проверьте с помощью белый список , набор вещей, которые можно разрешить. Не проверяйте с черным списком, вещи, чтобы запретить. Зачем? Потому что я действительно не могу быть уверен, что черный список содержит все незаконное. Моя невнимательность и постоянное давление изобретательности хакеров гарантируют, что будут сотни или тысячи нелегалов.

Гораздо проще быть уверенным в том, что допустимо: таких парней относительно немного.

0 голосов
/ 19 июня 2010

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

Никогда не думайте, что процесс на стороне клиента передаст вам правильно сформированные данные. Ваши серверные сценарии должны учитывать, что все, что поступает из браузера, выходит из седельной сумки мертвого всадника Pony Express, лошадь которого вытащила его из границы.

Проверка с обеих сторон. Установка столбца БД NOT NULL ничего не стоит. Javascript использует ресурсы клиента, поэтому он также ничего не стоит и обеспечивает мгновенную обратную связь с вашим пользователем, не связываясь с сервером.

Вы можете проверить, что поле содержит данные, проверив, что его атрибут value не является пустой строкой. Что-то вроде:

if (formElement.attachEvent) { //handle IE
    formElement.attachEvent('onsubmit', function() {
        if (window.event.sourceElement.someFormElement.value === '') {
            // outline empty form in red or otherwise alert user of bad input
            return false;
        } else {
            // check other fields that can't be empty
        }
    }
} else {
    formElement.addEventListener('submit', function() {
        if (this.someFormElement.value === '') {
            // outline empty form in red or otherwise alert user of bad input
            return false;
        } else {
            // check other fields that can't be empty
        }
    }
}

Возвращение false из четного обработчика предотвращает отправку формы.

0 голосов
/ 19 июня 2010

Если вы не собираетесь разрешать пользователю отправлять форму с пустыми полями, то вы правы, нет смысла разрешать этим полям быть пустыми в базе данных.

Я бы сказал, что вы должны использовать Javascript для проверки в качестве проблемы юзабилити (это спасает пользователя, ожидающего перезагрузки страницы, чтобы обнаружить, что он не ввел обязательное поле).Однако это должно быть подтверждено проверкой на стороне сервера и соответствующими сообщениями об ошибках для пользователей с отключенным JavaScript.

0 голосов
/ 19 июня 2010

Вы не должны возиться с внутренними ошибками, как это. Убедитесь, что вы проверяете на стороне клиента с помощью JavaScript. Не говорите, игнорируйте внутренние проверки и / или санацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...