2010-06-19 5 views
0

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

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

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

ответ

4

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

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

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

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

+0

Спасибо за информацию. Я сделаю некоторое чтение о лучших методах проверки правильности, чтобы убедиться, что все правильно. – ubiquibacon

0

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

0

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

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

+0

Звучит неплохо, я просто создам общую страницу ошибок на всех ошибках, которая есть «на всякий случай». Если я правильно понимаю, что страница, по всей видимости, никогда не будет замечена кем-либо. Я также хотел бы добавить, что это для малого бизнеса и есть только внутри интрасети, поэтому я знаю, что у них будет JavaScript, так как я поддерживаю сервер и их рабочие станции. – ubiquibacon

2

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

Сделайте оба, проверьте с javascript, но checking with PHP is a must. Не вставляйте пустые значения, если хотите.

+0

Спасибо за ссылку, JavaScript поможет мне получить мои права. – ubiquibacon

1

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

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

0

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

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

Проверить с обеих сторон. Установка столбца db 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

Отлично! Спасибо за код тоже. Я думаю, вы правы в том, что в вашей базе есть дополнительная защита, это ничего не повредит, но в будущем это может спасти мне головную боль. – ubiquibacon

0

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

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

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

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