PHP验证多个必需的输入字段

PHP验证多个必需的输入字段,php,Php,在发送电子邮件之前,我正在验证一些输入字段。我使用for each更快地遍历数组,检查每个输入是否为空,并将其作为jquery中的响应返回,以显示错误。问题在于,电子邮件和消息输入未被验证。即使输入为空,也会发送电子邮件 数组元素来自html的输入名称属性 function e_($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); r

在发送电子邮件之前,我正在验证一些输入字段。我使用for each更快地遍历数组,检查每个输入是否为空,并将其作为jquery中的响应返回,以显示错误。问题在于,
电子邮件
消息
输入未被验证。即使输入为空,也会发送电子邮件

数组元素来自html的输入名称属性

function e_($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

#required fields
$required = array('name', 'email','lname','message','country' , 'city' ,'adcategory','plan' ,'company');
$success = false;

#non required fields
$website = e_($_POST['website']);
$addr = e_($_POST['address']);

foreach($required as $field) {
    if (empty($_POST[$field]))
    {
        $success = false;
    }
    else if(!empty($_POST[$field])){
        $success = true;
        $name = e_($_POST['fname']);
        $email = e_($_POST['email']); #this has issue
        $lname = e_($_POST['lname']);
        $msg = e_($_POST['message']); #this has issue

        $country = e_($_POST['country']);
        $city = e_($_POST['city']);
        $adCategory = e_($_POST['adcategory']);
        $plan = e_($_POST['plan']);
        $companyName = e_($_POST['company']);
    }

}

if($success)        
    echo "success";
else if (!$success)
    echo json_encode(['errors'=>true]); #this will be manipulated in jquery

问题是您将
$success=true
每当您找到必填字段时,这将撤消
$success=false用于上一个字段。您还可以处理
中的所有字段,如果
,则处理所有字段,即使这只意味着找到了其中一个必填字段

$success = true;
foreach ($required as $field) {
    if (empty($_POST[$field])) {
        $success = false;
        $missing_field = $field;
        break;
    }
}

if (!$success) {
    echo json_encode(['errors'=>true, 'missing' => $missing_field]);
    exit();
}

$name = e_($_POST['fname']);
$email = e_($_POST['email']); #this has issue
$lname = e_($_POST['lname']);
$msg = e_($_POST['message']); #this has issue

$country = e_($_POST['country']);
$city = e_($_POST['city']);
$adCategory = e_($_POST['adcategory']);
$plan = e_($_POST['plan']);
$companyName = e_($_POST['company']);
echo "Success";

问题是您将
$success=true
每当您找到必填字段时,这将撤消
$success=false用于上一个字段。您还可以处理
中的所有字段,如果
,则处理所有字段,即使这只意味着找到了其中一个必填字段

$success = true;
foreach ($required as $field) {
    if (empty($_POST[$field])) {
        $success = false;
        $missing_field = $field;
        break;
    }
}

if (!$success) {
    echo json_encode(['errors'=>true, 'missing' => $missing_field]);
    exit();
}

$name = e_($_POST['fname']);
$email = e_($_POST['email']); #this has issue
$lname = e_($_POST['lname']);
$msg = e_($_POST['message']); #this has issue

$country = e_($_POST['country']);
$city = e_($_POST['city']);
$adCategory = e_($_POST['adcategory']);
$plan = e_($_POST['plan']);
$companyName = e_($_POST['company']);
echo "Success";

您的foreach循环是错误的。在检查是否为空的for循环中,有if语句检查它是否为空。首先需要检查所有值是否为空,然后运行该if语句

$success = true;
foreach($required as $field) {
    if (empty($_POST[$field]))
    {
        $success = false;
        break;
    }
}

if($success)
{
    // set your variables
} else {
    // don't set your variables
}

您的foreach循环是错误的。在检查是否为空的for循环中,有if语句检查它是否为空。首先需要检查所有值是否为空,然后运行该if语句

$success = true;
foreach($required as $field) {
    if (empty($_POST[$field]))
    {
        $success = false;
        break;
    }
}

if($success)
{
    // set your variables
} else {
    // don't set your variables
}

An不理想,也不建议使用。An不理想,也不建议使用。由于某些原因,
$success
从不返回true。我在表单中填写所有输入,我添加了代码以返回缺少的字段。当你尝试它时,它会说什么?如果你做了
var\u dump($\u POST)
你看到
name
了吗?你把它放在PHP代码中并查看输出。出于某种原因,
$success
永远不会返回true。我在表单中填写所有输入,我添加了代码以返回缺少的字段。当你尝试它时,它会说什么?如果你做了
var\u dump($\u POST)
你看到
name
了吗?你把它放在PHP代码中并查看输出。