1

在这里,我有三个字段,例如姓名,电子邮件,手机。在这里,我正在做的意味着我在 PHP 中为这些字段编写测试用例,让我们采用名称字段条件,例如

  1. 空置状态
  2. 名字不应该是数字
  3. 姓名至少 3 名

假设上述条件失败意味着我必须推送到Failed Condition数组,我试过我没有得到预期的结果,请任何人更新我的代码

我的代码

    <?php
$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
if(!empty($name) && !empty($email) && !empty($phone)){

    // Scenario = 1
    if(!preg_match("/^[a-zA-Z'-]+$/", $name)){
        $namevalidation['status'] = "Fail" ;
        $namevalidation['Failed Condition'][]['name'][]['Name should not be a number'] = "Condition Failed" ;

    }
    // Scenario = 2
    $namelength = strlen($name);

    if($namelength > 2){

    }else{
    $namevalidation['Failed Condition'][]['name'][]['Minimum Charector'] = "Condition Failed" ;
    }


    if(!empty($namevalidation)){
        echo json_encode($namevalidation);
    }

}else{
    $mandatory['status'] = "Fail" ;
    $mandatory['Error Message'] = "Mandatory fields mismatch";
    if(empty($name)){
    $mandatory['Required Fields'][] = "Name is mandatory";
    } 
    if(empty($email)){
    $mandatory['Required Fields'][] = "Email is mandatory";
    }
    if(empty($phone)){
    $mandatory['Required Fields'][] = "Phone is mandatory";
    }
    if(!empty($mandatory)){
    echo json_encode($mandatory);
    }
}


?>

预期产出

{
"status": "Fail",
"Failed Condition": [
    {
        "name": [
            {
                "Name should not be a number": "Condition Failed"
            },
            {
                "Minimum Charector": "Condition Failed"
            }
        ]
    }
]
}

但我要像这样出去

{
"status": "Fail",
"Failed Condition": [
    {
        "name": [
            {
                "Name should not be a number": "Condition Failed"
            }
        ]
    },
    {
        "name": [
            {
                "Minimum Charector": "Condition Failed"
            }
        ]
    }
]
}
4

1 回答 1

0

[]在代码中使用了创建新数组而不是附加先前创建的数组。

$name = $_POST['name'];
$email = $_POST['email'];
$phone = $_POST['phone'];
if(!empty($name) && !empty($email) && !empty($phone)){

    // Scenario = 1
    if(!preg_match("/^[a-zA-Z'-]+$/", $name)){
        $namevalidation['status'] = "Fail" ;
        $namevalidation['Failed Condition'][0]['name'][]['Name should not be a number'] = "Condition Failed" ;

    }
    // Scenario = 2
    $namelength = strlen($name);

    if($namelength > 2){

    }else{
    $namevalidation['Failed Condition'][0]['name'][]['Minimum Charector'] = "Condition Failed" ;
    }


    if(!empty($namevalidation)){
        echo json_encode($namevalidation);
    }

}else{
    $mandatory['status'] = "Fail" ;
    $mandatory['Error Message'] = "Mandatory fields mismatch";
    if(empty($name)){
    $mandatory['Required Fields'][] = "Name is mandatory";
    } 
    if(empty($email)){
    $mandatory['Required Fields'][] = "Email is mandatory";
    }
    if(empty($phone)){
    $mandatory['Required Fields'][] = "Phone is mandatory";
    }
    if(!empty($mandatory)){
    echo json_encode($mandatory);
    }
}

但是,如果输入不同,您当前的代码会创建不同的 Json 主要结构。

假设名称是“ab”,那么您的代码不会添加$namevalidation['status'] = "Fail" ;.

我的建议是你在“场景 2”中做一个 isset() 检查,如果它没有设置,那么你设置它。

if($namelength > 2){

}else{
$namevalidation['Failed Condition'][0]['name'][]['Minimum Charector'] = "Condition Failed" ;
if(!isset($namevalidation['status'])) $namevalidation['status'] = "Fail" ;
}
于 2018-07-16T06:55:03.320 回答