Как мы можем выполнить проверку формы на стороне сервера, используя преимущества атрибутов HTML5, как это можно сделать в JS/jQuery?
Вот немного кода JS/jQuery, который в основном проходит и "подхватывает" любые поля, помеченные атрибутом HTML5 "required" или "pattern". Затем он добавляет класс "error", чтобы привлечь внимание пользователя и т. Д.
$('[required], [pattern').each(function () { // if field is required, we must add .has-error when $(document).ready. We must also add a focus listener to test the pattern and replace .has-error with .has-success, as needed.
if (($(this).attr('required') !== false) && ($(this).val() === "")) {
var formGroup;
formGroup = $(this).closest('.form-group');
formGroup.addClass('has-error'); // .has-error must be added to a .form-group. Use closest() to traverse up DOM starting with $(this) and find the parent .form-group.
$(this).focus(function () { /* .has-error now has focus listener. On focus/blur, we will be testing for an opportunity to have validData, and, subsequently add .has-success */
// We don't want to confuse the user while they are in the field, so let's remove .has-error/.has-success
formGroup.removeClass('has-error'); // upon focus, immediately remove .has-error
formGroup.removeClass('has-success'); // upon focus, immediately remove .has-success
}); // end focus
$(this).blur(function () { // on blur, check for '' val.
if ($(this).val() === "") { // if val() is '', bring back .has-error.
formGroup.addClass('has-error');
// Otherwise, if there is a value, we'll need to check for a pattern.
} else if (!$(this).attr('pattern')) { /* If there is no pattern (we have already established that a value is present), no further testing is required. Go ahead with .has-success. */
formGroup.addClass('has-success');
} else { // If we have made it here, val is not blank, and we have a pattern to go with it.
/* Sometimes a 'general' use fxn. like this might be better served as a fxn. in plugins.js. However, this regExp testing is only used here. Should this change, we can 'externalize' this algorithm */
var regExp = new RegExp($(this).attr('pattern')); // pull the regexp from fg's pattern attrib.
/* Unfortunately, it seems that test() only check to see if the pattern is found, and doesn't account for whether or not there are extraneous characters that shouldn't be there. */
if (regExp.test($(this).val())) { // if match is good, add .has-success {
formGroup.addClass('has-success');
} else { // Pattern doesn't match!
formGroup.addClass('has-error');
} // if-else
} // end if-else if-else
}); // end blur
// if validData = true, add .has-success (and vice-versa).
} // end if
}); // end each
Это подводит меня к основному вопросу моего вопроса PHP. В большинстве примеров, которые я видел для проверки PHP на стороне сервера, код PHP просто использует серию операторов if-else для "разбора" идентификатора формы 1 за раз и выполняет его проверку, будь то регулярное выражение, просто требуется или что угодно.
Это кажется немного неэффективным. Кажется, что, подобно JS/jQuery, мы должны быть в состоянии построить массив полей формы 'required/pattern' или иным образом пройти по ним циклы, а затем использовать 'общие' сообщения или строковые переменные для генерации сообщений об ошибках для отправки обратно. пользователю.
Другими словами, вместо того, чтобы делать:
if(trim($name)=="") {
$error = "Your name is required.";
} elseif(trim($email)=="") {
$error = "Your e-mail address is required.";
} elseif(!isEmail($email)) {
$error = "You have entered an invalid e-mail address.";
Мы должны просто перебрать все, что помечено как "обязательное" (HTML5), и выплюнуть что-то вроде: "Поле" + #ID + "является обязательным".
Точно так же мы должны иметь возможность циклически проходить через что-либо с атрибутом "pattern", извлекать регулярное выражение, проверять его с помощью PHP, а затем, используя атрибут "title" (HTML5), отправлять что-то обратно, например: "The " + #ID + "поле" + .
Как можно "очистить" код PHP, избегая нескольких операторов if-else и вместо этого используя преимущества атрибутов HTML5 для циклов, для выполнения его валидации (проверок)?