我有一个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, ";
}
}
}
答案 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循环外的必填字段。确保您可以检查邮政密钥是否永远不存在。见下面的评论。见蒂姆评论。