无法识别PHP表单中的必填字段数组

时间:2011-08-11 04:11:58

标签: php arrays checkbox

我有一个PHP电子邮件表单,我刚刚添加了一系列复选框。数据很好。但是我想这样做,所以用户必须至少单击其中一个复选框,但是我用来要求字段的当前代码不适用于复选框。复选框数组称为“formOptions”。这是我正在使用的代码:

$allowedFields = array(
'name',
'company',
'email',
'phone',
'comments',
'output',
'formOptions',
 );

// Specify the field names that you want to require...
$requiredFields = array(
'name',
'email',
'phone',
'formOptions',  
);


// Loop through the $_POST array, which comes from the form...
$errors = array();
foreach($_POST AS $key => $value)
{
// first need to make sure this is an allowed field
if(in_array($key, $allowedFields))
{
    $$key = $value;

    // is this a required field?
    if(in_array($key, $requiredFields) && $value == '')
    {
        $errors[] = "$key, ";
    }
}
}

2 个答案:

答案 0 :(得分:1)

您可能希望测试empty()而不是$value == ''

但真正的问题是你没有测试任何未设置的$_POST变量。因此,当您确保必填字段不为空时,它不会检查甚至没有传递给脚本的字段。如果未选中复选框,会发生什么情况,$_POST['formOptions']不是空的,而是没有$_POST['formOptions']

您需要遍历$_POST数组,而不是遍历$requiredFields数组。

foreach($requiredFields as $field){
  if(empty($_POST[$field])){
    //$field is missing
  }
}

如果您不想更改当前结构,可以在发现每个$requiredFields时取消设置,如果$requiredFields有任何成员,则它们是缺少的字段。

使用您的示例代码:

foreach($_POST AS $key => $value)
{
  // is this a required field?
  if(in_array($key, $requiredFields))
  {
    if(empty($value)){
      //$key is missing
    }

    unset($requiredFields[array_search($key)];
  }      
}
//$requiredFields contains any missing fields

或者您也可以设置一些默认值(null可以使用),并保留您现有的代码:

$requiredFields = array(
  'name' => null,
  'email' => null,
  'phone' => null,
  'formOptions' => null,  
);

$_POST = array_merge($requiredFields, $_POST); 
//any missing required field is now null

然后您只需要将“必需”检查更改为:

if(array_key_exists($key, $requiredFields) && $value == '')

请注意,我尚未测试任何代码示例。

答案 1 :(得分:0)

您可以使用:

   if(in_array($key, $requiredFields) && !$value)

,它应该可以工作

编辑:

它应该不起作用。你需要放置一个循环,检查$ _post循环外的必填字段。确保您可以检查邮政密钥是否永远不存在。见下面的评论。见蒂姆评论。