如何处理处理其他表单的提交而提交表单?

时间:2019-03-25 19:24:08

标签: javascript jquery forms

页面上总共有3种表格。 两种用于用户输入,第三种是实际需要提交的表单。

表1是通常的登录名,其中包含用户名和密码。 表单被提交并检查有效性(javascript和PHP)。 如果全部签出(即用户名和密码与MySQL DB中的内容匹配),则用户名和密码将填充到第三种表单中以进行提交。 如果用户名确实存在,但它是一个新帐户,则该用户将被重定向到表单2。即,隐藏了表单1,并显示了表单2。

表格2:输入,确认和确认新密码后,用户名和新密码将在第三张表格上传递。

应该在表3中进行魔术。 这是您能想到的最基本的形式。

它是通过我拦截了onsubmit的1或2表单的处理提交的。

第三种形式是在Apache中执行基于表单的身份验证。

如果我从网页上单独使用该表单,则会提交该表单,并按预期将我重定向到受保护的页面。 如果我从代码中提交页面,网页将被重新加载,但重定向从未发生。实际上,身份验证也不起作用。

我尝试通过PHP处理服务器端登录过程,但失败了,因为我使用的是基于表单的身份验证,而PHP服务器登录过程是用于基本身份验证或摘要身份验证的。

我试图动态地以及手动地创建第三种形式,但是没有任何处理。之所以会调用提交,是因为页面会重新加载,仅此而已。

环境 Ubuntu 16.04 具有基于表单的身份验证的Apache 用户数据库的MySQL PHP背后的代码 用于客户端编码的Javascript / jQuery

表格的精简版

表格1:

<form class="validate-form" method="post" name="loginform">
    <input type="hidden" name="formname" value="login">
    <input type="text" name="login_username" placeholder="Username">
    <input type="password" name="login_password" placeholder="Password">
    <button>Login</button>
</form>

表格2:

<form class="validate-form" method="post" name="changepasswd" style="display:none;">
    <input type="hidden" name="formname" value="reset">
    <input type="password" name="new_password" placeholder="New Password">
    <input type="password" name="confirm_password" placeholder="Confirm Password">
    <button>Reset password and Login</button>
</form>

表格3:

<form method="POST" action="" name="submit_form" style="display:none;">
    <input name="httpd_username">
    <input name="httpd_password">
    <button>Login</button>
</form>

表格处理:

$('.validate-form').on('submit',function(){
    var workform = 'loginform';
    var check = true;
    if ($('form[name=resetform]').is(":visible")) workform = 'resetform'; 

    // Validating the entries (not empty, format,...)
    //...
    if (check) {
        if (workform == 'loginform') { //Processing Form 1
        //send to PHP for processing
        //...
            var response = xhreq.responseText.trim().split(":");
            // The response looks like i:information or w:warning or e:error message
            var success = true;
            switch (response[0]) {
                case 'i':
                //username and password checks out against the database,
                //now populating form 3 for submission:     
                    $('input[name=httpd_username]').val($('input[name=login_username]').val().trim());
                    $('input[name=httpd_password]').val($('input[name=login_password]').val().trim());
                    $('form[name=submit_form]').submit(); // and submitting the form
                    break;
                case 'w': // showing for 2 and hiding for 1 to change the Password
                    success = false;
                    break;
                case 'e': // error processing
                    success = false;
                    break;
                default:
                    success = false;
                }
                return success;
            } else { //Processing Form 2
                //send to PHP for processing
                //...
                var response = xhreq.responseText.trim().split(":");
                // same response format as for form 1
                var success = true;
                switch (response[0]) {
                    case 'i':
                        $('input[name=httpd_username]').val($('input[name=login_username]').val().trim());
                        $('input[name=httpd_password]').val($('input[name=new_password]').val().trim());
                        $('form[name=submit_form]').submit();
                        break;
                    case 'w':
                        alert(response[1]);
                        success = false;
                        break;
                    case 'e': // error processing
                        success = false;
                        break;
                    default:
                        success = false;
                    }
                    return success;
                }
            } else { //form 1 or 2 validation failed
                return false;
            }
        });

预期结果:提交表格3,并将我重定向到受限制的页面

实际结果:提交表格3,未进行身份验证,仍然拒绝访问受限页面。

1 个答案:

答案 0 :(得分:0)

已修复!

当由于某种原因导致登录凭据不符合预期时,我返回false;而在服务器端response[0]='i'上签出凭据时,我返回true。

返回始终设置为 false 时,将执行表格3上的登录过程。

我对表格1和2的验证功能变为:

$('.validate-form').on('submit',function(){
    var workform = 'loginform';
    var check = true;
    if ($('form[name=resetform]').is(":visible")) workform = 'resetform'; 

    // Validating the entries (not empty, format,...)
    //...
    if (check) {
        if (workform == 'loginform') { //Processing Form 1
        //send to PHP for processing
        //...
            var response = xhreq.responseText.trim().split(":");
            // The response looks like i:information or w:warning or e:error message

            switch (response[0]) {
                case 'i':
                //username and password checks out against the database,
                //now populating form 3 for submission:     
                    $('input[name=httpd_username]').val($('input[name=login_username]').val().trim());
                    $('input[name=httpd_password]').val($('input[name=login_password]').val().trim());
                    $('form[name=submit_form]').submit(); // and submitting the form
                    break;
                case 'w': // showing for 2 and hiding for 1 to change the Password

                    break;
                case 'e': // error processing

                    break;
                default:

                }
                return false;
            } else { //Processing Form 2
                //send to PHP for processing
                //...
                var response = xhreq.responseText.trim().split(":");
                // same response format as for form 1

                switch (response[0]) {
                    case 'i':
                        $('input[name=httpd_username]').val($('input[name=login_username]').val().trim());
                        $('input[name=httpd_password]').val($('input[name=new_password]').val().trim());
                        $('form[name=submit_form]').submit();
                        break;
                    case 'w':
                        alert(response[1]);

                        break;
                    case 'e': // error processing

                        break;
                    default:

                    }
                    return false;
                }
            } else { //form 1 or 2 validation failed
                return false;
            }
        });