2010-05-10 5 views
2

Можно ли подтвердить форму с помощью PHP и JavaScript? В настоящее время я могу использовать оба моих существующих form, но только на индивидуальной основе.Проверка формы с PHP и JavaScript?

Моя главная цель заключается в следующем:

  1. Validate форме с использованием JavaScript стороне клиента и представить любые ошибки пользователю немедленно.
  2. Если JavaScript валидация проходит, создается флаг, а затем может начинаться скрипт PHP.

При выполнении моего JavaScript проверки, я использую следующий код внутри тега form:

<form id="Enroll_Form" action="review.php" method="post" name="Enroll_Form" onsubmit="return Enroll_Form_Validator(this)" language="javascript"> 

Если я хочу, чтобы обработать PHP проверки я вынужден переименовать действие, файл PHP_SELF (или просто то же имя файла, которое я использую) и удалить функцию onsubmit.

+1

Почему, на ваш взгляд, должно быть PHP_SELF (с тем же именем файла)? – a1ex07

+0

действие должно быть одной и той же страницы, если я хочу, чтобы результаты, возвращаемые проверкой PHP, появлялись на одной странице (а также использовались опубликованные данные для заполнения после отправки, если обнаружена ошибка). – JM4

+1

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

ответ

3

ОБНОВЛЕНО в Быстродействие на комментарии

Прежде всего, JavaScript не может быть безопасным валидатор, по понятным причинам! это может быть причудливый способ отображения предупреждений и уведомления, но это просто сахар!

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

Этот простой сценарий представляет собой просто демонстрацию того, как вы можете построить интеллектуальный валидатор, но, разумеется, это всего лишь доказательство концепции!


DEMO:http://jsbin.com/aceze/29

$(function() { 
    $('#myform').submit(function() { 
     var error = false; // flag 

     $('.email,.digits,.empty,.some').each(function() { 

      var check = this.className; 

      if (check == 'empty') if (!checkEmpty(this.value)) error = true; 

      if (check == 'digits') if (!checkDigits(this.value)) error = true; 

      if (check == 'email') if (!checkEmail(this.value)) error = true; 

      if (check == 'some') if (!checkSome(this.value)) error = true; 

      if (error) { 
       $(this).css('border', '1px solid red'); 
      } else { 
       $(this).css('border', '1px solid green'); 
      } 
     }); 

     if (error) { 
      return false; 
     } 
    }); 
}); 

Тогда относительно <form> действия, вам не нужно иметь путь страницы PHP в нем, но вы должны использовать AJAX для сделайте POST ИЛИ просто оставьте поле review.php, где находятся ниже, а именно:

// FIRST SNIPPET action="#" 
      if (error == false) { 
      //if all is ok give our form it's php 
      $(this).attr('action','review.php'); 
      } else { 
      // error 
      // place false here so the form don't submit if validation fail! 
      return false; 
     } 

    // SECOND SNIPPET action="review.php" 

      if (error == true) { 
     // form submit only if validation pass 
      return false; 
      } 

    // THIRD SNIPPET action="#" AJAX 

    if (error == false) { 
      // success 
      } else { 
      // error 

     } 
    // this false prevent the form submit in anycase, cause we use AJAX 
    return false; 
+0

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

+0

@J M 4 Эта форма проверяет, не заполнены ли поля формы. Здесь нет никаких проверок данных. Используйте регулярные выражения PHP или что-то еще для этого – ggfan

+0

см. Мои обновления! –

0

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

Как только форма получает отправлена, PHP может делать все, что он хочет, проверять ошибки возврата и т.д.

+0

Я говорю здесь, что javascript на самом деле работает, но PHP не будет, если я буду использовать его таким образом. onsubmit функции переопределяют «действие» в поля формы – JM4

0

Я не пробовал, но с верхней части моей головы; вам не нужен language="JavaScript" в вашей форме, чтобы использовать обработчик событий onsumbit. Если это событие оценивается до true, форма будет отправлена ​​как обычно (поэтому PHP увидит ее и сможет выполнить ее проверку).

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

+0

fredden, вы правы - я удалил устаревший язык. Благодаря! – JM4

0

Не слишком полагайтесь на JS для такого рода вещей. Да, вы можете проверить, чтобы предотвратить пользователей ошибки, но кто-то может легко создать .html и сделать

<form action="http://yoursite.com/review.php" method="post"> 
    <input type="submit"> 
</form> 

и обходными любой проверки JS у вас есть. Проверяйте в PHP так же, как если бы вы не проверяли JS.

+0

Спасибо за помощь! – JM4

+0

использование обе! JS позволяет сделать его «красивым» с выделенным полем формы. сложнее сделать в PHP IMO – ggfan

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