只有在所有这些条件匹配时才发送表格(true)

时间:2018-04-01 12:34:00

标签: php validation conditional registration is-empty

所以我从表单firstnamelastnameusernameemailpassword获得了这些输入。

但我只想填写注册表并将其保存到我的数据库中,因为所有这些都包含用户提供的任何信息。我现在有这个,但只有在密码和/或密码确认字段不匹配时才显示错误。

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
    }
}

4 个答案:

答案 0 :(得分:0)

您还可以在HTML文档的代码中添加“required”属性。 例如:     

但是此属性仅在HTML5中受支持,而在之前的版本中不受支持。

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

答案 1 :(得分:0)

您尝试执行的操作称为服务器端验证,最好在服务器端验证用户输入,因为您可以防止恶意用户,他们可以轻松绕过您的客户端脚本语言并向服务器提交危险输入。

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

您可以使用脚本语言在浏览器端执行此操作,例如 JavaScript JQuery HTML5 属性.Addtionaly,它具有更强大的功能在允许用户提交之前,验证整个表单的功能是当前的。

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

PHP Server Side Form Validation - W3schools

Server Side Form Validations using PHP

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

Php条件表达式短路,因此一旦达到错误的评估,它们就会停止。

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(或工具提示)进行说明。