Я взял тебя с титулом?
Правильно, это невозможно надежно подтвердить форму с JavaScript. То есть вы не можете предотвратить представление недопустимых данных на сервер с помощью JavaScript для проверки. Мы все видели JavaScript на основе классов валидации формы (и классы для библиотек JavaScript, такие как MOOTOOLS, что является моей любимой, поэтому я буду ссылаться на нее здесь), но это слишком часто не сделано достаточно ясно для тех, кто может Используйте такие классы, которые в одиночку проверки JavaScript не предоставляет никакой безопасности против недействительных данных, которые отправляются в ваш скрипт обрабатывающего обрабатываемого обрабатываемой обработки и выполняют его в вашу базу данных.
JavaScript выполняется браузером, а не сервером. Это позволяет всем видам улучшений пользовательского опыта, которые не будут возможно с языками на стороне сервера, такими как PHP.
В контексте проверки формы JavaScript позволяет предупредить пользователя к ошибке в его или ее входе, не отправляя все данные в форму, и представляя список ошибок пользователю. Это не только отличная вещь с точки зрения удобства для пользователя, но это также может экономить вас пропускной способности в значительной степени, если у вас есть сайт большого тома.
Проблема с проверкой JavaScript заключается в том, что его можно обойти, что означает, что так же, как вы никогда не должны доверять вводам пользователя без проверки, вы никогда не должны полагаться на самоуверенность в одиночку.
Логический подход к проверке затем должен подтвердить весь ваш контент на сервере, прежде чем сохранить его в базу данных. Что это означает для вас, если вы хотите также иметь тонкие сообщения проверки, представленные пользователю, когда они заполняют форму, не только в конце?
Зачем дублировать эти усилия, написав два набора функций, один для PHP и один для JavaScript?
Лично я предпочитаю использовать один набор функций валидации в PHP, и слегка изменять мой резервный скрипт, чтобы вызвать их не только в полной форме, но и на отдельных запросах XHR.
Это краткое руководство ориентировано на то, как вы можете структурировать свой JavaScript и PHP, чтобы создать два слоя проверки, которые опираются только на один набор функций валидации, что позволяет обеспечить безопасность проверки на стороне серверов с удобством и красотой проверки на стороне клиента.
Технически валидация все происходит на спине, мы просто добавляем привлекательный интерфейс интерфейса к нему, что наши пользователи оценят. Мы не пытаемся предоставить полный код для проверки формы, вместо этого мы предлагаем подход для вас.
Шаг 1: Создайте нашу форму и валидацию PHP
HTML С целью этой демонстрации мы используем очень простую форму с одним текстовым входом.
"CSS Two simple classes for the form element to indicate correct or incorrect status. This can be greatly beautified. PHP Very simple PHP to capture the form submit, and validate it. Since we're using one field, this is extremely basic code. In our example, it sits at the top of the same file as the form. $value){ if($key=="mytext"){ if(strtolower($value) != "peas"){ $message['error'] = true; $message[$key] = "<< Please say \"peas\""; } elseif(empty($value)){ $message['error'] = true; $message[$key] = "<< You forgot to tell us what you like!"; } } } return $message; } ?>"
Это довольно ванильные вещи. У нас есть форма на нашей странице, которая представляет себе, управляет значением поля «myText» через базовую функцию проверки, и либо обрабатывает ввод или отображает ошибку. Если мы добавим больше полей к этому, мы, очевидно, придется добавить к этому коду для проверки каждого из них и отображать список ошибок (если есть) пользователю, когда страница обновляется.
Теперь, когда у нас есть этот фонд на месте, мы можем добавить небольшой уровень JavaScript, чтобы запустить эту проверку на каждом поле Asynchrony, когда его значение изменяется (вкладка выключает поле или нажать на его основе). Здесь мы покажем каждый блок кода снова, но обратите внимание на несколько дополнительных строк в HTML, PHP, а также новый JavaScript.
Шаг 2: Добавьте MOOTOOLS (JavaScript) Слой
Этот кусолюбивый петли через каждый элемент класса «Формимент», и добавляет событие изменения, которое вызывает асинхронный вызов нашему сценарию PHP. Затем он интерпретирует результат проверки и отображает сообщение пользователю или без ошибок, если нет ошибок.
var Demo = { start: function(){ $$('.formElement').each(function(el){ el.addEvent('change',function(e) { e.stop(); var msg = new Element('span').injectAfter(this); var request = new Request({ url: 'demo.php', link: 'chain', method: 'get', data: { field: this.name, value: this.value, ajax: 1, save: 1 }, onSuccess: function(response) { var response = JSON.decode(response); if(response.error==false){ $('msg').setStyle('visibility','hidden'); el.setProperty('class', 'formElement correct' ); }else{ $('myform').setStyle('visibility','visible'); $('msg').set('html',response.mytext); el.setProperty('class', 'formElement incorrect' ); } } }).send(); }); }); } } window.addEvent("domready", function(){ Demo.start(); });
Это то же самое, что и предыдущий пример, за исключением того, что мы добавляем скрытое поле под названием «AJAX» (хотя это неправильно .. AJAX означает «асинхронный JavaScript и XML», который почти правильно, за исключением характеристики XML … наш сценарий PHP вернет JSON вместо этого. Значение «AJAX» рассказывает PHP независимо от того, принимает ли он вход в качестве асинхронного отдельного поля или всей формы.
Здесь мы добавили проверку на значение «AJAX», которое сообщает сценарию, как обрабатывать вход (если это вся форма, или одно поле проходило асинхронно. Весь скрипт должен делать, если выводят массив JSON, а затем прекратить обработку, чтобы он также не вернул остальную часть HTML на странице.
Вы можете выбирать, чтобы ваши формы отправили в отдельный скрипт, в этом случае убийство скрипта на данный момент будет не подлежит не нужно. Если поле Validate теперь также реорганизует представленный ключ и значение в массив, так же, как форма отправки, так что нам не нужно обрабатывать входные данные по-разному. Вам не нужно делать это, конечно.
$form['value']) : $form; foreach($form as $key=>$value){ if($key=="mytext"){ if(strtolower($value) != "peas"){ $message['error'] = true; $message[$key] = "<< Please say \"peas\""; } elseif(empty($value)){ $message['error'] = true; $message[$key] = "<< You forgot to tell us what you like!"; } } //other fields we're validating } return $message; } ?>
Вот и все! При очень небольшом количестве MOOTOOLS JS и добавления 5 или 6 линий к HTML и PHP у нас есть гладкий второй слой на нашей проверке, который сохраняет пользовательское время и разочарование, если у них возникнут проблемы с получением их ввода.
Теперь вы модный фронт-конец без пожертвования безопасности.
Оригинал: «https://dev.to/wpsyed/secure-javascript-form-validation-with-mootools-835»