仅当所有这些条件都匹配时才发送表单(真)

Only send form if all these conditions are matched (true)

所以我从我的表单 firstnamelastnameusernameemailpassword

中获得了这些输入

但是当所有这些都包含用户提供的任何信息时,我只想完成注册表并将其保存到我的数据库中。我现在有这个,但它只会在密码 and/or 密码确认字段不匹配时显示错误。

if( !empty ($_POST)){

    if($_POST['password'] == $_POST['password_confirmation']) {
       $user = new User();
       $user->setFirstName($_POST['firstname']);
       $user->setLastName($_POST['lastname']);
       $user->setUsername($_POST['username']);
       $user->setEmail($_POST['email']);
       $user->setPassword($_POST['password']);

    if($user->register()){
        $user->login();
    }

    else{
    $error_confirmation = true;
    // This gives error in the front end if both of the PW do no match each other
   }
}

我想我应该做这样的事情?

if( !empty ($_POST['firstname']) && !empty ($_POST['lastname']) && !empty ($_POST['username']) && !empty ($_POST['email']) && !empty ($_POST['password'])){

编辑: 好吧,我想我只是自己想出来的。该页面不发送信息,也不显示 $error_firstname=true; 消息?

if( !empty ($_POST['firstname']) && !empty ($_POST['lastname']) && !empty ($_POST['username']) && !empty ($_POST['email']) && !empty ($_POST['password'])){

    if( empty ($_POST['firstname'])){
        $error_firstname = true;
    }

    if( empty ($_POST['lastname'])){
        $error_lastname = true;
    }

    if( empty ($_POST['username'])){
        $error_username = true;
    }

    if( empty ($_POST['email'])){
        $error_email = true;
    }


    else if($_POST['password'] == $_POST['password_confirmation']) {
        $user = new User();
        $user->setFirstName($_POST['firstname']);
        $user->setLastName($_POST['lastname']);
        $user->setUsername($_POST['username']);
        $user->setEmail($_POST['email']);
        $user->setPassword($_POST['password']);

        if($user->register()){
            $user->login();
        }
    }
    else{
        $error_confirmation = true;
       // show pw confirmation error
    }
}

最终编辑:这确实解决了问题。

我用这个修复了它,并在输入 html 标签上使用了 required。 第一行检查是否给出了所有输入然后继续下一个 if 检查 pw 是否与 pw 确认匹配然后保存到 DB

    if( !empty ($_POST['firstname']) && !empty ($_POST['lastname']) && !empty ($_POST['username']) && !empty ($_POST['email']) && !empty ($_POST['password'])){

    if($_POST['password'] == $_POST['password_confirmation']) {
        $user = new User();
        $user->setFirstName($_POST['firstname']);
        $user->setLastName($_POST['lastname']);
        $user->setUsername($_POST['username']);
        $user->setEmail($_POST['email']);
        $user->setPassword($_POST['password']);

        if($user->register()){
            $user->login();
        }
    }
    else{
        $error_confirmation = true;
       // if no -> $error tonen
    }
}

您还可以在 HTML 文档的标签中添加 'required' 属性。 例如:

但是这个属性只有 HTML5 支持,之前的版本不支持。

如需进一步参考,请查看: https://www.w3schools.com/tags/att_input_required.asp

你要做的是服务器端验证,最好在服务器端验证用户输入,因为你可以防止恶意用户,他们可以轻松绕过您的客户端脚本语言并向服务器提交危险输入。

我认为您错过了另一种类型的验证,称为 客户端 验证。在客户端验证中,您可以通过在以下位置快速响应来提供更好的用户体验浏览器级别。当您执行客户端验证时,所有用户输入都会在用户的浏览器中进行验证。客户端验证不需要往返服务器,因此网络流量将帮助您的服务器更好地执行。

您可以使用脚本语言在浏览器端执行此操作,例如 JavaScriptJQueryHTML5 attributes.Addtionaly,它有更强大的功能,比如在允许用户提交之前验证整个表单是正确的。

下面是一些在 PHP 中进行服务器端验证的教程:-

PHP Server Side Form Validation - W3schools

Server Side Form Validations using PHP

if( !empty ($_POST['firstname']) && !empty ($_POST['lastname']) && !empty ($_POST['username']) && !empty ($_POST['email']) && !empty ($_POST['password'])){

这是你应该做的,因为你只检查两个字段密码和确认密码。您必须检查所有字段,然后完成注册。

Php条件表达式short-circuit,所以一旦到达错误的评价就会停止。

if(!empty($_POST['firstname']) && !empty($_POST['lastname']) && !empty($_POST['username']) && !empty($_POST['email']) && !empty($_POST['password']) && strlen($_POST['password'])>=8 && !empty($_POST['password_confirmation']) && $_POST['password'] == $_POST['password_confirmation']) {
    $user = new User();
    $user->setFirstName($_POST['firstname']);
    $user->setLastName($_POST['lastname']);
    $user->setUsername($_POST['username']);
    $user->setEmail($_POST['email']);
    $user->setPassword($_POST['password']);

    if($user->register()){
        $user->login();
    }
} else {
    $error_confirmation = true;
   // if no -> $error tonen
}

至于向用户提示密码最小值,请使用 pattern 属性进行客户端验证,并使用 placeholder(或工具提示)进行解释。