Ben doğru yapmaya çalışıyoruz anlamak eğer:
1. Define types
First, you need to define what type of field requires what kinds of rules, e.g.:
$type['FirstName']['requirement'] = 'required';
$type['FirstName']['error_message'] = 'The First Name field is required.';
// just random example:
$type['MobilePhone']['requirement'] = 'optional';
$type['MobilePhone']['error_message'] = 'Only enter digits.';
2. Go through each posted value
Second, check for each posted value what type of field it is. Now a lot of stuff might be included in the $_POST
array, and you only need to check certain fields. It might make it a lot easier to use names like checkthis;1234;FirstName
for your input fields.
foreach ($_POST as $key => $value) {
// split the key, so you know what's what:
$data = explode(';',$key);
// 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
// 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'];
}
}
This way it doesn't matter what you include in your form. As long as you've defined the type of field, a rule will be added to the rule array if it's included in the $_POST values, and your validation script will do the rest.
Edit
If you structure your input fields like this:
<input type="text" name="F1Firstname" value="" />
<input type="text" name="F2Firstname" value="" />
etc..
.. Ve formu gönderin, $ _POST dizi olacak ör Bu gibi görünüyor:
//print_r($_POST) gives:
Array
(
[F1FirstName] => John
[F2FirstName] => Jane
)
.. Yapılacak en kolay şey foreach
olan her döngü için:
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
}
Şimdi, bu $ _POST aynı zamanda, örneğin gibi alanlarda diğer türleri, olacak F1MobilePhone
veya farklı doğrulamaları ve farklı mesajlar gerektiren ne olursa olsun,. Yani bu alanların her biri için, size doğrulama işlevine girmek için mesajın ne tür belirlemek için, ne tip bulmak gerekir. Bir seçenek (bu foreach
deyimi içinde gider) olacaktır:
if (strstr($key,'FirstName')) {
// add a validation rule for the FirstName type
}
if (strstr($key,'Somethingelse')) {
// etc
}
Ben senin doğrulama komut dosyası nasıl çalıştığını bilmiyorum, ama ben böyle bir şey yaptığını tahmin ediyorum:
// 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);
Sonra muhtemelen bu durumda, "Num1FirstName" geçerli ya da değil, olsun geri alırsınız. Bir dizi $rules
kullanmak beri, validator muhtemelen bir kerede birden fazla satır işleyebilir. Basitçe diziye daha fazla değer katmak, ama başka bir değişken eklemek gerekmez. Bunu yaparsanız:
$rules[] = "required,Num1FirstName,Num2FirstName,The First Name field is required.";
code>
.. O Girdiğiniz 3 değer beri validator, "Num2FirstName" hata mesajı olduğunu düşünüyorum, ve şimdi 4 değer gerçek mesajın ne yapacağını bilemezsiniz. Bunun yerine bu deneyin:
$rules[] = "required,Num1FirstName,The First Name field is required.";
$rules[] = "required,Num2FirstName,The First Name field is required.";
Böylece hep birlikte bu getirerek bu veriyor:
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
(Pre-) doğrulamak için JavaScript ekleme tamamen farklı bir hikaye. Dediğin gibi, JS onay kolaylıkla atlanabilir, çünkü sonunda yine PHP bunu doğrulamak gerekir. Yani bu ilk iyi olabilir sabitleme sanırım.