Этот вопрос, несомненно, будет трудно ответить и спросить таким образом, что имеет смысл, но я постараюсь изо всех сил:
У меня есть форма, которая использует PHP для отображения определенных разделов формы, таких как:
<?php if ($_SESSION['EnrType'] == "Individual") { display only form information for individual enrollment } ?>
а также
<?php if ($_SESSION['Num_Enrs'] > 6) { display only form information for 7 total members enrollment } ?>
В каждой части формы собрана уникальная информация о каждом зачислении, но основные критерии для каждого зачисленного являются одинаковыми, то есть все пользователи должны иметь значение в поле FirstName. Каждое поле называется в соответствии с номером подписчика, то есть Num1FirstName; Num2FirstName.
У меня есть скрипт проверки PHP, который абсолютно фантастичен и я не хочу его менять, но проблема, с которой я сталкиваюсь, – это дублирование скрипта, чтобы проверять все поля одним махом.
При представлении все POSTED-элементы запускаются через мой скрипт проверки и на основе набора правил возвращают ошибку, если они не равны true.
Образец кода:
if (isset($_POST['submit'])) { // import the validation library require("validation.php"); $rules = array(); // stores the validation rules //All Enrollee Rules $rules[] = "required,Num1FirstName,Num2FirstName,The First Name field is required.";
В приведенном выше скрипте есть следующие правила: $ rules [] = "ТРЕБОВАНИЕ, имя поля, сообщение об ошибке", где требование дает критерии (в этом случае просто передается значение), имя поля – это имя проверяемого поля и сообщение об ошибке возвращает использованную ошибку.
Моя цель состоит в том, чтобы использовать ту же формулу выше и иметь $ rules [] пробежать ВСЕ первые имена и возвращать отправленную ошибку ТОЛЬКО, если они существуют (т. Е. Не проверять имя участника № 7, если оно не существует на экране).
Если я просто помещаю запятую между «fieldnames», это проверяет только первый, затем второй и т. Д., Поэтому это не сработает.
Есть идеи?
Если я понимаю, что вы пытаетесь сделать правильно:
1. Определить типы
Во-первых, вам необходимо определить, для какого типа поля требуются какие-либо правила, например:
$ type ['FirstName'] ['required'] = 'required'; $ type ['FirstName'] ['error_message'] = 'Поле First Name обязательно.';
// просто случайный пример: $ type ['MobilePhone'] ['required'] = 'optional'; $ type ['MobilePhone'] ['error_message'] = 'Только ввести цифры.';
2. Пройдите через каждое опубликованное значение
Во-вторых, проверьте для каждого опубликованного значения какой тип поля он есть. Теперь в массив $_POST
можно включить много вещей, и вам нужно только проверить определенные поля. Это может сделать намного проще использовать такие имена, как checkthis;1234;FirstName
для ваших полей ввода.
foreach ($ _POST как $ key => $ value) { // Разделим ключ, чтобы вы знали, что к чему: $ data = explode (';', $ key);
// теперь $ data [0] сообщает вам, какое поле это // $ data [1] - идентификатор зарегистрированного пользователя (ваш Num1, Num2) // $ data [2] - тип поля
// проверяем только те поля, которые начинаются с "checkthis" if ($ data [0] == 'checkthis') { // теперь вы можете заполнить массив $ rule: $ rule [] = $ type [$ data [2]] ['required']. ','. $ key. ','. $ Типа [$ данных [2]] [ 'error_message']; } }
Таким образом, не имеет значения, что вы включаете в свою форму. Пока вы определили тип поля, правило будет добавлено в массив правил, если оно будет включено в значения $ _POST, и ваш скрипт проверки сделает все остальное.
редактировать
Если вы структурируете свои поля ввода следующим образом:
<input type="text" name="F1Firstname" value="" /> <input type="text" name="F2Firstname" value="" /> etc..
.. и вы отправляете форму, массив $ _POST, например, выглядит следующим образом:
//print_r($_POST) gives: Array ( [F1FirstName] => John [F2FirstName] => Jane )
.. Самое легкое, что нужно сделать, – это пропустить каждый из них с помощью foreach
:
foreach ($_POST as $key => $value) { // first $key will be "F1FirstName" // first $value will be "John" // second $key will be "F2FirstName" // second $value will be "Jane" // etc }
Теперь, в том, что $ _POST также будут другие типы полей, например, F1MobilePhone
или что-то еще, которые требуют разных валидаций и разных сообщений. Поэтому для каждого из этих полей вам нужно выяснить, какой тип это, определить, какое сообщение должно войти в вашу функцию проверки. Один из вариантов был бы (это относится к заявлению foreach
):
if (strstr($key,'FirstName')) { // add a validation rule for the FirstName type } if (strstr($key,'Somethingelse')) { // etc }
Я не знаю, как работает ваш скрипт проверки, но я предполагаю, что вы делаете что-то вроде этого:
// import the validation library require("validation.php"); $rules = array(); // stores the validation rules // All Enrollee Rules $rules[] = "required,Num1FirstName,The First Name field is required."; // Call on the validation function $result = validate($rules);
Тогда вы, вероятно, получите обратно, было ли в этом случае «Num1FirstName» действительным или нет. Поскольку вы используете $rules
array, валидатор, вероятно, может обрабатывать сразу несколько строк. Просто добавьте больше значений в массив, но не добавляйте другую переменную. Если вы это сделаете:
$rules[] = "required,Num1FirstName,Num2FirstName,The First Name field is required.";
.. валидатор будет считать, что «Num2FirstName» является сообщением об ошибке, так как это третье значение, которое вы вводите, и оно не будет знать, что делать с фактическим сообщением, которое теперь является четвертым значением. Попробуйте это вместо этого:
$rules[] = "required,Num1FirstName,The First Name field is required."; $rules[] = "required,Num2FirstName,The First Name field is required.";
Поэтому, принося все это, вы получите следующее:
foreach ($_POST as $key => $value) { // first $key will be "F1FirstName" // first $value will be "John" // second $key will be "F2FirstName" // second $value will be "Jane" if (strstr($key,'FirstName')) { $rules[] = "required,$key,The First Name field is required."; } if (strstr($key,'Somethingelse')) { $rules[] = "required,$key,Some other message for this type of field."; } } // call on your validate function and feed it the $rules array you've created
Добавление JavaScript в (pre-) validate – это совсем другая история. В конце концов, вам все равно нужно проверить его на PHP, потому что, как вы сказали, проверка JS может быть легко обойдена. Поэтому я предполагаю, что это может быть лучше всего.