密码匹配问题

时间:2018-06-21 12:52:35

标签: php html validation

以下是我的php代码。 我正在尝试进行注册的表单验证,当我提交表单而不填写所有字段时,一切似乎都很好。当我尝试填满所有内容(但故意使密码不匹配)时,它仍然可以使我成功注册。

    if (isset($_POST['submitted']))
    {
        if (empty($_POST['useremail']))
            $newemailerr = "Email is required!";
        else 
            $newemail = ($_POST['useremail']);

        if (empty($_POST['userid']))
            $newiderr = "Username is required!";
        else 
            $newid = ($_POST['userid']);

        if (empty($_POST['userpass']))
            $newpasserr = "Password is required!";
        else 
            $newpass = ($_POST['userpass']);

        if (empty($_POST['confirmpass'] && $_POST['confirmpass'] != $_POST['userpass']))
            $newconfirmpasserr = "Both passwords do not match!";
        else 
            $newconfirmpass = ($_POST['confirmpass']);
    }

3 个答案:

答案 0 :(得分:4)

    // meh:
    for (int* n : {&a, &b, &c}) {
        *n = 0;
    }

    // meh:
    using intRef = std::reference_wrapper<int>;
    for (int& n : {intRef (a), intRef (b), intRef (c)}) {
        n = 0;
    }
}

您应在此处使用OR

if (isset($_POST['submitted']))
{
    if (empty($_POST['useremail']))
        $newemailerr = "Email is required!";
    else 
        $newemail = ($_POST['useremail']);

    if (empty($_POST['userid']))
        $newiderr = "Username is required!";
    else 
        $newid = ($_POST['userid']);

    if (empty($_POST['userpass']))
        $newpasserr = "Password is required!";
    else 
        $newpass = ($_POST['userpass']);

  if (empty($_POST['confirmpass']) || $_POST['confirmpass'] != $_POST['userpass'])            $newconfirmpasserr = "Both passwords do not match!";
    else 
        $newconfirmpass = ($_POST['confirmpass']);
}

答案 1 :(得分:0)

假设您的PHP版本支持简体(DRY)-您可以推送错误,并且仅在需要时返回一次

 $newemail       = $_POST['useremail']   ?? "";
 $newid          = $_POST['userid']      ?? "";
 $newpass        = $_POST['userpass']    ?? "";
 $newconfirmpass = $_POST['confirmpass'] ?? "";

 if (trim($newemail)          == "") { echo "Email is required!";        die(0); }
 if (trim($newid)             == "") { echo "Username is required!";     die(0); }
 if (trim($newpass            == "") { echo "Password is required!";     die(0); }
 if (trim($newconfirmpass)    == "") { echo "New password is required!"; die(0); }
 if ($newpass != $newconfirmpass   ) { echo "Passwords do not match!";   die(0); }

答案 2 :(得分:0)

在最后一个if函数中,您有一个错误的假设。如果在进入功能后(满足功能条件后)使用&&,则应该$ newconfirmpass = ($ _POST ['confirmpass']$ newconfirmpasserr = "Both passwords do not match!";(将功能中的操作与功能外部交换)。当然,此解决方案在整个函数的结构逻辑上会有缺陷,因为您在任何条件函数的主体中都有一条消息。我建议将&&替换为||and上的or)。这样可以解决问题。

该代码不验证输入数据。我知道这是在代码的另一部分(控制器)或前端应用程序中-在html级别和/或javascript上进行验证。

值得一提的是,这样的构造(主要功能)违反了 DRY 打开/关闭的原理,变量的命名违反了 PSR1 -良好的软件开发原则。在 DRY 的第一种情况下,您可以使用@mplungjan用户提出的解决方案。 打开/关闭-而是需要对对象样式进行重构。 PSR1 -我建议使用camelCase。

该代码显示了过程编程的趋势,这使该代码的进一步工作变得复杂。我建议您将这段代码重构为对象模型。

也不建议在一个变量中传递参数或消息。一个好的解决方案是使用两个关联数组(也可以是集合或对象)–一个用于变量,另一个用于发送消息。这将使代码保持顺序-在此阶段以及将来的开发。