【问题标题】:Only send form if all these conditions are matched (true)仅当所有这些条件都匹配时才发送表单(true)
【发布时间】:2018-04-01 12:33:59
【问题描述】:

所以我有这些输入来自我的表单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
    }
}

【问题讨论】:

  • 如果有一个空值作为名字或电子邮件的用户对您来说不是有效用户,那么是的 - 验证您的输入。在你的领域模型中强制执行它们。
  • empty ($_POST['firstname']) 永远不会是真的,你已经检查过它(和其他的)不是空的。在比较之前,您确实需要检查 $_POST['password_confirmation'] 是否为空。如果您关心隔离哪个字段为空,请不要打扰多重检查条件;一次检查每个元素。
  • 我修好了,检查编辑
  • 确认信息可能为空;导致通知。
  • @mickmackusa 哦,我忘了在帖子里告诉它,但 PW 需要 8 个字符长,所以它不能为空。 if(strlen($password)

标签: php validation conditional registration is-empty


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    您还可以在 HTML 文档的标签中添加“必需”属性。 例如:

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

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

    【讨论】:

    • 你永远不应该相信客户端验证。
    【解决方案3】:

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

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

    您可以在浏览器端使用 JavaScriptJQueryHTML5 属性等脚本语言来完成。另外,它更强大在允许用户提交之前,验证整个表单等功能是正确的。

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

    PHP Server Side Form Validation - W3schools

    Server Side Form Validations using PHP

    【讨论】:

      【解决方案4】:
      if( !empty ($_POST['firstname']) && !empty ($_POST['lastname']) && !empty ($_POST['username']) && !empty ($_POST['email']) && !empty ($_POST['password'])){
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-22
        • 2021-12-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多