PHP表单验证

PHP表单验证,php,validation,arrays,field,Php,Validation,Arrays,Field,毫无疑问,这个问题很难以合理的方式回答和提问,但我会尽最大努力: 我有一个表单,它使用PHP显示表单的某些部分,例如: <?php if ($_SESSION['EnrType'] == "Individual") { display only form information for individual enrollment } ?> 上面的脚本执行以下操作,$rules[]=“REQUIREMENT,fieldname,error message” 如果需求给出了条件(在本例

毫无疑问,这个问题很难以合理的方式回答和提问,但我会尽最大努力:

我有一个表单,它使用PHP显示表单的某些部分,例如:

<?php if ($_SESSION['EnrType'] == "Individual") { display only form information for individual enrollment } ?>
上面的脚本执行以下操作,$rules[]=“REQUIREMENT,fieldname,error message” 如果需求给出了条件(在本例中,只是传递了一个值),fieldname是要验证的字段的名称,错误消息返回所使用的错误

我的目标是使用上面相同的公式,让$rules[]运行所有名字,并仅在存在时返回发布的错误(即,如果屏幕上不存在成员#7的名字,则不要检查)

如果我只是在“字段名”之间加一个逗号,这只会检查第一个字段名,然后是第二个字段名,依此类推,所以这不起作用


有什么想法吗?

如果我理解你想正确地做什么:

1。定义类型
首先,您需要定义什么类型的字段需要什么类型的规则,例如:
这样的话,你在表格中包含什么并不重要。只要定义了字段的类型,如果规则包含在$\u POST值中,则会将其添加到规则数组中,剩下的工作将由您的验证脚本完成


编辑
如果输入字段的结构如下所示:


<input type="text" name="F1Firstname" value="" />
<input type="text" name="F2Firstname" value="" />
etc..
//print_r($_POST) gives:

Array
(
    [F1FirstName] => John
    [F2FirstName] => Jane
)
// 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);
..最简单的方法是使用
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
语句中):

我不知道您的验证脚本是如何工作的,但我猜您正在执行以下操作:


<input type="text" name="F1Firstname" value="" />
<input type="text" name="F2Firstname" value="" />
etc..
//print_r($_POST) gives:

Array
(
    [F1FirstName] => John
    [F2FirstName] => Jane
)
// 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);
然后,您可能会收到反馈,在本例中,“numfirstname”是否有效。由于您使用的是数组
$rules
,验证程序可能可以一次处理多行。只需向数组中添加更多值,但不要添加其他变量。如果您这样做:


将JavaScript添加到(预)验证是一个完全不同的故事。最后,您仍然需要在PHP中验证它,因为正如您所说的,JS检查很容易被忽略。所以我想先解决这个问题可能是最好的。

我不会撒谎。这很难理解。您可能想改写部分内容或添加更多细节以使其更加清晰。另一种方法是通过Javascript运行验证(是的,我知道它可以关闭,但会为我提供用php处理的清晰方式),这可能会对我有所帮助。假设我有20个FirstName字段(名为FirstName1、FirstName2、FirstName3等)。我的javascript可以确保在POST期间传递“something”:if(theForm.FirstName1.value==”){alert(“请输入您的名字”);theForm.FirstName1.focus();return(false);}如果在特定字段上发现错误,是否有任何方法运行所有名字,alert(),那么先集中注意力?@Alec-我想你可能走对了方向。我很难跟上,但我会试试这个。虽然我仍然需要为所有名字类型创建自定义错误消息,但我认为这是基于您所描述的。字段当前定义为F1FirstName和F2FirstName。我可能需要简单地构建大量代码来检查它。非常感谢。“F1”和“F2”到底是什么?如果它们都是“firstname”类型,并且当它们没有通过验证时,它们都应该返回相同的错误消息,那么只需确保您找到它是什么类型的字段。不太漂亮,但肯定有可能:
if(strstrstr($fieldname,'FirstName')){//do a FirstName validation}
。F1和F2是运动员名字所属的指示器,并且“必须”附加到字段名。我不知道如何将F1和Firstname分开,然后进行验证,最后再将它们放回一起。也许你可以帮助我在原始帖子下方的评论中添加javascript代码。我想这会帮助我找到正确的答案。我编辑了我的答案并添加了一些东西。如果验证器仍然不能按您的预期工作,那么发布验证器的工作方式可能会澄清一些问题。Alec-我认为确实如此,但最终添加第二行(如您所述)正是我试图避免的。在一种形式中,我有200多个变量,因此逐行列出规则200次是我试图避免的,但可能是我被迫做的!
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);
$rules[] = "required,Num1FirstName,Num2FirstName,The First Name field is required.";
$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