Проверка формы PHP

Этот вопрос, несомненно, будет трудно ответить и спросить таким образом, что имеет смысл, но я постараюсь изо всех сил:

У меня есть форма, которая использует 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 может быть легко обойдена. Поэтому я предполагаю, что это может быть лучше всего.