Если я понимаю, что вы пытаетесь сделать правильно:
1. Определить типы
Во-первых, вам нужно определить, какой тип поля требует каких правил, например:
$type['FirstName']['requirement'] = 'required';
$type['FirstName']['error_message'] = 'The First Name field is required.';<br>
// just random example:
$type['MobilePhone']['requirement'] = 'optional';
$type['MobilePhone']['error_message'] = 'Only enter digits.';
2. Просмотрите каждое объявленное значение
Во-вторых, проверьте для каждого проведенного значения, какой это тип поля. Теперь многие вещи могут быть включены в массив $_POST
, и вам нужно только проверить определенные поля. Это может упростить использование имен, таких как checkthis;1234;FirstName
, для полей ввода.
foreach ($_POST as $key => $value) {
// split the key, so you know what's what:
$data = explode(';',$key);<br>
// now $data[0] tells you what kind of field it is
// $data[1] is the ID of the enrollee (your Num1, Num2)
// $data[2] is the type of field<br>
// only do checks for posted fields that start with "checkthis"
if ($data[0]=='checkthis') {
// now you can fill the $rule array:
$rule[] = $type[$data[2]]['requirement'] . ',' . $key . ',' . $type[$data[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
, валидатор может обрабатывать несколько строк одновременно. Просто добавьте больше значений в массив, но не добавляйте другую переменную. Если вы сделаете это:
<code>$rules[] = "required,Num1FirstName,Num2FirstName,The First Name field is required.";
.. Валидатор будет думать, что «Num2FirstName» - это сообщение об ошибке, поскольку это 3-е значение, которое вы вводите, и он не будет знать, что делать с реальным сообщением, которое теперь является 4-м значением. Попробуйте вместо этого:
<code>$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 для (предварительной) проверки - это совсем другая история. В конце концов, вам все равно нужно проверить его на PHP, потому что, как вы сказали, проверку JS можно легко обойти. Поэтому я думаю, что исправить это первым может быть лучше.