2010-11-27 2 views
4

В настоящее время я проверяю ввод пользователя на стороне сервера (PHP). Клиентская сторона отправляет вызовы XMLHttpRequest и маркирует недопустимые поля с красными границами. Все остальное замечательно, за исключением того, что, по-моему, для клиента требуется слишком много времени, чтобы сделать запрос, а затем заметить, что он что-то сделал неправильно. Я думаю, что я должен поместить некоторые проверки JavaScript так, чтобы клиенту не нужно было ждать завершения запроса.Как я могу использовать проверку на стороне клиента и на стороне сервера при минимизации дублирования?

Однако я не хочу дублировать правила и правила проверки. Кто-нибудь выполнил проверку с обеих сторон, чтобы вам не нужно было дублировать правила валидации?

Я использую Yii и обычный старый JavaScript с jQuery, если это имеет значение.

Редактировать: Я также считаю утомительным, что у клиента может быть неправильное время на его компьютере, поскольку проверка даты и времени на основе JavaScript плохое. Это означает, что мне нужно будет дать правильное время с сервера на сценарий.

+0

Нет, пока еще нет. Но я планирую повторно использовать HTML5-стиль `pattern = \ w +` regexes на стороне клиента для уведомлений и серверной части для фильтрации. Возможно сокращение дублирования (с учетом не-программной библиотеки php-форм). – mario 2010-11-27 16:53:56

ответ

1

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

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

Там также, как представляется, расширение, которое сделает это для вас: http://www.yiiframework.com/extension/jformvalidate/

2

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

Для клиентов используйте jquery, чтобы сделать некоторые вызовы AJAX функции проверки PHP.

+0

Это лучший подход +1 – methodin 2010-11-27 16:59:28

+0

Вот что я делаю прямо сейчас, создавая XHR и отмечая недопустимые поля с красными границами. Проблема, которую я вижу, заключается в том, что более длинные запросы заставляют ее выглядеть глупыми и непригодными для использования, поскольку пользователю приходится ждать завершения запроса. – Tower 2010-11-27 17:22:46

-1

на первый я не могу сказать и не доверять пользователю ... Пользователь может изменить Java Script ... поэтому проверка на стороне сервера требуется

второй: почему мы используем проверку на стороне клиента? для скорости.

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

проверить с помощью js и отправленных данных. в admin, если есть неправильный пользователь выхода данных.

+2

Это именно то, что планирует сделать ОП. Вопрос в том, как это сделать. – casablanca 2010-11-27 16:58:41

0

Если ваши правила проверки могут быть описаны в терминах регулярных выражений, вы можете определить их в одном месте и использовать одно и то же регулярное выражение в вашем php-коде, который вы используете в своем сгенерированном javascript.

+0

Мне нужно больше, чем если бы вы хотели, чтобы даты были в допустимых пределах. – Tower 2010-11-27 17:25:00

1

Определенно не использовать проверку для любых целей на стороне клиента DateTime. Вы правы на этом.

Итак, вы хотите написать один код для каждой проверки.

Итак, перейдите к функции в php, которая проверяет подлинность электронной почты, скажем: validate_email().

Как только пользователь нажимает кнопку отправки, вы можете отправить все данные в php-код с помощью ajax и подтвердить его.

Как только пользователь проходит фазу отправки, вы можете использовать ту же функцию validate_email(), чтобы проверить $ _POST.

Таким образом, вы пишете один код, и его легче поддерживать.

Это медленнее по сравнению с javascript? Сложно сказать. Помните, что добавление дополнительного плагина проверки jquery имеет свою нагрузку на странице. Here is a popular validation plugin для jquery, это 25KB в своей сокращенной версии. Теперь ваш код аккуратный и более простой в обслуживании. Если это домашняя страница, и если вы предпочтете использовать плагин, вы просто сохранили нагрузку 25 КБ на вашей, вероятно, самой ценной целевой странице.

+0

Плагин проверки jQuery, упомянутый, замечательный. Очень прост в использовании, легко расширяется с помощью пользовательских правил. – 2010-11-28 05:50:53

0

Некоторые псевдо-код в качестве возможного подхода:

В PHP:

function validate() { 
    // Use $_POST to validate whatever items in whatever fashion you want 
    // and echo a message or some JSON array etc... 
} 

В JavaScript (предполагающей JQuery):

$('#formButton').click(function(event){ 
    event.preventDefault(); 
    $.post('/url/of/page', $(this).serializeArray(), function(response){ 
     // Assuming JSON data, but could just be a string or message, 
     // check for response.success or whatever from validation 
     if(response.success) $('#form').submit(); 
     else // Some error message or action 
    }); 
}); 

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

Смежные вопросы