使用Ajax检查登录表单

时间:2015-03-02 07:25:19

标签: javascript php jquery ajax forms

很抱歉,如果这是重复的话。我搜索了很多,但我无法找到解决问题的方法。

我使用内置登录的CMS系统,但我想在将登录详细信息发送到名为login.php的最终登录文件之前检查登录详细信息 我有4个文件:

  • login_form.html
  • main.js
  • check_login.php
  • login.php - 使用登录脚本构建,我对此文件一无所知

这是我的login_form.html

<div id="login-main" title="Close">
    <div id="login-form" title="">
        <span id="span_close" title="Close">x</span>
        <form class="login-box" id="login-form-final" action="http://localhost/ubytovanie-slovakia.sk/account/login.php" method="post">
            <p>Login</p>
            <input type="hidden" name="username_fieldname" value="username" />
            <input type="hidden" name="password_fieldname" value="password" />
            <p id="login_err"></p>
            <div class="login-line">
                <input type="text" name="username" maxlength="30"/>
                <label>Loginname</label>
            </div>
            <div class="login-line-pass">
                <input type="password" name="password" maxlength="30"/>
                <label>Password ( <a href="#" id="show_lost_pass">Forgot password?</a> )</label>
            </div>
            <div class="login-checkbox-line">
                <input type="checkbox" name="remember" id="remember" value="true"/>
                <label for="remember"><span></span>Remember</label>
            </div>
            <div class="login-submit-line">
                <input type="submit" name="submit" id="login-submit" value="Login"  />
            </div>
        </form>
    </div>
</div>

这是我的JS代码:

$('#login-main').live("click",function(e){
        var login_form = $('#login-main').find('*');
        if(!($(e.target).is(login_form))||$(e.target).is('#login-form #span_close')){
            $('#login-main').fadeOut();
        }
        if($(e.target).is('#login-form #login-submit')){
            var login_name = $("#login-form .login-line input").val();
            var login_pwd = $("#login-form .login-line-pass input").val();
            $.post(WB_URL+"/include/ajax/check_login.php", { login_name: login_name, pwd: login_pwd }).done(function(error) {
                switch(error){
                    case '0':
                        $("#login-form-final").submit(function(){
                            return true;
                            alert("submit ready");
                        });
                        break;
                    case '1': 
                        $('#login_err').html('Loginname is empty!');
                        break;
                    case '2':
                        $('#login_err').html('Password is empty!');
                        break;
                    case '3':
                        $('#login_err').html('Wrong loginname or password!');
                        break;
                    case '4':
                        $('#login_err').html('Random error!');
                        break;
                } 
            });
        }
        return false;
    });

这是check_login.php

require_once('../../config.php');
require_once('../../framework/class.database.php');

if(isset($_POST['login_name'])&& isset($_POST['pwd'])){
    if($_POST['login_name'] == ''){
        $error = '1';
    }else if($_POST['pwd'] == ''){
        $error = '2';
    }else{
        $login_name = test_input($_POST['login_name']);
        $pwd_md5 = md5($_POST['pwd']);
        $q = "SELECT * FROM `".TABLE_PREFIX."users` WHERE `username`='".$login_name."' AND `password`='".$pwd_md5."'";
        $res = $database->query($q);
        if($res->numRows()<1){
            $error = '3';
        }else{
            $error = '0';
        }
    }
}else{
    $error = '4';
}
echo $error;

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

问题:

除非我输入好的登录名和良好的密码,否则一切正常。表格没有提交。它会写一个带有文字的提醒&#34;提交准备就绪&#34;,所以案例:&#39; 0&#39;工作正常,但.submit函数没有。有人能帮帮我吗?

1 个答案:

答案 0 :(得分:1)

我认为问题是如果案例为0你想提交表格,那么你应该使用$(“#login-form-final”)。submit();但是你正在使用提交处理程序。如果从提交表单的某些地方告诉引擎该怎么做。我叮叮当当你不想要的。

还有一件事是你在返回后使用一个语句,它将永远执行。