Как я могу использовать проверку на стороне клиента и на сервере, минимизируя дублирование? - PullRequest
4 голосов
/ 27 ноября 2010

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

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

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

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

Ответы [ 6 ]

2 голосов
/ 27 ноября 2010

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

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

1 голос
/ 27 ноября 2010

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

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

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

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

Как только пользователь пройдет этап отправкиВы можете использовать ту же функцию validate_email () для проверки $ _POST.

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

Это медленнеепо сравнению с JavaScript?Тяжело сказать.Помните, что на страницу загружается дополнительный плагин проверки jquery. Вот популярный плагин проверки для jquery, в его уменьшенной версии он составляет 25 КБ.Теперь ваш код аккуратен и прост в обслуживании.Если это домашняя страница и предполагается, что вы решите использовать плагин, вы только что сохранили 25 КБ загрузки на своей, вероятно, самой ценной целевой странице.

1 голос
/ 27 ноября 2010

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

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

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

0 голосов
/ 27 ноября 2010

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

В 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, однако, не так уж и много.Это также позволяет вам запускать запросы, если вам нужно - конечно, вы хотите, чтобы они были простыми, поскольку все будет выполняться дважды.

0 голосов
/ 27 ноября 2010

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

0 голосов
/ 27 ноября 2010

сначала я могу сказать, никогда не доверяйте пользователю ... пользователь может изменить java-скрипт ... поэтому проверка на стороне сервера требует

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

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

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

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